将多个 img 文件挂载为单循环设备

Hea*_*ray 20 linux block-device loop-device

有没有办法将磁盘 img 文件分解为多个部分并将其安装为单个循环设备?

str*_*ika 16

我认为你不能就地做,但如果你有足够的空间,这应该可行:

# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k

# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01

# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1

# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>

# Mount the new filesystem
mount /dev/md0 /mnt
Run Code Online (Sandbox Code Playgroud)

您不能简单地从原始文件创建 RAID 阵列,因为 RAID 磁盘有一个特定的标头,其中存储了磁盘数量、RAID 级别等。如果你这样做,你的原始文件的一部分将被覆盖。

您可以使用mdadm --build来创建一个没有元数据的数组,但是您确实应该先进行备份。或者如果只读挂载就足够了:

losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt
Run Code Online (Sandbox Code Playgroud)

你为什么要这样做?如果您的文件系统无法处理大于 4GB 的文件,您应该切换到一个正常的文件系统。

  • 您可能希望使用 `truncate` 而不是 `dd`,因为它要快得多(它不执行对 FS 的实际写入,而只是分配 inode 并将文件标记为仅包含空洞)。 (2认同)