
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 btrfs
sistema de arquivos abre algumas possibilidades muito úteis aqui. Observe que btrfs
atualmente (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 btrfs
sistema 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, subvolume
em 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 rsync
entre os dois pontos de montagem.
Este blogmostra como montar uma .vdi
imagem 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 --inplace
opçã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 rsync
versões <2.6.4, os dois são totalmente incompatíveis), pois uma cópia do arquivo ainda terá que ser criada no destino.