
Я использую rsync для создания резервных копий:
rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
Таким образом я экономлю место за счет использования жестких ссылок.
Проблема возникает, когда мне нужно сделать резервную копию огромного файла, который постоянно меняется (образ виртуальной машины).
Можно ли сделать жесткую ссылку не на весь образ, а только на его измененные части? Есть ли какой-нибудь инструмент, который может это сделать?
решение1
Есть несколько вещей, которые можно сделать здесь. Обратите внимание, что ни одна из них на самом деле не использует жесткие ссылки, поскольку они могут указывать только на полный файл. Использование файловой системы btrfs
открывает здесь некоторые очень полезные возможности. Обратите внимание, что btrfs
в настоящее время (последняя версия v3.13) все еще экспериментальна. Однако ееКОРОВА(копирование при записи) идеально подходит для такого рода вещей (конечно, при условии, что резервная копия может быть размещена в той же файловой системе). Рассмотрим btrfs
файловую систему, смонтированную на /mnt
, вы можете сделать атомарный снимок всей файловой системы с помощью:
btrfs subvolume snapshot /mnt /mnt/snapshot
Чтобы разрешить частичные снимки, вам необходимо поместить файлы для резервного копирования в , subvolume
а не в каталог. Например:
btrfs subvolume create /mnt/subvol
mv stuff /mnt/subvol
btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot
Помимо использования btfrs
, вы также можете рассмотреть возможность монтирования образа виртуальной машины на одной или обеих сторонах резервной копии и использования rsync
между двумя точками монтирования.
Этот блогпоказывает, как смонтировать .vdi
образ Virtual Box с помощью qemu-utils
. Команды от имени root (не проверено):
modprobe nbd
qemu-nbd -c /dev/nbd0 <vdi-file>
mount /dev/nbd0p1 /mnt
...
umount /mnt
qemu-nbd -d /dev/nbd0
Наконец, самый простой подход, который может быть полезен, — это --inplace
вариант для rsync
. Из страницы руководства:
--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.
Проблема здесь, конечно, в том, что нет никакой выгоды от использования этого в сочетании с --link-dest
(в rsync
версиях <2.6.4 эти два варианта вообще несовместимы), поскольку копию файла все равно придется создавать в месте назначения.