如何从头开始创建格式化的分区映像文件?

use*_*443 17 linux partition loop-device

我需要从一无所有 ( /dev/zero)创建一个只有一个分区的文件系统。我尝试了以下命令序列:

dd if=/dev/zero of=mountedImage.img bs=512 count=131072
fdisk mountedImage.img
    n
    p 
    2048
    131072
Run Code Online (Sandbox Code Playgroud)

基本上,我需要创建填充零的 64MB 图像文件。然后我用来fdisk为新文件系统(最终应该是 FAT32)添加一个新分区,从扇区开始2048并使用所有剩余的扇区。

losetup /dev/loop1 mountedImage.img
mkfs -t vfat /dev/loop1
Run Code Online (Sandbox Code Playgroud)

但在这里我遇到了问题。如果我设置loop设备并使用 格式化它mkfs -t vfat,分区表将被覆盖并将文件系统 (FAT32) 放置到磁盘。我不需要用 FAT32 格式化整个磁盘,我只需要我的主分区就是这样。

有谁知道如何只格式化原始磁盘映像的一个分区,而不是整个映像?

Sté*_*las 22

如果在 Linux 上,加载loop模块时,请确保向模块传递一个max_part选项,以便循环设备可分区。

检查当前值:

cat /sys/module/loop/parameters/max_part
Run Code Online (Sandbox Code Playgroud)

如果是 0:

modprobe -r loop # unload the module
modprobe loop max_part=31
Run Code Online (Sandbox Code Playgroud)

要使此设置持久化,请将以下行添加/etc/modprobe.conf到文件中,/etc/modprobe.d如果该目录存在于您的系统中:

options loop max_part=31
Run Code Online (Sandbox Code Playgroud)

如果modprobe -r loop因为“Module loop is builtin”失败,你需要添加loop.max_part=31到你的内核命令行并重新启动。如果您的引导加载程序是 Grub2,请将其添加到GRUB_CMDLINE_LINUXin的值中etc/default/grub

现在,您可以创建一个可分区的循环设备:

truncate -s64M file # no need to fill it with zeros, just make it sparse
fdisk file # create partitions
losetup /dev/loop0 file
mkfs.vfat /dev/loop0p1 # for the first partition.
mount /dev/loop0p1 /mnt/
Run Code Online (Sandbox Code Playgroud)

(请注意,您需要一个相对较新的 Linux 版本)。