Como faço para expandir uma imagem de disco bruto?

13

As imagens oficiais fornecidas são imagens de disco bruto, que poderiam ter sido criadas usando dd.

Como faço para aumentar uma imagem? Não estou interessado em reparticionar a imagem, pois ela já foi respondida em Como posso redimensionar minha partição / (root)? .

Alex Chamberlain
fonte
Não sei exatamente o que você quer dizer com expansão. Você deseja executar o 'redimensionamento da partição' na imagem antes de transferi-la para o disco?
Joost
Esse é um objetivo, mas para fazer isso, é preciso expandir a imagem do disco.
Alex12:

Respostas:

13

Como explicado nesta pergunta, existem dois métodos para expandir a imagem. Abaixo estão dois exemplos para expandir o arquivo em 1 kilobyte.

DD cria um arquivo não esparso

dd if=/dev/zero bs=1k count=1 >> myimage.img

Truncar cria um arquivo esparso

truncate -s +1024 myimage

Você provavelmente deseja usar truncado. Um arquivo esparso grava apenas os metadados dos blocos que usa, em vez de realmente gravá-los. Isso torna a criação do arquivo mais rápida (como não é necessário gravar zeros reais no disco) e economiza espaço no disco.

Nota O sistema de arquivos HFS + da Apple não suporta arquivos esparsos.

Joost
fonte
HFS + não está em conformidade com o POSIX? linux.die.net/man/2/truncate
Alex Chamberlain
Se o suporte a arquivos esparsos é um requisito para o POSIX, acho que não. Aqui está uma boa demonstração das diferenças entre o HFS + e alguns ext (eu acho) stackoverflow.com/a/193015/689893 . Aparentemente, ele cria o arquivo, mas usa espaço em disco como se fosse um arquivo normal, em vez de um arquivo esparso.
Joost
Não, acho que tinha entendido mal!
Alex12:
Se você tiver ddum arquivo esparso , ele ainda estará correto?
Alex12812
Um arquivo esparso contém dados, então acho que você pode adicionar zeros. Ele manipulará essa parte como não esparsa.
Joost
10

Uma maneira incrivelmente fácil de redimensionar a imagem é usar uma das qemuferramentas chamadas qemu-img. Obviamente, isso depende do fato de você ter qemuinstalado (o que eu sei que você já faz Alex).

O comando fica assim:

qemu-img resize filename [+|-]size[K|M|G|T]

Onde filenameestá o arquivo de imagem e tamanho é o tamanho que você deseja ampliar (ou reduzir) a imagem.

Por exemplo, se você deseja estender a imagem archarm.imgem 2 GB, execute:

qemu-img resize archarm.img +2G
Jivings
fonte
Referindo-se à página de manual, Antes de usar este comando para reduzir uma imagem de disco, você DEVE usar o sistema de arquivos e as ferramentas de particionamento dentro da VM para reduzir os sistemas de arquivos alocados e o tamanho das partições de acordo. Não fazer isso resultará em perda de dados!
AntonioK