Последнее время стали популярны посты на тему бекапа. Продолжу и я эстафету под девизом «Много бекапов хороших и разных».
Статья 1 и статья 2, натолкнувшие меня на эту идею.
Сам я давно пользуюсь rsnapshot для бекапа серверов, да и не только. Для тех, кто не в курсе, что оно такое — это базирующаяся на rsync утилита на Perl для создания резервных копий. Особенностью является ориентация на создание полных снапшотов файлов��й системы через заданный интервал времени, для экономии места на диске, не изменившиеся с момента первого бэкапа файлы линкуются как hard link.
Я работаю на Ubuntu 11.10 на ноутбуке и потому статья будет описывать метод бекапа этого самого ноутбука на внешний USB HDD, который не постоянно подключен, а подключается лишь периодически. В момент подключения и будет запускаться скрипт для бекапирования системы.
Итак, начнем. Для начала подготовим внешний винт для создания на нем бекапов. Запускаем
и подключаем винт по USB. Главное — понять каким устройством подключился наш диск, в моем случае — sdb. На этом винте можно использовать любую линуксовую файловую систему. Я использую по старой привычке ext3:
Вывод последней команды будет ооочень длинным, но нам надо найти примерно следующее:
Эти «XXXX» и «YYYY» нам надо где-то записать или запомнить. Теперь винт можно отключить, пока мы подготовим конфиги rsnapshot для работы. Для начала устанвливаем его:
Теперь настраиваем конфиг:
Меняем snapshot_root на /media/backup и указываем количество бекапов в строке daily. Что мы хотим бекапить, указываем строками вида:
Если необходимо на этот же винт бекапить и данные с удаленных серверов, то рекомендую ознакомиться со статьей Kolger. Мне это не требуется, и я этого у себя не настраивал.
Остается автоматизировать запуск rsnapshot при подключении HDD.
Создаем файл /etc/udev/rules.d/94-usb-backup.rules с содержимым:
Вот тут нам и нужны те цифро-буквы «XXXX» и «YYYY». Вписываем то, что соответствует нашему HDD и рестартуем udev:
Более подробно настройка udev рассмотрена по этой ссылке.
Осталось подготовить скрипт /user/local/bin/usb-backup.sh:
В первой строке скрипта «user» исправьте на свой логин в системе. Так же можно положить свою иконку на место /usr/share/pixmaps/usbhdd.png для более красивого сообщения.
При подключении устройства скрипт проверяет наличие сегодняшнего бекапа и если он есть, то просто выходит. Если его нет — создается новый снепшот указанных данных.
Надеюсь кому-то это будет полезно.
Статья 1 и статья 2, натолкнувшие меня на эту идею.
Сам я давно пользуюсь rsnapshot для бекапа серверов, да и не только. Для тех, кто не в курсе, что оно такое — это базирующаяся на rsync утилита на Perl для создания резервных копий. Особенностью является ориентация на создание полных снапшотов файлов��й системы через заданный интервал времени, для экономии места на диске, не изменившиеся с момента первого бэкапа файлы линкуются как hard link.
Я работаю на Ubuntu 11.10 на ноутбуке и потому статья будет описывать метод бекапа этого самого ноутбука на внешний USB HDD, который не постоянно подключен, а подключается лишь периодически. В момент подключения и будет запускаться скрипт для бекапирования системы.
Итак, начнем. Для начала подготовим внешний винт для создания на нем бекапов. Запускаем
$ sudo tail -f /var/log/syslog | grep "[sd"и подключаем винт по USB. Главное — понять каким устройством подключился наш диск, в моем случае — sdb. На этом винте можно использовать любую линуксовую файловую систему. Я использую по старой привычке ext3:
$ sudo umount /dev/sdb1
$ sudo mkfs.ext3 /dev/sdb1
$ sudo lsusb -vВывод последней команды будет ооочень длинным, но нам надо найти примерно следующее:
Bus 001 Device 004: ID 04fc:0c25 Sunplus Technology Co., Ltd SATALink SPIF225A
Device Descriptor:
…
idVendor 0xYYYY Sunplus Technology Co., Ltd
idProduct 0xXXXX SATALink SPIF225A
...
Эти «XXXX» и «YYYY» нам надо где-то записать или запомнить. Теперь винт можно отключить, пока мы подготовим конфиги rsnapshot для работы. Для начала устанвливаем его:
$ sudo apt-get install rsnapshotТеперь настраиваем конфиг:
$ sudo nano /etc/rsnapshot.confМеняем snapshot_root на /media/backup и указываем количество бекапов в строке daily. Что мы хотим бекапить, указываем строками вида:
backup /home/user/Sync localhost/
backup /home/user/Картинки localhost/
backup /home/user/Картинки_RAW localhost/
backup /home/user/Видео localhost/Если необходимо на этот же винт бекапить и данные с удаленных серверов, то рекомендую ознакомиться со статьей Kolger. Мне это не требуется, и я этого у себя не настраивал.
Остается автоматизировать запуск rsnapshot при подключении HDD.
Создаем файл /etc/udev/rules.d/94-usb-backup.rules с содержимым:
--/etc/udev/rules.d/94-usb-backup.rules--
SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", SYSFS{idProduct}=="XXXX", SYSFS{idVendor}=="YYYY", SYMLINK+="backup", RUN+="/usr/local/bin/usb-backup.sh"Вот тут нам и нужны те цифро-буквы «XXXX» и «YYYY». Вписываем то, что соответствует нашему HDD и рестартуем udev:
$ sudo service udev restartБолее подробно настройка udev рассмотрена по этой ссылке.
Осталось подготовить скрипт /user/local/bin/usb-backup.sh:
#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
export DISPLAY=:0.0
timeout=5000
notify-send -i /usr/share/pixmaps/usbhdd.png -t $timeout Backup "Found backup device"
### Монтируем устройство
mkdir /media/backup
mount -t ext3 /dev/backup /media/backup
chmod 777 /media/backup
### Проверяем на наличие свежего бекапа
DATE=`date +%Y-%m-%d`
OLDDATE=`ls -l --time-style=+%Y-%m-%d /media/backup | grep daily.0 | awk '{print $6}'`
if [[ "$DATE" == "$OLDDATE" ]]; then
notify-send -t $timeout -i /usr/share/pixmaps/usbhdd.png Backup "Backup alredy exists. Exiting."
### Размонтируем устройство и выходим
umount /media/backup
rmdir /media/backup
exit 1;
fi
### Создаем бекап
rsnapshot daily
### Unmounting device
umount /media/backup
rmdir /media/backup
notify-send -i /usr/share/pixmaps/usbhdd.png -t $timeout Backup "Backup finished"
exit 0В первой строке скрипта «user» исправьте на свой логин в системе. Так же можно положить свою иконку на место /usr/share/pixmaps/usbhdd.png для более красивого сообщения.
При подключении устройства скрипт проверяет наличие сегодняшнего бекапа и если он есть, то просто выходит. Если его нет — создается новый снепшот указанных данных.
Надеюсь кому-то это будет полезно.
