无法挂载循环设备上创建的分区(指向文件)

无法挂载循环设备上创建的分区(指向文件)

目标

我正在尝试使用文件从头开始制作硬盘映像。这包括 MBR、分区表、分区数量等。但我一生都无法让 Linux 挂载我创建的分区。

编辑:请参阅问题末尾的更新 - 似乎与 vboxsf 有关

程序

到目前为止,我已经尝试了许多不同的方法,但那些最有效的方法最终都到达了同一个地方。我在下面制作了一个简化版本,应该足以解释我的问题

使用 dd 生成空文件(或截断速度)

dd if=/dev/zero of=test.img bs=1M count=150

制作分区表

parted -s test.img mklabel gpt
Warning: The resulting partition is not properly aligned for best performance.

制作分区

parted -s test.img -- mkpart logical 0 5M
parted -s test.img set 1 bios_grub on
parted -s test.img -- mkpart logical 5M 50M
etc.

安装为循环设备(加载 max_part=31 的循环模块)

losetup /dev/loop0 test.img

lsblk 来检查

loop0             7:0    0  150M  0 loop
├─loop0p1         7:1    0  4.8M  0 loop
├─loop0p2         7:2    0   43M  0 loop
└─loop0p3         7:3    0    4M  0 loop    

到目前为止一切顺利——我想。格式化分区

mkfs.ext4 /dev/loop0p1 
mkfs.ext4 /dev/loop0p2
mkfs.ext4 /dev/loop0p3

现在让我们挂载我们的新分区

[root@localhost vmdk test]# mount /dev/loop0p2 boot
mount: /dev/loop0p2 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'

每次都到此结束。我尝试在创建图像后立即将其安装到循环中,并在 /dev/loop0 上调用parted。这会产生相同的结果。我已经尝试过手动使用 Lostup 进行偏移。我尝试过 kpartx - 我不知道如何超越这一点。

我应该指出,我还使用实际的硬盘尝试了此过程(我正在使用虚拟机,但你知道我的意思)。在本例中,我调用了完全相同的命令,但在 /dev/sdb 上调用。在最后我能够毫无问题地挂载 /dev/sdb2 。

调试信息

我不知道它是否相关,但这里是

[root@localhost vmdk test]# uname -a
Linux localhost.localdomain 3.10.0-327.36.2.el7.x86_64 #1 SMP Mon Oct 10 23:08:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost vmdk test]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

[root@localhost vmdk test]# file test.img
test.img: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0

[root@localhost vmdk test]# file -s /dev/loop0
/dev/loop0: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0

[root@localhost vmdk test]# file -s /dev/loop0p2
/dev/loop0p2: data

[root@localhost vmdk test]# fdisk -lu /dev/loop0
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/loop0: 157 MB, 157286400 bytes, 307200 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 label type: gpt

#         Start          End    Size  Type            Name
 1           34         9765    4.8M  BIOS boot parti logical
 2        10240        98303     43M  Microsoft basic logical
 3        98304       106495      4M  Microsoft basic logical

我不明白为什么当我遵循相同的过程时,循环设备的行为与硬盘驱动器的行为不完全相同。如果有人有任何想法,他们将不胜感激!

更新

巧合的是,我发现重新启动可以解决我的问题,因此我的思维立即同步。经过一些测试后,似乎只有当 test.img 文件放置在我的 vboxsf 挂载(主机和虚拟机之间的共享文件夹)上时才会出现我的问题。我还没有真正考虑过这一点,但也许它以一种奇怪的方式缓存文件写入?我暂时保留这个问题 - 也许有人可以详细说明。

答案1

如果图像文件托管在奇怪的文件系统(例如 vboxsf)上,这可能是问题所在。

相关内容