Бэкап на флэшку, используем udev.

Автор: Vyazovoi

Все знают о пользе бэкапов. И, я надеюсь, все их делают с определенной периодичностью.
Говорят, что все, хотя бы раз, сталкивались с проблемой потери информации. Незнаю как насчет "все", но лично я с этим сталкивался.
Конфигурационные файлы и прочие документы я храню на сервере, в этом мне помогает SBackup, но важные данные я храню только на флешках.
И эту операцию можно автоматизировать в операционной системе GNU/Linux (частично, флешку втыкать ядро за вас не будет).

Итак:
Задача: при подключении определенной флешки сделать на неё бэкап.
Инструмент: udev, который сейчас включается во все дистрибутивы.

Сам инструмент, который выполняет резервное копирование информации я здесь не буду. Это может быть просто шелл-скрипт, который копирует файлы по адресу, или какая-либо из систем инкрементального бэкапа.
Я опишу только настройку udev, которая будет запускать бэкап, когда подключена флеш-карта.

Получаем информацию, по которой мы будем идентифицировать нужную флешку. Подключаем эту флешку и создаем на ней раздел (скорее всего он у вас уже создан). Допустим флеш-карта у вас подключилась как /dev/sdc и на ней один раздел vfat. Тогда нужный нам раздел - /dev/sdc1. И нам необходимо получить его UUID, по которому мы будет узнавать эту флешку.
Для этого выполняем в терминале:

/lib/udev/vol_id /dev/sdc1

Скорее всего понадобятся права суперпользователя.
Если всё было сделано правильно то вы получите информацию об этом разделе. Вам понадобится только ID<em>FS</em>UUID.

Второй шаг - это написание правил для udev.
Я записал их в файл /etc/udev/rules.d/my-backup.rules
Выглядят эти правила вот так:

ACTION=="add", KERNEL=="sdc1", PROGRAM=="/lib/udev/vol_id -uuid %N", RESULT=="ваш_uuid", RUN+="/bin/mkdir -p /backup"

ACTION=="add", KERNEL=="sdc1", PROGRAM=="/lib/udev/vol_id -uuid %N", RESULT=="ваш_uuid", RUN+="/bin/mount -t vfat /dev/sdc1 /backup"
ACTION=="add", KERNEL=="sdc1", PROGRAM=="/lib/udev/vol_id -uuid %N", RESULT=="ваш_uuid", RUN+="/bin/sh /home/username/bin/backup.sh"
ACTION=="remove", KERNEL=="sdc1", RUN+="/bin/rmdir /backup", OPTIONS="last_rule"

Первое правило при подключении карточки создаёт директорию /backup.
Второе монтирует в неё карточку.
Следующее запускает скрипт бэкапа. В идеале этот скрипт должен выполнить операцию, затем отмонтировать карточку и выдать пользователю извещение (notify-send, dzen2, zenity?).
Последнее правило удаляет уже пустую директорию /backup.

Теперь вы можете записать в ваш планировщик задание - каждые 3 дня выполнять такой бэкап, как это сделал я.

Я особенно хотел бы отметить что заметка интересна как пример работы с udev и выполнения действий при появлении определенного устройства. Выполнение бэкапа на флеш-карту всего лишь не самый удачный пример.
P.S. Первоначально заметка была опубликована в моем дневнике, а затем, после небольшого редактирования, была опубликована здесь.

21.03.2009 - 22:42
А если поменяется sdc1 на sdd1? Что тогда?
28.05.2009 - 11:39
Гость wrote:
А если поменяется sdc1 на sdd1? Что тогда?

отвечу за автора: тогда можно использовать симлинки на устройства, генерируемые автоматом, например /dev/disk/by-id/usb-FlashDisk-part1
RSS-материал RSS-материал