一般在linux中会有8个loop设备,一般是/dev/loop0~loop7,可用通过losetup -a查看所有的loop设备,如果命令没有输出就说明所有的loop设备都没有被占用。而如果8个loop设备不够用,会提示”mount: could not find any free loop device”,但可以通过修改内核启动参数,增加loop设备的数量的。由loop设备的增加比较简单,本篇就先介绍下如何增加loop设备,后面再介绍loop设备的作用。

一、loop设备的增加

找到/boot/grub/grub.cfg(rhel6、centos6下)、boot/grub2/grub.cfg(rhel7、centos7下)文件,找到如下内容部分:

1linux16 /vmlinuz-0-rescue-993ea53b6af54870b20c82807c2719a3 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
2initrd16 /initramfs-0-rescue-993ea53b6af54870b20c82807c2719a3.img

修改其中linux16部分的最后,增加max_loop=64 ,就会将loop设备上限改为64个。

1linux16 /vmlinuz-0-rescue-993ea53b6af54870b20c82807c2719a3 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb max_loop=64 quiet
2initrd16 /initramfs-0-rescue-993ea53b6af54870b20c82807c2719a3.img

修改完重启OS生效。

二、loop设备的作用

loop设备是一种伪设备,是使用文件来模拟块设备的一种技术。其经常应用在两个场景下:1、光盘挂载(iso文件挂载);2、dd创建的img文件的挂载。

1[root@361way opt]# mount CentOS-7-x86_64-Minimal-1604.iso /mnt
2mount: /dev/loop0 is write-protected, mounting read-only

由于我这里使用的是比较新的OS版本,在一些老的版本里必须还要使用mount -t iso9660 -o loop xxx.iso /mnt这样的方式去挂载。对于这个img镜像文件,可以按如下方法进行挂载:

1dd if=/dev/zero of=ftp.img bs=1M count=2000
2losetup /dev/loop0 ftp.img
3mkfs.ext4 /dev/loop0
4mkdir /ftptest
5mount -o loop ftp.img /ftptest

其实上面的步骤还可以精简为如下:

1dd if=/dev/zero of=ftp.img bs=1M count=2000
2mkfs.ext4  ftp.img
3mkdir /ftptest
4mount -o loop ftp.img /ftptest

这样挂载的时候,系统会自动给其分配loop设备。

三、loop设备的查看和删除

可以通过如下方法查看挂载的loop设备

1lsblk |grep loop0
2losetup -a

删除loop设备可以使用下面的命令:

1losetup -d /dev/loop0