GeekHub

Linux loop设备简介

引用自wikipedia:

/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))在类Unix系统中是一种伪设备,这种设备使得文件可以如同块设备一般被访问。
在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载
这种设备文件经常被用于光盘或是磁盘镜像。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。如果挂载目录中本身有文件,这些文件在挂载后将被禁止使用。
一个循环设备或许能允许在重定向过程中进行一些数据处理。例如,设备可能是一个被加密文件的解密形式。在这种情况下,与循环设备相关的文件可能是另一种伪设备。当设备包含加密文件系统时,这种数据处理十分有用。如果数据处理得到支持且原文件被加密,循环设备将是此加密文件的解密形式并且设备可以如同普通文件系统一般被挂载。

简单理解,就是将文件系统上文件映射为一个块设备,在具体实现可以通过losetup命令:

首先需要安装losetup命令:

#Debian/Ubuntu系Linux下:
sudo apt install looptools

创建一个超过512Bytes的文件:

sudo dd if=/dev/zero of=/tmp/loopfile bs=1 count=1024

使用losetup命令将loopfile映射到/dev/下:

sudo losetup /dev/loop20 /tmp/loopfile
执行后,/dev/下会生成对应的loop块设备

此时,便将loopfile映射为loop设备,可以将对应的loop设备直接进行硬件操作,对应的修改会映射到文件上。

引用自wikipedia:

在目录上挂载包含文件系统的文件一般需要两步:
用一个循环设备节点连接文件。
在目录上挂载该循环设备
这两个操作既可以用两条命令来完成,也可以通过加上特殊的挂载符号的挂载命令来完成。第一个操作可以通过如Linux平台下的losetup
[5]或者是SunOS上的lofiadm
[6]命令完成。
例如,如果 example.img 是一个包含文件系统的常规文件,并且 /home/you/dir 是 Linux用户的目录,超级用户(root)或许可以通过执行如下的命令来将文件挂载在目录上:
losetup /dev/loop0 example.img mount /dev/loop0 /home/you/dir
其中第二条命令将设备挂载于目录 /home/you/dir。执行上述语句的效果便是文件被作为文件系统挂载,文件的内容出现在被挂载的目录中(以被挂载的目录作为根目录)。
此外 mount 工具常常可以胜任整个挂载的程序:
mount -o loop example.img /home/you/dir
之后设备便能用下列命令实现卸载:
umount /home/you/dir # 或者通过诸如 mount | grep “/home/you/dir” # 或是 losetup -a | grep example.img 的查找找到与文件相关联的loop设备号码 # 并执行下列命令:(<N>代表设备号) umount /dev/loop<N>
在较底层的应用程序接口中,文件的关联与解除关联通过在循环设备上的ioctl 系统调用来实现。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注