
Por alguma razão, não parece haver muitas perguntas ou respostas sobre o uso do dd para criar arquivos de imagem "menores" com oconv=esparsoopção aqui.
Então, ao usar dd para criação de imagens, posso usar com segurança, por exemplodd if=/dev/sda of=/media/dispositivo de armazenamento/sda.img conv=esparsoobter um arquivo de imagem que use (muito) menos espaço no destino?
Não sei se isso importa, mas neste caso a fonte seria um SSD com sistema de arquivos EXT4 e apenas 15% usado (por ser bastante novo), e o alvo também usaria EXT4 fs.
Ou esta é possivelmente uma má ideia (sob certas circunstâncias) e pode levar a problemas (mais tarde, por exemplo, quando eu precisar restaurá-lo)?
Também estou me perguntando se isso funcionaria quando o destino fosse uma montagem de rede ou sistema de arquivos.
O objetivo seria obter um arquivo de imagem de uma partição ou (melhor ainda) de um disco inteiro que não ocupe muito mais espaço do que o necessário, mantendo-o facilmente montado e utilizável.
A compactação extra não é realmente necessária ou desejada, e geralmente também faria com que a imagem resultante não pudesse mais ser montada, eu acho, então posso viver sem ela.
E eu sei que o Clonezilla pode fazer coisas como salvar apenas setores usados, mas não gosto de suas limitações, por exemploDevido à limitação do formato da imagem, a imagem não pode ser explorada ou montada. (E é claro que o dd já está disponível em todos os sistemas.)
Muito obrigado antecipadamente
Responder1
O método mais fácil que encontrei para fazer isso é cortar todas as partições da unidade com a ferramenta apropriada (fstrim no Linux, qualquer que seja o nome da ferramenta no Windows) e depois despejar a tabela de partição gpt em um arquivo usando gdisk
e dd
cada partição por meio de um compressor (eu normalmente uso zstd para velocidade) e salve as imagens compactadas de saída junto com o dump da tabela de partição. Você compactará cada imagem de partição um pouco abaixo do tamanho do espaço usado e é trivial enviar as imagens de volta para uma unidade vazia posteriormente. Eu faço isso com cada laptop novo para obter uma imagem limpa de fábrica antes de destruir a unidade e instalar o Linux. Se eu precisar enviar a máquina para reparo em garantia ou decidir vendê-la, é simples restaurá-la ao estado de fábrica.
Responder2
Não é possível responder se conv=sparse
é sábio/seguro usar, mas você obterá um resultado esparso usando dd
junto com a compactação (eu uso zstd) e se você "preparar" o disco de origem.
Tirei uma imagem de um SSD de 256 GB com Win 11 instalado.
No Windows cortei as partições NTFS, escrevi zero em todo o espaço livre e depois cortei novamente:
Corte:defrag C: /L
Zero espaço livre dentro do Windows: sdelete -z C:
(de sysinternals)
Fiz uma imagem do Linux com dd
e ztd
:
dd bs=1024K if="/dev/nvme0n1" | pv --size 256060514304 | zstd --quiet --force -o "/mnt/data/image.img.zst"
A imagem foi escrita e comprimida com cerca de150-350MB/s.
Depois disso, ao correr para o espaço vazio do disco de origem, os dados foram processados em1,2 GB:-) E o arquivo de imagem só crescia com cerca de 100 KB para os 220 GB de espaço livre restantes.
Eu diria que isso é tão bom quanto esparso "real". O tamanho do arquivo de imagem era19,3 GB. O tamanho da instalação do W11 era de 48 GB (se você excluir o arquivo de paginação na instalação do Windows, poderá economizar alguns MBs/GBs adicionais).
Para restaurar a imagem:
zstd --quiet --stdout --decompress "/mnt/disk1/image.img.zst" | pv | dd bs=1024K of="/dev/nvme0n1"
Informações extras:
Para zerar uma partição montada no Linux cat /dev/zero | pv > /mnt/dis1/zero.dat
.
E outro exemplo: W10 LTSC, tamanho de instalação (C:) 18,2 GB (sem arquivo de paginação):
Tamanho da imagem com dd: 6,26 GB
Tamanho da imagem com dism: 6,28 GB