loop设备是一种伪设备(pseudo-device),或者说是仿真设备。它可以使我们在类UNIX系统上像块设备一样访问一个文件。loop设备必须与一个文件进行连接,才能被使用。通过这种方式,文件可以被mount为块设备,并像其他块设备一样进行挂载和读写操作。loop设备通常用于将镜像文件挂载为块设备,以便在系统中使用。
回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。
一般在linux中会有8个loop设备,一般是/dev/loop0~loop7,可用通过losetup -a查看所有的loop设备,如果命令没有输出就说明所有的loop设备都没有被占用,你可以按照以下步骤创建自己的loop设备。
dd if=/dev/zero of=/root/loop.img bs=1M count=10240
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)
我们就获得了一个磁盘,在这磁盘上我们可以构建任何文件系统,通常来说,使用默认的文件系统(即操作系统的当前的文件系统格式)就行了
- [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: 完成
- 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 这个块设备了
umount /root/loop-dev
losetup –d /dev/loop0
问题
[root@yinjq-test ~]# mount /dev/loop0 /root/loop-dev
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
解决方法:先格式化