Linux中loop设备和kpartx挂载虚拟文件系统详解

标签:
it |
分类: Linux操作系统 |
Linux的dev目录之loop设备详解
一、简单介绍
首先我们在命令行终端中输入man loop
出现如下内容:
摘要:
Loop设备是一种块设备,但是它并不指向硬盘或者光驱,而是指向一个文件块或者另一种块设备。
一种应用的例子:将另外一种文件系统的镜像文件保存到一个文件中,例如iso文件,然后将一个Loop设备指向该文件,紧接着就可以通过mount挂载该loop设备到主文件系统的一个目录下了,我们就可以正常访问该镜像中的内容,就像访问一个文件系统一样。
二、详细介绍
loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop。
回环设备(
回环设备以
三、简单使用
一般在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
7、接着删除该loop设备,losetup –d
四、使用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等。
linux下使用kpartx挂载虚拟文件系统
在linux中,如果映像文件(.img)含有分区表的话,那么用losetup这个程序来加载文件系统就有点力不从心了。因为losetup只能加载无分区的文件系统映像文件。不过有一个好东西配合losetup却可以来挂载带有分区表的映像文件。这就是kpartx了。
废话不多说,进入正题(其中X和Y要看你的挂接的情况而看了):
#先创建一个1G大小的映像文件来做实验 dd bs=4096 if=/dev/zero of=~/hd.img count=262144 #将映像文件挂接到loopX中去 losetup /dev/loopX ~/hd.img #对loopX进行分区 fdisk /dev/loopX #我这里分了两个区,每个去512M大小 Device Boot Start End Blocks Id System /dev/loopXpY 2048 1050623 524288 83 Linux /dev/loopXpY 1050624 2097151 523264 83 Linux #正戏来了,使用kpartd装载映像,使用kpartx是需要root用户的,因为是用root登录的,所以不用使用sudo。从前面的命令就可以看出来... kpartx -av ~/hd.img #装载之后,就可以在/dev/mapper/目录下看到两个loopXpY的文件了。 #接下来对loopXpY进行格式化了。 mkfs.vfat /dev/mapper/loopXpY #然后挂载文件系统。 mount /dev/mapper/loop1p1 /media/hd1 #OK,罗嗦完了。
后面再废话一点,使用完映像文件的文件系统后,想退出的话,可以使用 kpartx -dv /dev/loopX 写卸载刚才挂接的东西。然后再使用losetup -d /dev/loopX断掉和映像文件的挂接关系。
其中,kpartx -a指定去添加哪个映像文件(add),-v是指挂到loop设备(verbose),-d就是delete的意思了。其它更详细用法可以去"找男人"。