Estou tentando automatizar o processo de criação de imagens de disco brutas. Eu não me importo muito com C / H / S, mas que o tamanho do bloco deve ser um padrão aproximado de 512 bytes. No entanto, estou tendo problemas para especificar as dimensões corretas das partições para que o sfdisk possa importá-las.
Primeiramente, criei um arquivo em branco de 32MB:
$dd if=/dev/zero of=disk.img bs=1M count=32
Então particionei usando o cfdisk:
$cfdisk -h 255 -s 63 -c 4 disk.img
- Verifique se o cfdisk vê as opções de C / H / S (na parte superior da tela)
- Crie uma nova partição 32.5MB, end de disco (para deixar espaço para o material de inicialização mais tarde)
- Escrever
- Sair
Em seguida, reproduzo um dump sfdisk:
$sfdisk -H 255 -S 63 -C 4 -d disk.img > disk.parts
e obteve o seguinte (em 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
No entanto, quando tento recarregar isso de volta na imagem (como um teste), o sfdisk parece aceitar primeiro as opções C / H / S ao ler a tabela de partições original e depois descartá-las quando tentar calcular a nova tabela de partições:
$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.)
Parece que essas duas seções estão em conflito:
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
e
For this listing I'll assume that geometry.
Units = sectors of 512 bytes, counting from 0
E isso reforça isso com:
end of partition 1 has impossible value for cylinders: 4 (should be in 0-3)
Eu tentei -f (force) e ele fornece exatamente a mesma saída. : - (
Por que o sfdisk não processa seu próprio formato de dump corretamente, particularmente quando eu já estou dando todas as informações necessárias? Por que processar o C / H / S ao ler, mas não ao escrever? O C / H / S não está no arquivo, então por que ele diz que parece que foi feito para * / 21/16?
Mais importante, como posso contornar isso para que eu possa gerar uma tabela de partição em um script?