如何使用分区自动挂载环路设备


0

我正在测试一些文件系统驱动程序代码,并希望在内核之外进行测试。最简单,最安全的方法来自用户空间。所以,我创建了一个长度一定的文件

dd if=/dev/zero of=testfs bs=10M count=50

然后我使用fdisk安装了MBR分区方案

fdisk testfs

我可以设置一个循环设备以块仿真模式访问我的文件:

$ losetup /dev/loop0 testfs

此时,我可以在设备列表中看到这个新的模拟块设备:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    50G  0 disk 
├─sda1   8:1    0    46G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     4G  0 part [SWAP]
sr0     11:0    1  55.2M  0 rom  
loop0    7:0    0    50M  0 loop 

并且该设备具有以下分区表

$ fdisk -l /dev/loop0 

Disk /dev/loop0: 52 MB, 52428800 bytes
96 heads, 25 sectors/track, 42 cylinders, total 102400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe7d5af9a

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *        2048      102399       50176    7  HPFS/NTFS/exFAT

但是,要创建fileyststem,我需要安装分区,而不是“磁盘”。循环系统是否不会像其他块设备那样自动安装设备的分区?我能够通过将文件通过循环以偏移量安装来创建文件系统

$ losetup -o $((2048*512)) /dev/loop0 testfs

但是此解决方案并不理想,因为其行为与实际的块设备略有不同。通过循环设备执行操作时,是否可以“自动挂载”分区?

Answers:


0

有一个选项:

losetup --partscan /dev/loop0 testfs

这将激活内核中的常规分区支持,创建/dev/loop0p1等等。


您也可以从util-linux使用partx:

losetup /dev/loop0 testfs
partx -u /dev/loop0

这将创建基于内核的分区(/dev/loop0p1等),但是分区表本身将使用libblkid进行解析,而不是询问内核。


最后是来自multipath-tools的kpartx:

losetup /dev/loop0 testfs
kpartx -u /dev/loop0

尽管乍看之下与上面相同,但它根本没有使用内核的本机循环分区支持。相反,它使用设备映射器子系统(线性映射)创建。/dev/mapper/loop0p1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.