Deve haver uma Tabela de Partição GUID principal (principal) no início e secundária (backup) no final do arquivo bruto criado por dd
. Truncar o arquivo destrói o secundário. Existe uma maneira de corrigir isso.
Vamos começar com o arquivo não-truncado com espaço livre no final. Execute gdisk -l myfile.raw
. Observe tamanho do setor lógico ( 512B
provavelmente). Encontre o máximo end sector (aquele para a última partição, provavelmente, mas as entradas de partição podem não estar em ordem, por isso, olhe cuidadosamente para um máximo). Os setores são numerados a partir de 0
, portanto você precisa de ( tamanho do setor ) * ( setor final máximo + 1) bytes para armazenar todas as partições.
Além disso, você precisa de pelo menos 33 setores completos de espaço livre no final para armazenar o novo GPT secundário. Veja esta foto da Wikipedia .
Ao todo, você precisa ( tamanho do setor ) * ( setor final máximo + 34) bytes do seu arquivo. Trunca o arquivo para este ou tamanho maior:
truncate -s <new_size> myfile.raw
Próxima invocar
gdisk myfile.raw
Você receberá (entre outras coisas):
Warning! Disk size is smaller than the main header indicates!
Caution: invalid backup GPT header, but valid main header; regenerating backup header from main header.
Digite w
, tecle Digite para escrever as tabelas de partições corretas. Você verá um aviso porque a GPT secundária está prestes a ser movida. Você tem espaço livre suficiente no final do arquivo, então não há nada para se preocupar. Confirme quando solicitado.
Saia com q
, Enter . Execute gdisk
novamente - não deve haver avisos. O GPT é corrigido .
Caso você precise usar gparted
com sua imagem, eu tenho algumas dicas.
O comando sudo gparted myfile.raw
espera que os arquivos myfile.raw1
, myfile.raw2
etc. existam e correspondam às partições dentro de myfile.raw
. Se fosse um arquivo especial como /dev/sdb
, então udev
cuidaria de /dev/sdb1
, /dev/sdb2
... Não é o caso do arquivo regular. Muitos recursos gparted
falharão se não houver arquivos myfile.rawN
.
Para criar esses arquivos, use kpartx
(ou partx
+ losetup
tandem):
sudo kpartx -av myfile.raw
Observe sua saída (que loopXpY
devices foram criados) e crie links simbólicos para todas as partições. O primeiro pode ser:
ln -s /dev/mapper/loop0p1 myfile.raw1
Agora, gparted
deve ser executado e operar nessas partições. Há uma armadilha: quando a partição é alterada (por exemplo, ela é movida / redimensionada), o mapeamento criado por kpartx
não é atualizado. Normalmente, gparted
chamaria partprobe
ou algo para atualizar /dev/sd*
; isso não funciona no nosso caso. Você deve destruir os mapeamentos e recriá-los. Ao mover / redimensionar partições, execute uma tarefa gparted
, feche o programa, corrija os mapeamentos, execute gparted
com a segunda tarefa e assim por diante.
Para destruir os mapeamentos, invoque sudo kpartx -dv myfile.raw
. Exclua links simbólicos órfãos no final.