我想创建一个磁盘映像文件以包含在我的单元测试中。这个磁盘文件应该包含一些我想读取的文件。当我创建 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
现在新数据位于磁盘映像中
答案1
答案2
parted
创建分区表和分区条目,但您还需要创建文件系统:parted
在步骤 5 后退出,然后使用适当的偏移量创建文件系统(我正在使用它,-v
以便mkfs.vfat
显示它正在做什么):
$ /sbin/mkfs.vfat -v --offset 2048 DISK1.img
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK1.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2455551 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306339 clusters.
There are 32 reserved sectors.
Volume ID is 97413b09, no volume label.
这会将第一个分区(从扇区 2048 开始)格式化为 FAT32 卷。当您重新加载图像时parted
,它将显示:
$ /sbin/parted DISK1.img
…
(parted) print
Disk …/DISK1.img: 1258MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1258MB 1257MB primary fat32 lba
一般来说,要在处理图像时确定适当的偏移量,您可以将单位更改为parted
扇区:
(parted) unit s
(parted) print
Model: (file)
Disk …/DISK1.img: 2457600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 2457599s 2455552s primary fat32 lba
(请注意,由于您正在处理自己的磁盘映像,因此不需要sudo
,只需指定parted
和的完整路径,mkfs.vfat
因为它们位于/sbin
或中/usr/sbin
,因此不在您的 中PATH
。)
如果你不这样做需要映像中的分区表,您可能会发现使用文件系统映像比使用完整磁盘映像更容易;您可以通过一个命令完成所有操作mkfs.vfat
:
$ /sbin/mkfs.vfat -v -C DISK2.img $((1200*1024))
mkfs.fat 4.2 (2021-01-31)
Auto-selecting FAT32 for large filesystem
DISK2.img has 64 heads and 63 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 2457567 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 8 sectors per cluster.
FAT size is 2400 sectors, and provides 306591 clusters.
There are 32 reserved sectors.
Volume ID is a452a0bf, no volume label.