Я делаю это в тех случаях, когда нужен быстрый доступ к резервному содержимому - добавочное резервное копирование rsync
с --link-dest=
опцией.
Он работает довольно быстро, не влияет на предыдущие резервные копии, которые вы можете иметь столько, сколько хотите, и резервное копирование не занимает много места, так как резервные копии - это жесткие ссылки на существующие файлы. В этом случае доступ к резервному копированию является мгновенным, и фактическая передача файлов занимает несколько секунд даже для огромного количества файлов, поскольку rsync
копируются только новые файлы.
#!/bin/sh srcDir='/importunt/data' # Use full path bkpDir='/backups' # Use full path cd "$" previousDir="$(ls -td -- */ | head -n 1 | awk -F'/' '')" # Get most newest directory currentDir="$(date '+%Y-%m-%dT%H;%M;%S')" [ -n "$" ] && { rsync_opts="-aPvz --safe-links --link-dest=$/$ --exclude=*.mp3" } || { rsync_opts="-aPvz --safe-links --exclude=*.mp3" } mkdir -m 770 "$" rsync $ "$" "$"/"$"
В основном такое решение создает точный моментальный снимок, поэтому восстановление файлов довольно простое.
Не страшно, если вы используете du
на /backups
директории, когда она показывает увеличение размера на каждом обновлении, если вы будете использовать df
вы увидите, что фактическое пространство не уменьшается. Вот как жесткие ссылки рассчитывают на Linux и FreeBSD, так что не беспокойтесь. Чтобы убедиться, что я не соврал, вы можете проверить inode для некоторого файла в инкрементном резервном копировании с помощью ls -i file
. Вы обнаружите, что один и тот же файл во всех каталогах имеет один и тот же индекс, что означает rsync
дублирование только имен файлов с жесткими ссылками, но все они указывают на один и тот же контент.
Еще одним преимуществом этого метода является то, что вы можете удалять самые старые каталоги резервных копий в любом порядке - самые последние, промежуточные или самые старые.
Сценарий выше является упрощенным примером. Если содержимое в инкрементном резервном копировании предполагается редактировать, вам не следует использовать механизм ls -t
для обнаружения самого нового предыдущего каталога в резервном хранилище, а вместо этого сохранить его $
в некоторый файл и восстановить $
при последующем вызове.
Поскольку rsync
поддержка переноса осуществляется через ssh
вы, вы можете перенести инкрементное резервное копирование на удаленный компьютер с той же эффективностью, только изменения будут синхронизированы.