Script particionando novas imagens de disco cru com sfdisk (C / H / S ignorado?)

4

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?

    
por tudor 05.03.2014 / 05:29

1 resposta

1

C / H / S é praticamente obsoleto e não deve ser usado. Eu não estou muito familiarizado com o sfdisk especificamente, mas qualquer ferramenta de particionamento recente deve permitir que você especifique seus limites de partição em termos de setores de 512 bytes, e por motivos de desempenho eles devem sempre estar alinhados com 4k (divisíveis por 8). p>

O problema específico que você parece ter é que o sfdisk não pode detectar C / H / S no arquivo de imagem (já que não é um dispositivo de bloco) e acabar com valores falsos.

    
por 13.05.2015 / 06:44