“ligação física” de partes de um arquivo grande no qual apenas uma pequena parte foi alterada

“ligação física” de partes de um arquivo grande no qual apenas uma pequena parte foi alterada

Eu uso o rsync para fazer backups:

rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP

Dessa forma economizo espaço devido ao uso de links físicos.

O problema aparece quando preciso fazer backup de um arquivo enorme que está sempre mudando (imagem da máquina virtual).

É possível vincular não toda a imagem, mas apenas as partes alteradas? Existe algum tipo de ferramenta que possa cuidar disso?

Responder1

Há uma série de coisas que poderiam ser feitas aqui. Observe que nenhum deles realmente usa links físicos, pois só podem apontar para um arquivo completo. Usar o btrfssistema de arquivos abre algumas possibilidades muito úteis aqui. Observe que btrfsatualmente (a versão mais recente é v3.13) ainda é experimental. No entanto, a suaVACAA capacidade (cópia na gravação) é perfeita para esse tipo de coisa (desde que seja aceitável ter o backup no mesmo sistema de arquivos). Considere um btrfssistema de arquivos montado /mnt, você pode fazer um instantâneo atômico de todo o sistema de arquivos com:

btrfs subvolume snapshot /mnt /mnt/snapshot

Para permitir instantâneos parciais, você deve colocar os arquivos para backup em um diretório, subvolumeem vez de em um diretório. Por exemplo:

btrfs subvolume create /mnt/subvol
mv stuff /mnt/subvol
btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot

Além de usar btfrs, você também pode considerar montar a imagem da máquina virtual em um ou ambos os lados do backup e usá-la rsyncentre os dois pontos de montagem.

Este blogmostra como montar uma .vdiimagem do Virtual Box usando qemu-utils. Os comandos como root (não testado):

modprobe nbd
qemu-nbd -c /dev/nbd0 <vdi-file>
mount /dev/nbd0p1 /mnt
...
umount /mnt
qemu-nbd -d /dev/nbd0

Finalmente, a abordagem mais simples que pode ser útil é a --inplaceopção for rsync. Na página de manual:

--inplace
          This option changes how rsync transfers a file when its data needs to
          be updated: instead of the default method of creating a new copy of the
          file and moving it into place when it is complete, rsync instead writes
          the updated data directly to the destination file.
...
          This option is useful for transferring large files with block-based
          changes or appended data, and also on systems that are disk bound, not
          network bound.

O problema aqui, é claro, é que não há nenhum benefício em usar isso em combinação com --link-dest(nas rsyncversões <2.6.4, os dois são totalmente incompatíveis), pois uma cópia do arquivo ainda terá que ser criada no destino.

informação relacionada