Make the first partition 512MB within the image file
parted -s -a opt /dev/loop0 mkpart primary ext2 '0%' 512MB
Na etapa 4, você usa um utilitário para modificar a primeira entrada da Tabela de Partições, que está no final do setor / bloco que também contém o carregador de inicialização do MBR.
Installs the stage1 of grub’s bootstrap code while preserving the partition table created above:
dd if=/boot/grub/stage1 of=/dev/loop0 bs=446 count=1
Na etapa 7, você tenta instalar o gerenciador de inicialização no primeiro setor / bloco, que já contém uma tabela de partições vailid. Mas o dd é um utilitário de transferência de bloco, que lê blocos da origem, e grava esses blocos no destino.
Neste caso, o dispositivo de destino é um HDD ou SSD, que é presumivelmente baseado em setores 512 (ou 4096) bytes. Uma operação de leitura ou gravação em um dispositivo de bloco deve ser para todo o setor.
Quando uma gravação "curta" de apenas 446 bytes é tentada, o controlador de disco (ou o SO) irá obrigar, mas anexar 66 (ou 3650) bytes de zeros para preencher o setor em sua extensão adequada / completa.
Uma gravação de bloco simplesmente não se destina a modificação parcial do setor e preservação da "porção não escrita".
Esta operação de gravação, portanto, irá sobrescrever a Tabela de Partição instalada anteriormente.
A solução simples é executar o passo 7 antes do passo 4. Isso gravará todo o setor do MBR com uma Partition Table vazia e, em seguida, editará apenas uma entrada.