设备文件loop
静态设备目录/dev可以用 makedev 脚本创建,或者动态地由设备文件系统( udev )设施创建。 /dev/loop循环设备是一种伪设备,它的管理界面是losetup,本质上是 util-linux 软件包的一部分。
一、loop基本介绍
功能:
循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。
用途:
经常被用于光盘或是磁盘镜像(*.iso、*.img)等文件或者自定义, 把这些文件 mount 到当前文件系统的一个目录下。
用法:
/dev/loop 循环设备与一个文件进行连接,这样关联的文件模拟成如同一个块设备,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。很神奇吧!
以下是我们Linux系统默认生成的loop设备文件0-7 是编号:
##一个设备只能挂载一次,上图说明系统默认生成8个可用的挂载。
二、实例演示
示例1:利用磁盘镜象文件
(1)创建空的磁盘镜像文件,这里创建一个1.44M的软盘
[root@localhost~]# dd if=/dev/zero of=fd.img bs=256 count=5760
(2)使用 losetup将磁盘镜像文件虚拟成快设备
[root@localhost~]# losetup /dev/loop0 fd.img
(3)格式化块设备的文件系统类型
[root@localhost~]# mkfs –t vfat fd.img
(4)挂载块设备
[root@localhost~]# mkdir /mnt/fd
[root@localhost~]# mount /dev/loop0 /mnt/fd
[root@localhost~]#echo “this is loop file” > /mnt/fd/loopdata.txt
[root@localhost~]# cat /mnt/fd/loopdata.txt
“this is loop file”
(5)卸载loop设备
[root@localhost ~]#losetup -a
[root@localhost ~]# umount /mnt/fd
[root@localhost ~]#losetup -d /dev/loop0
示例2:挂载光盘DVD的镜像文件
镜像文件不需要刻录就可以直接挂载。
#首先把它们复制到当前目录下,iso文件存放于usb接口的U盘
[root@localhost~]#mount /dev/sdb4 /mnt/usb #挂载U盘
[root@localhost~]#cp /mnt/usb/ centos5.3_x86_64.iso ./
#卸载U盘,,挂载镜像文件
[root@localhost~]#umount /dev/sdb4
[root@localhost ~]#mount -o loop /root/centos5.3_x86_64.iso /mnt/centos_dvd
#进入目录,使用文件
[root@localhost ~]cd/mnt/centos_dvd
解释这条命令:mount -o loop /root/centos5.3_x86_64.iso /mnt/centos_dvd
上述这条命令执行过程其实等价于以下两条命令:
losetup /dev/loop0 /root/centos5.3_x86_64.iso #使DVD的镜像文件与循环设备连结起来
mount /dev/loop0 /mnt/centos_dvd ##将循环设备 mount 到目录 centos_dvd下
示例3:解决目录空间不足
在某目录的空间不够用,而别的目录还有很大空间,则可在该目录下新建大文件,用它制作loop设备文件。
#查看/tmp目录使用情况,可用空间为0了
[root@localhostusb]# df -h /tmp
#拷贝文件打到/tmp,提示空间不够。
#查询/hom目录还有很大空间,可以拿来用用
[root@localhostusb]# df -h /home
##现在我们可/home目录下新建大文件,用它制作loop设备文件。在这里需要用到上节介绍的设备文件/dev/zero,若不了解,请到我上节介绍:《设备文件zero与null》
[root@localhost~]# dd if=/dev/zero of=/home/loopdev bs=M count=800
[root@localhost~]# mkfs -t ext2 /home/loopdev
[root@localhost~]# mkdir /tmp/loopdev_test
[root@localhost~]# mount -o loop /home/loopdev /tmp/loopdev_test
示例3:查看所有与文件相关联的 loop 设备
[root@localhost~]# losetup -a
#现在,我们增加800M的设备文件挂载到/tmp目录下,可继续往/tmp/下的子目录写文件了,拷贝成功,如下:
#从上图得出,使用/dev/loop循环设备文件可以成功借用其它目录的空间。