加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2018-08-26 20:45:01)
标签:

it

分类: Linux操作系统
转载:Linux的dev目录之loop设备详解

Linux的dev目录之loop设备详解

一、简单介绍

首先我们在命令行终端中输入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等。


===============================================================

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的意思了。其它更详细用法可以去"找男人"。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有