
Utilizo rsync para hacer copias de seguridad:
rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
De esta manera ahorro espacio gracias al uso de enlaces físicos.
El problema aparece cuando necesito hacer una copia de seguridad de un archivo enorme que siempre cambia (imagen de máquina virtual).
¿Es posible vincular no toda la imagen, sino solo las partes cambiadas? ¿Existe algún tipo de herramienta que pueda encargarse de esto?
Respuesta1
Hay varias cosas que se podrían hacer aquí. Tenga en cuenta que ninguno de ellos utiliza enlaces físicos, ya que sólo pueden apuntar a un archivo completo. El uso del btrfs
sistema de archivos abre aquí algunas posibilidades muy útiles. Tenga en cuenta que btrfs
actualmente (la versión más reciente es la v3.13) todavía es experimental. Sin embargo, suVACALa capacidad (copiar en escritura) es perfecta para este tipo de cosas (siempre y cuando, por supuesto, sea aceptable tener la copia de seguridad en el mismo sistema de archivos). Considere un btrfs
sistema de archivos montado en /mnt
, puede hacer una instantánea atómica de todo el sistema de archivos con:
btrfs subvolume snapshot /mnt /mnt/snapshot
Para permitir instantáneas parciales, debe colocar sus archivos para realizar una copia de seguridad dentro de un subvolume
directorio en lugar de un directorio. P.ej:
btrfs subvolume create /mnt/subvol
mv stuff /mnt/subvol
btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot
Además de usar btfrs
, también podría considerar montar la imagen de la máquina virtual en uno o ambos lados de la copia de seguridad y usarla rsync
entre los dos puntos de montaje.
este blogmuestra cómo montar una .vdi
imagen de Virtual Box usando qemu-utils
. Los comandos como root (no probado):
modprobe nbd
qemu-nbd -c /dev/nbd0 <vdi-file>
mount /dev/nbd0p1 /mnt
...
umount /mnt
qemu-nbd -d /dev/nbd0
Finalmente, el enfoque más simple que puede ser de alguna utilidad es la --inplace
opción para rsync
. Desde la 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.
El problema aquí, por supuesto, es que no hay ningún beneficio al usar esto en combinación con --link-dest
(en rsync
versiones <2.6.4, los dos son completamente incompatibles), ya que aún será necesario crear una copia del archivo en el destino.