MyTetra Share
Делитесь знаниями!
Rsnapshot — инкрементальное резервное копирование
Время создания: 28.04.2016 04:02
Раздел: Компьютер - Linux - Резервное копирование и синхронизация
Запись: xintrea/mytetra_syncro/master/base/146180537252vpq7qn2r/text.html на raw.github.com

Полный бэкап с помощью tar и gunzip имеет смысл, когда вы делаете одну единственную резервную копию. Например сдаёте проект заказчику и записываете файлы на болванку, которую торжественно убираете в сейф.

Но обычно бекапы делаются регулярно, каждые несколько часов. И тут на помощь спешит инкрементальное копирование. Первый бэкап по сути ничем не отличается от обычного копирования, но в последующие заносятся только изменившиеся с предыдущего раза файлы.

Поэтому, например, десять бэкапов будут весить как два. И если вам потребуется оперативно достать файлик из бэкапа — не нужно ничего распаковывать. В этом суть и польза инкрементального бэкапа.

Сам процесс заключается в копировании новых файлов и привязки не изменившихся файлов жёсткими ссылками (hard links).

Занимается этим rsync, о удобной надстройке над этой утилитой — rsnapshot читайте далее.


Установка

sudo apt-get install rsnapshot

sudo pacman -S rsnapshot

Файл лога:

sudo touch /var/log/rsnapshot


Настройка

Все настройки хранятся в /etc/rsnapshot.conf.

Внимание, редактируя этот файл не используйте пробелы, только символы табуляции.

sudoedit /etc/rsnapshot.conf

Измените папку, куда будут сохраняться бэкапы:

snapshot_root /storage/backup/snapshots/

Раскомментируйте cp:

cmd_cp /usr/bin/cp

Задайте количество хранимых бэкапов:

retain hourly 6

retain daily 7

retain weekly 4

retain monthly 12

Включите логирование в файл:

logfile /var/log/rsnapshot

Исключите из бэкапа нежелательные расширения и директории:

exclude *.tmp

exclude /var/cache

exclude /var/tmp


exclude /home/*/.thumbnails

exclude /home/*/.cache

exclude /home/*/.gvfs

Теперь можно задать папки для бэкапа, синтаксис:

backup /home/ localhost/

Вместо безликой папки localhost советую использовать имя хоста. Эта папка будет создана внутри snapshot_root.

Например:

backup /code/ laundry/

backup /home/ laundry/

backup /etc/ laundry/

backup /usr/local/ laundry/

backup /var/log/rsnapshot laundry/


Проверка

Проверьте конфиг на отсутствие ошибок:

sudo rsnapshot configtest

Если тест ругается на пробелы, то можно автоматически заменить их на табы используя эту команду:

sudo sed -i '/^#/!s/ /\t/g' /etc/rsnapshot.conf

Убедитесь, что на диске есть свободное место утилитами df -h или ncdu. И запускайте создание почасового снимка вручную:

sudo rsnapshot hourly

Посмотрите сколько он занимает места:

sudo rsnapshot du

В будущем, когда появится несколько бекапов, вы сможете сравнивать их этой командой:

rsnapshot diff hourly.0 hourly.1


Автоматизация

Теперь осталось только настроить cron:

sudo crontab -e

Для сервера оптимально делать ночью:

00 */4 * * * rsnapshot hourly

45 3 * * * rsnapshot daily

15 4 * * 1 rsnapshot weekly

30 4 1 * * rsnapshot monthly

Для десктопа, который на ночь выключается, сдвигаем бэкапы на вечер:

00 */4 * * * rsnapshot hourly

45 21 * * * rsnapshot daily

15 22 * * 1 rsnapshot weekly

30 22 1 * * rsnapshot monthly

И не забывайте периодически проверять их кондиционность. Они могут сломаться по тысяче причин и вы останетесь у разбитого корыта.


Оптимизация

Производительность

Как уже было написано выше для бекапов используется rsync, поэтому чтобы оптимизировать использование ресурсов добавьте эту строчку в /etc/default/rsync:

RSYNC_NICE='10'

Это позволит запускать процесс копирования с малым приоритетом, иначе во время копирования на несколько минут будет сильно проседать производительность системы.


Чистка бэкапов от мусора

После того, как будет сделан первый бекап нужно будет посмотреть, какие папки можно исключить из бекапа. Я рекомендую для этого замечательную утилиту ncdu:

sudo ncdu /storage/backup/

Тут уже всё зависит от конкретной системы. Например на своём десктопе я дополнил блок исключений так:

exclude *.tmp


exclude /home/*/.thumbnails

exclude /home/*/.cache

exclude /home/*/.gvfs


exclude /home/*/.mozilla/firefox/*/Cache/

exclude /home/*/.rvm

Не забудьте проверить синтаксис и результат:

sudo rsnapshot configtest

sudo rsnapshot hourly

sudo ncdu /storage/backup/


 
MyTetra Share v.0.59
Яндекс индекс цитирования