创建磁盘映像

创建磁盘映像

我不明白如何创建具有所需布局的图像文件。

4Mb of free space | 32 Mb partition

首先,我需要创建分区表。以下部分有效:

dd if=/dev/zero of=<image.img> bs=1M count=32
parted -s <image.img> mklabel msdos mkpart primary ext2 8192s 32M

现在我需要一个文件系统。以下部分没有提供我想要的内容:

mkfs -t ext2 -E offset=8192 <image.img> 36M

此命令不会破坏布局(4Mb 可用空间 + 32Mb 分区),但分区本身被破坏(gparted 无法将其识别为 ext2)

有人告诉我,mkfs 可以看到我用 parted 创建的分区,所以我不需要指定偏移量。但是,没有偏移量会让情况变得更糟:mkfs 会重写整个映像,4Mb 的可用空间会消失:

mkfs -t ext2 <image.img>

唯一可行的方法是在物理磁盘上创建布局。

sudo parted -s /dev/disk mklabel msdos mkpart primary ext2 8192s 32M

请注意,现在我有 /dev/disk 和 /dev/disk1代表分区。在该分区上创建文件系统非常有效。

sudo mkfs -t ext2 /dev/disk1

但我不需要在物理磁盘上创建分区,我需要一个映像文件。我无法将物理磁盘转储到映像中,因为我正在编写用于动态映像创建的脚本。

答案1

首先,图像大小应该是 36MiB,而不是 32MiB:

$ truncate -s 36M test.img

dd(如果您不想稀疏,您可以坚持您的方法。)

parted似乎没有办法让我们指定分区大小而不是分区结束:

$ parted -s test.img mklabel msdos mkpart primary ext2 8192s $((36*1024*1024/512-1))s

(需要说明的是,Mparted 中指的不是 MiB 而是 MB。)

现在布局应该正确了:

$ fdisk -l test.img
Disk test.img: 36 MiB, 37748736 bytes, 73728 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
Disklabel type: dos
Disk identifier: 0xc9c7e736

Device     Boot Start   End Sectors Size Id Type
test.img1        8192 73727   65536  32M 83 Linux

显然offset应该以字节为单位:

$ mkfs.ext2 -E offset=$((8192*512)) test.img 32M
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 32768 1k blocks and 8192 inodes
Filesystem UUID: 4e527d5c-ad0f-4073-861b-c3e14bba676a
Superblock backups stored on blocks:
        8193, 24577

Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

$

PS 顺便说一下,还有一个不错的-P开关losetup

相关内容