我想创建一个磁盘映像文件以包含在我的单元测试中。这个磁盘文件应该包含一些我想读取的文件。当我创建 SD 卡或 USB 记忆棒的副本时,dd
磁盘映像非常大,即使压缩它,大小也太大。
所以我想创建一个新的磁盘映像并随后安装它。然后添加新数据并压缩磁盘映像以进行版本控制
我目前的步骤:
- 创建磁盘映像:
dd if=/dev/zero of=DISK1.img bs=1M count=1200
- 打开分开:
sudo parted DISK1.img
- 创建分区表(使用parted):
mklabel msdos
- 创建分区(带parted):
mkpart primary fat32 1MB 100%
- 打印:
(parted) print Modell: (file) Festplatte <path>/DISK1.img: 1258MB Sektorgröße (logisch/physisch): 512B/512B Partitionstabelle: msdos Disk-Flags: Nummer Anfang Ende Größe Typ Dateisystem Flags 1 1049kB 1258MB 1257MB primary fat32 lba
现在,当我退出并重新打开parted时,文件系统不再被识别:
(parted) print
Modell: (file)
Festplatte <path>/DISK1.img: 1258MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: msdos
Disk-Flags:
Nummer Anfang Ende Größe Typ Dateisystem Flags
1 1049kB 1258MB 1257MB primary lba
如何从头开始创建图像?
编辑 2024-03-02
使用@Stephen Kitt 的评论,它起作用了:
dd if=/dev/zero of=DISK1.img bs=1M count=1200
parted DISK1.img
- 创建分区表(使用parted):
mklabel msdos
- 创建分区(带parted):
mkpart primary fat32 1MB 100%
- 退出分手
mkfs.vfat -v --offset 2048 DISK1.img
挂载分区:
- 找到startsector:(
fdisk -lu DISK1.img
同上) - 获取偏移量(以字节为单位):512bytes * 2048sectors = 1048576
- lopsetup分区:
sudo losetup -o 1048576 /dev/loop0 DISK1.img
- 山:
sudo mount /dev/loop0 DISK_MOUNT
- 将数据复制到已安装的分区(需要root)
- 卸载
sudo umount /dev/loop0
- 分离lostup:
sudo losetup -d /dev/loop0
现在新数据位于磁盘映像中
您的步骤是正确的,只需添加:
sudo mkfs.vfat -F 32 DISK1.img
在程序中的步骤 1 之后和步骤 2 之前。请参阅mkfs.vfat 联机帮助页
parted
创建分区表和分区条目,但您还需要创建文件系统:parted
在步骤 5 后退出,然后使用适当的偏移量创建文件系统(我正在使用它,-v
以便mkfs.vfat
显示它正在做什么):这会将第一个分区(从扇区 2048 开始)格式化为 FAT32 卷。当您重新加载图像时
parted
,它将显示:一般来说,要在处理图像时确定适当的偏移量,您可以将单位更改为
parted
扇区:(请注意,由于您正在处理自己的磁盘映像,因此不需要
sudo
,只需指定 和 的完整路径,parted
因为mkfs.vfat
它们位于/sbin
或中/usr/sbin
,因此不在您的 中PATH
。)如果您的映像中不需要分区表,您可能会发现使用文件系统映像比使用完整磁盘映像更容易;您可以通过一个命令完成所有操作
mkfs.vfat
: