Gosto de criar um backup de imagem pela primeira vez em que faço backup de um sistema. Após essa primeira vez, uso o rsync para fazer backups incrementais.
Meu backup de imagem usual é o seguinte:
Monte e zere o espaço vazio:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
desmontar e dd a unidade enquanto a comprime
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
para colocar o sistema de volta ao normal, geralmente faço uma
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
Isso é realmente simples e permite que eu salve o 'disco inteiro', mas realmente apenas salve o espaço usado.
Aqui está o problema. Digamos que eu faça o acima, mas não em um sistema limpo, e não obtenha os backups do rsync em breve, e há arquivos que eu quero acessar que estão na imagem. Digamos que eu não tenha espaço de armazenamento para descompactar e desdicionar a imagem em uma unidade, mas deseje montar a imagem para obter arquivos individuais dela ... Isso é possível?
Normalmente, não se comprime a imagem dd, o que permitirá que você monte a imagem usando -o loop
... mas esse não é o meu caso ...
Alguma sugestão para montar o img compactado em tempo real?
Usar o AVFS para 'montar' o arquivo gz e montar o dd.img interno funcionará (acho que não ... mas precisaria de verificação ...)?
fonte
SquashFS
para esse tipo de coisa. Ele também remove a duplicação de arquivos duplicados.Respostas:
Depende se a imagem do disco é uma imagem completa do disco ou apenas uma partição.
Lavando a (s) partição (ões)
Se o disco estiver em boas condições de trabalho, você obterá melhor compactação se lavar o espaço vazio no disco com zeros. Se o disco estiver falhando, pule esta etapa.
Se estiver imaginando um disco inteiro, convém lavar cada uma das partições do disco.
CUIDADO: Tenha cuidado, você deseja definir o
of
a um arquivo na partição montada, não a partição-SE!Criando uma imagem de partição
Onde
sda
é o nome do dispositivo e1
o número da partição. Ajuste de acordo com o seu sistema, se desejar criar uma imagem para uma partição ou dispositivo diferente.Criando uma imagem de disco inteira
Onde
sda
é o nome do dispositivo. Ajuste de acordo com o seu sistema se desejar criar uma imagem para um dispositivo diferente.Compressão
Faça uma imagem "squashfs" que contenha a imagem completa não compactada.
Compressão de Streaming
Para evitar que um arquivo temporário separado seja do tamanho total do disco, você pode transmitir para uma imagem squashfs.
Montando uma imagem de partição compactada
Primeiro monte a imagem do squashfs, depois monte a imagem da partição armazenada na imagem do squashfs montado.
Agora que você montou a imagem compactada, monte a própria imagem (que está dentro da imagem do squashfs)
Agora sua imagem está montada em
compressed_image
.EDIT: Se você quiser simplesmente restaurar a imagem do disco em uma partição neste momento (em vez de montá-la para navegar / ler o conteúdo), apenas
dd
a imagem nosquash_mount/sda1_backup.img
destino em vez de fazê-lomount
.Montando uma imagem de disco completo compactada
Isso requer que você use um pacote chamado kpartx. O kpartx permite montar partições individuais em uma imagem de disco completa.
Primeiro, monte sua partição compactada que contém a imagem completa do disco
Agora você precisa criar dispositivos para cada uma das partições na imagem completa do disco:
Isso criará dispositivos para as partições na imagem completa do disco, em
/dev/mapper/loopNpP
que N é o número atribuído ao dispositivo de loopback e P é o número da partição. Por exemplo:/dev/mapper/loop0p1
.Agora você tem uma maneira de montar as partições individuais na imagem completa do disco:
fonte
-p
ou-pf
para transmitir um pseudo-arquivo. Um pseudo arquivo pode ser usado para criar nós de dispositivo que, de outra forma, não seriam possíveis sem o root (útil para criar imagens como parte de um processo de compilação) ou para transmitir a saída de algum comando para a imagem. Um dos exemplos dados nos documentos (/usr/share/doc/squashfs-tools/examples/pseudo-file.example
no Debian / Ubuntu) éinput f 444 root root dd if=/dev/sda1 bs=1024 count=10
copiar os primeiros 10K de uma imagem de disco em um arquivo chamado "input" na imagem do squashfs.Se a imagem for somente leitura, você também poderá usar o nbdkit ( página de manual ) e seu plug-in xz (o xz deve fornecer melhores tempos de compactação e acesso aleatório do que o gzip).
Crie a imagem da partição compactada
Uma
--block-size
opção de 16 MiB deve fornecer um bom desempenho de acesso aleatório.Nota: você pode usar programas alternativos de compactação xz, como o pixz, que fornece compactação paralela; apenas certifique-se de dividir a saída em vários pequenos blocos; caso contrário, o nbdkit precisará descomprimir muitos dados. Por exemplo, em setembro de 2015, o pxz não suporta isso.
Servir com nbdkit
Conecte-se ao servidor NBD
Monte-o somente leitura
Quando terminar
Pare o nbdkit pressionando Ctrl+ C(ou com kill ).
fonte
Experimentar
archivemount
archivemount é um sistema de arquivos baseado em FUSE para variantes do Unix, incluindo Linux. Seu objetivo é montar arquivos (por exemplo, tar, tar.gz, etc.) em um ponto de montagem em que possa ser lido ou gravado como em qualquer outro sistema de arquivos. Isso torna o acesso ao conteúdo do arquivo compactado, transparente a outros programas, sem descompactá-los.
http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system
Depois de montar o arquivo, você pode usá-lo como um arquivo normal. Talvez obtenha uma tabela de partição ou converta, monte uma imagem com as ferramentas qemu.
squashfs útil para inicializar a partir da imagem, mas muito complexo para fazer backup.
fonte
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
Esta resposta complementa a resposta de Cristian Ciupitu . Se você usar a compactação xz com um tamanho de bloco razoável, poderá acessar a imagem do disco usando guestfish ou outras ferramentas libguestfs como esta:
fonte
Na verdade não. Você não pode realmente procurar um bloco específico no arquivo compactado sem descomprimir tudo primeiro, o que dificulta o uso da imagem compactada como um dispositivo de bloco.
Você pode usar algo como
dump
erestore
(outar
, realmente), todos os quais usam um formato de streaming ... para poder acessar arquivos inválidos, efetivamente digitalizando através do fluxo não compactado. Isso significa que, se o arquivo desejado estiver no final do arquivo compactado, você poderá esperar muito, mas não exige que você descompacte tudo no disco.O uso
tar
de backup pode parecer um pouco antiquado, mas você tem muita flexibilidade.fonte
Outro adendo à resposta de Cristian Ciupitu :
Se você usar
nbdkit
para montar uma imagem de disco completa (em comparação com uma imagem de partição), pode ser necessário especificar o tamanho do bloco (tamanho do setor do disco) ao conectar-se ao servidor NBD, pois o padrão é1024
bytes. Para usar512
bytes:Depois disso, o disco aparecerá como
/dev/nbd0
e você poderá visualizar a tabela de partições usandofdisk -l
. No entanto, as partições ainda não podem ser montadas - usekpartx
( da resposta de doug65536 ) para criar dispositivos para as partições, por exemplo:Por fim, as partições aparecerão
/dev/mapper/
e você poderá montá-las como de costume. Certifique-se de usar o modo somente leitura (-o ro
), pois o plugin xz suporta apenas leituras:fonte