Я пытаюсь автоматизировать процесс создания необработанных образов дисков. Меня не особо заботит C / H / S, но размер блока должен быть приблизительным стандартом в 512 байт. Однако у меня возникли проблемы с указанием правильных размеров разделов, чтобы sfdisk мог их импортировать.
Сначала я создал пустой файл размером 32 МБ:
$dd if=/dev/zero of=disk.img bs=1M count=32
Затем я разделил его с помощью cfdisk:
$cfdisk -h 255 -s 63 -c 4 disk.img
Затем я вывожу дамп sfdisk:
$sfdisk -H 255 -S 63 -C 4 -d disk.img > disk.parts
и получил следующее (в disk.parts):
# partition table of disk.img
unit: sectors
disk.img1 : start= 1276, size= 64260, Id=83, bootable
disk.img2 : start= 0, size= 0, Id= 0
disk.img3 : start= 0, size= 0, Id= 0
disk.img4 : start= 0, size= 0, Id= 0
Однако, когда я пытаюсь перезагрузить это обратно в образ (в качестве теста), sfdisk, кажется, сначала принимает переключатели C / H / S при чтении исходной таблицы разделов, а затем выбрасывает их, когда пытается вычислить новый раздел стол:
$sfdisk -H 255 -S 63 -C 4 disk.img < disk.parts
Warning: disk.img is not a block device
Disk disk.img: cannot get geometry
Disk disk.img: 4 cylinders, 255 heads, 63 sectors/track
Old situation:
Warning: The partition table looks like it was made
for C/H/S=*/21/16 (instead of 4/255/63).
For this listing I'll assume that geometry.
Units = cylinders of 172032 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
disk.img1 * 3+ 195- 192- 32130 83 Linux
start: (c,h,s) expected (3,16,13) found (0,20,17)
end: (c,h,s) expected (195,0,16) found (4,20,16)
disk.img2 0 - 0 0 0 Empty
disk.img3 0 - 0 0 0 Empty
disk.img4 0 - 0 0 0 Empty
New situation:
Warning: The partition table looks like it was made
for C/H/S=*/21/16 (instead of 4/255/63).
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
disk.img1 * 1276 65535 64260 83 Linux
start: (c,h,s) expected (3,16,13) found (0,20,17)
end: (c,h,s) expected (195,0,16) found (4,20,16)
disk.img2 0 - 0 0 Empty
disk.img3 0 - 0 0 Empty
disk.img4 0 - 0 0 Empty
Warning: partition 1 does not end at a cylinder boundary
end of partition 1 has impossible value for cylinders: 4 (should be in 0-3)
sfdisk: I don't like these partitions - nothing changed.
(If you really want this, use the --force option.)
Похоже, что эти два раздела конфликтуют:
Warning: The partition table looks like it was made
for C/H/S=*/21/16 (instead of 4/255/63).
For this listing I'll assume that geometry.
Units = cylinders of 172032 bytes, blocks of 1024 bytes, counting from 0
и
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0
Затем он усиливает это:
end of partition 1 has impossible value for cylinders: 4 (should be in 0-3)
Я пробовал -f (force), и он дает точно такой же результат. :-(
Почему sfdisk не обрабатывает свой собственный формат дампа правильно, особенно когда я уже даю ему всю необходимую информацию? Почему он будет обрабатывать C / H / S при чтении, но не при записи? C / H / S отсутствует в файле, так почему он может сказать, что он похоже, что это было сделано для * / 21/16?
Что еще более важно, как мне обойти это, чтобы создать таблицу разделов в скрипте?
C / H / S в значительной степени устарел и не должен использоваться. Я не очень хорошо знаком с sfdisk, но любой недавний инструмент разбиения должен позволять вам указывать границы раздела в виде 512-байтовых секторов, и по соображениям производительности они всегда должны быть выровнены по 4k (то есть делиться на 8).
Конкретная проблема, с которой вы столкнулись, заключается в том, что sfdisk не может обнаружить C / H / S в файле изображения (поскольку это не блочное устройство) и в итоге выдает поддельные значения.