Скрипт разбиения свежих необработанных образов дисков с помощью sfdisk (C/H/S игнорируется?)

Я пытаюсь автоматизировать процесс создания необработанных образов дисков. Меня не очень заботит 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
  • Убедитесь, что cfdisk видит переключатели C / H / S (вверху экрана)
  • Создайте новый раздел 32.5MB, конец диска (чтобы оставить место для загрузочного материала позже)
  • Написать
  • Уволиться

Затем я вывожу дамп 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 (сила), и он дает точно такой же результат.:-(

Почему sfdisk не может правильно обработать свой собственный формат дампа, особенно когда я уже предоставляю ему всю необходимую информацию? Почему он обрабатывает C / H / S при чтении, а не при записи? C / H / S отсутствует в файле, так почему он говорит, что, похоже, он был сделан для */21/16?

Что еще более важно, как мне обойти это, чтобы я мог создать таблицу разделов в сценарии?

1 ответ

C/H/S в значительной степени устарел и не должен использоваться. Я не очень хорошо разбираюсь в sfdisk, но любой недавний инструмент для создания разделов должен позволять вам указывать границы разделов в терминах 512-байтовых секторов, и по соображениям производительности они всегда должны быть выровнены по 4k (так, чтобы их делили на 8).

Конкретная проблема, с которой вы, похоже, сталкиваетесь, заключается в том, что sfdisk не может обнаружить C/H/S в файле образа (так как это не блочное устройство) и в итоге получить поддельные значения.

Другие вопросы по тегам