Eu tenho uma imagem de uma partição existente gerada com dd if=/dev/sdXN of=image.bin
. Agora eu quero usar esta imagem como base para uma máquina virtual. Eu sei como converter a imagem em um formato que o VirtualBox possa usar.
O problema é que a imagem "disco" é realmente apenas a imagem de uma partição e, portanto, não contém um MBR ou uma tabela de partição. Isso dificulta a inicialização da VM.
Existe uma maneira simples, dada a imagem de uma partição, de criar uma imagem de disco adequada, incluindo uma tabela de partição?
fonte
Tenho certeza de que o problema original foi resolvido há muito tempo, mas para qualquer pessoa com um problema semelhante:
Uma maneira de evitar copiar a imagem inteira seria criar uma imagem no formato .vmdk que se refira a arquivos de extensão separados para a tabela de partições e para o conteúdo da partição.
Eu tenho esse trecho em um arquivo .vmdk de um teste que fiz há algum tempo:
Isso significa que os 63 setores que começam no deslocamento 0 são lidos no arquivo bruto "parttable.bin", mas o setor 63 e superior vem do despejo de partição bruto "partition-image.bin". (Obviamente, substitua 63 pelo deslocamento real da primeira partição, geralmente 2048 atualmente).
O resultado final é que, de dentro do VBox, parece que você colocou a tabela de partições na frente da imagem da partição, sem ter que fazer a longa operação de cópia.
Particione a unidade na VM e, se você acertar as compensações, deverá ver o conteúdo da imagem da partição dentro da partição recém-criada.
fonte
Problema interessante. Aqui está o que eu faria:
Depois disso, você precisará atualizar seu gerenciador de inicialização. Supondo que você esteja usando o GRUB, monte a partição recém-gravada, faça chroot nela e execute
update-grub
(tenha cuidado, porém, talvez seja necessário ajustar seus arquivos de configuração antes que ela funcione corretamente).Boa sorte!
fonte
Você pode redimensionar o sistema de arquivos no local, com GParted.
Crie a imagem de teste:
Não estou usando o resize2fs, porque ele redimensiona o arquivo, em vez de deixar espaço livre.
1 MB grátis no início.
Por fim, crie a tabela de partição.
Defina o primeiro setor como 2048 (2048 setores * 512 B / setor = 1MB), o último setor o padrão (isto é, final da imagem).
fonte
Eu pessoalmente prefiro acrescentar usando
dd
.Estou assumindo setores de 512 bytes aqui. Pode haver um caso para setores de 2048 bytes, portanto, troque os números e faça as contas.
Em cada caso, estou usando um arquivo de teste de 512 MB, por exemplo:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Compondo a imagem
Pessoalmente, prefiro acrescentar o primeiro MB (2048 setores) ao seu início:
dd if=testfs.img skip=2048 bs=512 of=full.img
Finalmente, execute o fdisk para criar a tabela de partições (ou copie por conta própria), criei 1 partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e detecção automática:
sudo losetup -fP full.img
E execute
file
no dispositivo de loopback particionado resultante:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Compondo a imagem
Pessoalmente, prefiro anexar o primeiro MB (2048 setores, já que o gdisk assumirá o padrão deste número, pois está alinhado com 1 MB) ao início do MBR inicial e 34 setores ao final (ou 2048 para um MB completo) no final. GPT (setor final pode ser diferente). Omitir a GPT final pode perder seus dados:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Finalmente, execute o gdisk para criar a tabela de partições (ou copie por conta própria), criei 1 partição usando valores padrão.
Verificando
Para verificar, crie partições de loop e detecção automática:
sudo losetup -fP full.img
E execute
file
no dispositivo de loopback particionado resultante:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Este método garante não adivinhar, redimensionar ou alinhar manualmente.fonte
sudo file -s /dev/loop11p1
eu tenho/dev/loop11p1: data
. Que anteriormente era um sistema de arquivos ext4. E o full.img resultante é menor. Acho que você inverteu a solução.seek=2048
neste comando dd if = testfs.img pular = 2048 bs = 512 of = full.img