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.