Highlighter

воскресенье, 15 января 2012 г.

Делаем бэкап при вставке флешки

Есть такая замечательная аркадная игра — In The Groove. И эта самая игра сохраняет результаты на флешку. И очень захотелось делать бэкап папок с информацией. Под катом как я это реализовал.

Что делает скрипт?
При вставке флешки с определённой меткой (тут shtsh_itg) архивируем папки "In The Groove 2" и "In The Groove 3", помещаем в определённую папку (/home/shtsh/backup/itg) и копируем по ssh на сервер.

Примечание. Для корректной работы требуется монтирование флешки через udev (или как угодно, но флешка должна монтироваться в /media/label). Вот как монтируются флешки (файл /etc/udev/rules.d/10-usb-storage.rules)


ACTION=="add", KERNEL=="sd<a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/bin/mkdir -p /mnt/%k"
ACTION=="add", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/bin/mount -o rw,noexec,dmask=000,fmask=111,utf8 /dev/%k /mnt/%k"
ACTION=="add", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/bin/ln -s /mnt/%k /media/$env{ID_FS_LABEL_SAFE}"
ACTION=="remove", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/bin/umount /dev/%k"
ACTION=="remove", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/usr/bin/unlink /media/%k"
ACTION=="remove", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/usr/bin/unlink /media/$env{ID_FS_LABEL_SAFE}"
ACTION=="remove", KERNEL=="sd</a-z><a-z><0-9>", ENV{ID_USB_DRIVER}="usb-storage", RUN+="/bin/rmdir /mnt/%k"
</a-z>

Тут у нас монтируются диски автоматом в /mnt/sdXY, где sdXY — имя диска, создаётся симлинк на неё в /media/label, где label — метка диска. Когда флешку вынимают, папки удаляются.

Далее, создадим правило для бэкапа при вставке флешки с меткой shtsh_itg (файл /etc/udev/rules.d/80-backup.rules)


ACTION=="add", ENV{ID_FS_LABEL}=="shtsh_itg", RUN+="/usr/local/bin/itg-backup.sh"
Для удобства при вставке нужной флешки просто запускается скрипт /usr/local/bin/itg-backup.sh
Вот этот самый файл.


#!/bin/sh                                                                                                                                                                                         

#файл со списком папок для копирования
FILES_TO_BACKUP='/home/shtsh/backup/itg/filelist'
#куда копировать бэкап
DIRECTORY_TO_BACKUP="/home/shtsh/backup/itg/"
#куда монтируется флешка
DIRECTORY_WITH_FILES="/media/shtsh_itg"
#удалённый каталог для копирования
REMOTE_DIR="shtsh@192.168.0.254:/home/shtsh/backup/itg/"
#ключ для автоматической авторизации ssh
KEY="/root/id_rsa"

cd $DIRECTORY_WITH_FILES
tar czvf $DIRECTORY_TO_BACKUP/shtsh_itg-`date +%Y%m%d-%H:%M`.tgz -T $FILES_TO_BACKUP
rsync -avrz -e "ssh -i $KEY" $DIRECTORY_TO_BACKUP $REMOTE_DIR
Вот файл /home/shtsh/backup/itg/filelist
In The Groove 2
In The Groove 3

Возможные вопросы:
Почему выбран tgz? — Быстро. На нетбуке с атомом он отрабатывает в разы быстрее, чем bzip2
Почему подключаемся под root? — UDEV работает из-под root, поэтому владельцем файла ключа должен быть root (владельцем файла должен быть root:root, права 600)
Теперь делаем

udevadm control restart

И радуемся!

Опубликовано на Welinux.ru

Комментариев нет:

Отправить комментарий