Shtsh 07.03.2011 14:30

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

Есть такая замечательная аркадная игра — 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)

1
2
3
4
5
6
7
8
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)

1
ACTION=="add", ENV{ID_FS_LABEL}=="shtsh_itg", RUN+="/usr/local/bin/itg-backup.sh"


Для удобства при вставке нужной флешки просто запускается скрипт /usr/local/bin/itg-backup.sh
Вот этот самый файл.
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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)
Теперь делаем

1
udevadm control restart


И радуемся!


Тэги: rsync ssh tar udev скрипт
+ 14 -
Похожие Поделиться

Shtsh 07.03.2011 15:50 #
Пост плохой? О_о
Не ожидал. Могу и удалить.
derfenix 07.03.2011 15:56 #
udevadm control restart

это уже не нужно, в последних версиях udev (уже достаточно давно) новые правила сразу же вступают в действие.
Nikisch 07.03.2011 19:39 #
В кедах бех hal флешки монтируются в каталог типа /media/6636-6465
Не очень понятно что это за цифры, но они уникальны для флешки (при подключении к разным портам и концентраторам сохраняются).
В принципе, реально отслеживать появление таких папок в медиа и запускать скриптик?
philosoft 07.03.2011 19:57 #
Во-первых, здесь используется udev.
Во-вторых, да, возможно с помощью (i|d)notify (в реализации в виде скрипта подойдёт inotify-tools)
Nikisch 08.03.2011 13:10 #
@Во-первых, здесь используется udev.@
Я знаю, но не создавать же тему для простого вопроса. Да и юдев там тоже используется, только по верх него накручены фреймворки всякие, не?
Сабжевый метод игнорирует функции DE по авто и ручному монтированию, т е не всегда удобен.
ascrazy 07.03.2011 23:30 #
О, спасибо Вам, я хоть автомаунт себе настроил)