您现在的位置是:首页 >技术杂谈 >Linux中的 loop设备网站首页技术杂谈
Linux中的 loop设备
简介Linux中的 loop设备
loop设备是一种伪设备(pseudo-device),或者说是仿真设备。它可以使我们在类UNIX系统上像块设备一样访问一个文件。loop设备必须与一个文件进行连接,才能被使用。通过这种方式,文件可以被mount为块设备,并像其他块设备一样进行挂载和读写操作。loop设备通常用于将镜像文件挂载为块设备,以便在系统中使用。
回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。
一般在linux中会有8个loop设备,一般是/dev/loop0~loop7,可用通过losetup -a查看所有的loop设备,如果命令没有输出就说明所有的loop设备都没有被占用,你可以按照以下步骤创建自己的loop设备。
第1步:创建一个文件
dd if=/dev/zero of=/root/loop.img bs=1M count=10240
第2步:使用losetup将文件转化为块设备
losetup /dev/loop0 /root/loop.img
通过lsblk查看刚刚创建的块设备,TYPE是loop,还没有MOUNTPOINT
[root@test ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 10G 0 loop
vda 253:0 0 100G 0 disk
├─vda2 253:2 0 99.8G 0 part /
└─vda1 253:1 0 200M 0 part /boot/efi
[root@yinjq-test ~]# losetup -a
/dev/loop0: [64770]:392694 (/root/loop.img)
我们就获得了一个磁盘,在这磁盘上我们可以构建任何文件系统,通常来说,使用默认的文件系统(即操作系统的当前的文件系统格式)就行了
第3步:格式化
[root@test ~]# mkfs.ext4 /dev/loop0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
第4步:挂载该磁盘到主文件系统下的一个目录
mkdir /root/loop-dev
mount /dev/loop0 /root/loop-dev
[root@test ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs 3.8G 79M 3.7G 3% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/vda2 99G 2.8G 92G 3% /
/dev/vda1 200M 9.0M 191M 5% /boot/efi
tmpfs 763M 0 763M 0% /run/user/0
/dev/loop0 9.8G 37M 9.2G 1% /root/loop-dev
接下来,可以正常使用 /root/loop-dev 这个块设备了
第5步:卸载磁盘
umount /root/loop-dev
第6步:删除loop设备
losetup –d /dev/loop0
问题
[root@yinjq-test ~]# mount /dev/loop0 /root/loop-dev
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
解决方法:先格式化
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。