Linux中loop设备详解

橙三吉。 提交于 2020-11-14 16:09:48

一、简单介绍

首先我们在命令行终端中输入man loop

出现如下内容:

摘要:

 

Loop设备是一种块设备,但是它并不指向硬盘或者光驱,而是指向一个文件块或者另一种块设备。

一种应用的例子:将另外一种文件系统的镜像文件保存到一个文件中,例如iso文件,然后将一个Loop设备指向该文件,紧接着就可以通过mount挂载该loop设备到主文件系统的一个目录下了,我们就可以正常访问该镜像中的内容,就像访问一个文件系统一样。

 

二、详细介绍

loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop。

回环设备( 'loopback device')允许用户以一个普通磁盘文件虚拟一个块设备。设想一个磁盘设备,对它的所有读写操作都将被重定向到读写一个名为 disk-image 的普通文件而非操作实际磁盘或分区的轨道和扇区。(当然,disk-image 必须存在于一个实际的磁盘上,而这个磁盘必须比虚拟的磁盘容量更大。)回环设备允许你这样使用一个普通文件。

回环设备以 /dev/loop0、/dev/loop1 等命名。每个设备可虚拟一个块设备。注意只有超级用户才有权限设置回环设备。

 

三、简单使用

一般在linux中会有8个loop设备,一般是/dev/loop0~loop7,可用通过losetup -a查看所有的loop设备,如果命令没有输出就说明所有的loop设备都没有被占用,你可以按照以下步骤创建自己的loop设备。

命令losetup可以对loop设备进行操作。

下面简单的说明loop设备映射或者指向一个文件的简单步骤:

创建一个文件

1、dd if=/dev/zeroof=/var/loop.img bs=1M count=10240

使用losetup将文件转化为块设备

2、losetup /dev/loop0/var/loop.img

通过lsblk查看刚刚创建的块设备

lsblk|grep loop0
losetup –a

3、2步骤过后,我们就获得了一个磁盘,在这磁盘上我们可以构建任何文件系统,通常来说,使用默认的文件系统(即操作系统的当前的文件系统格式)就行了。如何创建一个文件系统,需要另外了解。

4、挂载该磁盘到主文件系统下的一个目录。

首先创建一个目录:

Mkdir/myloopdev

接着挂载:

Mount/dev/loop0 /myloopdev

5、就可以进入myloopdev目录,对该虚拟磁盘进行操作了。就像使用真实磁盘一样,例如:echo “hello world!” > hello_world.txt

6、使用结束,我们卸载该磁盘,umount /myloopdev

7、接着删除该loop设备,losetup –d  /dev/loop0

四、使用loop设备完成一些功能

上面三简单介绍了如何使用Loop指向一个文件,接下介绍使用loop的一些场景。

利用Loop设备作为一个虚拟光驱或者虚拟软驱

1、回环设备关联文件。

losetup/dev/loop0 a.iso

losetup命令用来实现回环设备和文件的关联。这个命令还可以实现文件系统的加密,有兴趣的朋友可以查看手册。

2、挂载回环设备到特定目录,我们假设要挂载到/mnt/下面。

mount/dev/loop0 /mnt/

这样/mnt/下面就是a.iso的内容了。可以通过shell去访问它了。

3、用完之后,需要卸载会换设备。

umount/mnt/

这样设备就卸载,/mnt/下面就不是a.iso的文件了。

4、回环设备和关联文件分离。虽然已经在系统中卸载了回环设备,但是这个设备和文件的关联还存在。假如你还要用这个设备关联其他的文件,系统会提示这个设备正在忙。所以需要让回环设备和关联文件分离。

losetup-d /dev/loop0

这样一个光盘镜像的使用就完成了。当然同理也可以通过回环设备挂载其他的虚拟文件,比如虚拟软盘img等。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!