我制作了 /dev/sdc 的映像。第一个分区之前的可用空间未报告相同的字节大小,但为什么呢?
1024B
起始位置是否在驱动器和16384B
图像上报告?
# parted /dev/sdc u b p free
Model: ASMT 2105 (scsi)
Disk /dev/sdc: 500107862016B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1048575B 1047552B Free Space
1 1048576B 500107862015B 500106813440B primary btrfs
# parted d1/drive1.sdc.img u b p free
Model: (file)
Disk /mnt/4/d1/drive1.sdc.img: 500107862016B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
16384B 1048575B 1032192B Free Space
1 1048576B 500107862015B 500106813440B primary btrfs
编辑:我像这样创建了图像
# pv /dev/sdc > d1/drive1.sdc.img
编辑2:在两者上运行 md5sum 后,它们显示相同的哈希值
# dd if=/dev/sdc | md5sum; pv d1/drive1.sdc.img | md5sum
答案1
没什么好担心的,这只是parted
无法获取“磁盘”几何形状,因为它不是磁盘而是文件。如果您从映像创建循环文件,则可用空间起始位置应该相同。
使用磁盘映像文件:
(parted) p free
Model: (file)
Disk /home/vtrefny/disk.img: 104857600B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
16384B 104857599B 104841216B Free Space
使用循环设备:
(parted) p free
Model: Loopback device (loopback)
Disk /dev/loop2: 105MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 105MB 105MB Free Space
parted
在磁盘的开头(以及 GPT 的结尾)内部创建一个“假”元数据分区,以保护分区表在创建新分区时不被覆盖。第一个可用空间在此元数据分区之后开始。此元数据分区的磁盘大小的 AFAICT 按扇区计算1 + sector_size / 512
(512 B 扇区大小的磁盘为 2 个扇区),并硬编码为32
文件的扇区(= 16 KiB/16384 B)(我在这里可能是错的,这是我凝视的结果分开代码并使用 pyparted)。
一般来说,在创建分区时,其起始位置会对齐以实现最佳性能,并且会考虑扇区大小、最佳 IO 大小或磁盘颗粒大小等因素,并且parted
有时fdisk
会显示已对齐的“可用空间”等工具(即使使用“真实”磁盘,fdisk
会将可用空间的开头打印为 1 MiB,而不是parted
) 所示的 1 KiB。