Linux - 如何在一个文件中格式化多个文件系统?

psi*_*lia 9 linux filesystems ext3 partitioning loopback

我需要创建一个带有两个空文件系统的磁盘映像。我已经使用

dd if=/dev/zero of=./disk.img bs=1MiB count=1024
Run Code Online (Sandbox Code Playgroud)

接下来,我使用fdisk disk.img;创建了 2 个主分区;一种是 FAT32,另一种是 EXT3。现在,我必须格式化两个分区才能创建要挂载为-o loop devices. 但我不明白如何格式化它们?我不能使用mkfs.vfatdisk.img。所以我完全糊涂了。

解决方案:感谢@pjc50 的回答,我找到了非常简单的解决方案:

sudo aptitude install multipath-tools
sudo kpartx -a disk.img   #it maps (mounts) found partitions to /dev/mapper/loop...
sudo mkfs.vfat -F 32 -n boot /dev/mapper/loop0p1
sudo mkfs.ext3 -L rootfs /dev/mapper/loop0p2
Run Code Online (Sandbox Code Playgroud)

此解决方案的一个缺点是需要超级用户权限。

pjc*_*c50 9

看来您可以使用 kpartx 工具:http ://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

Kpartx 可用于为任何分区块设备的分区设置设备映射。它是 Linux 多路径工具的一部分。使用 kpartx -l imagefile 可以获得映像文件中分区的概览,使用 kpartx -a imagefile 可以通过 /dev/mapper/loop0pX(X 是分区编号)访问分区。您现在可以使用 mount /dev/mapper/loop0pX /mnt/ -o loop,ro 挂载它。卸载后,您可以使用 kpartx -d imagefile 断开映射器设备。

  • @pjc50:可以在没有超级用户权限的情况下执行此操作:必须首先将每个分区创建为单独的文件,然后手动创建磁盘映像并将分区复制到磁盘映像,然后将分区表创建到磁盘映像。 (2认同)

Sha*_*hin 7

您可以通过首先安装您的分区来/dev/loop?使用losetup-o选项来为您的分区指定合适的偏移量。可以根据fdisk -l disk.img( start_sector * sector_size)的输出计算偏移量。

例如:

losetup -o32256 /dev/loop1 ./disk.img   # mount first partition
Run Code Online (Sandbox Code Playgroud)

安装后,您可以继续使用mkfs.*以下命令格式化分区:

mkfs.vfat -F32 /dev/loop1
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息和示例,请参阅以下文章: