Автоматический бекап при подключении внешнего HDD в Ubuntu

    Последнее время стали популярны посты на тему бекапа. Продолжу и я эстафету под девизом «Много бекапов хороших и разных».

    Статья 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 для более красивого сообщения.

    При подключении устройства скрипт проверяет наличие сегодняшнего бекапа и если он есть, то просто выходит. Если его нет — создается новый снепшот указанных данных.

    Надеюсь кому-то это будет полезно.
    Поделиться публикацией

    Похожие публикации

    Комментарии 12

      +2
      Новичкам в этой статье стОит обратить внимание еще и на пример настройки правил udev, бывает оч полезно этим пользоваться. Например, удобно чтобы конкретный внешний винт монтировался автоматически, и всегда в определенный каталог.
        +1
        Тут задача все таки больше бекапить, а не настройка udev.
        Но за замечание спасибо. Сейчас добавлю ссылку про udev.
        0
        В Ubuntu 11.10 из коробки есть графическая программа Backup, делающая вышеописанное.
          0
          Вы ей пользовались? Она делает кучу страшных 50меговых tar.gz и diff.tar.gz (если не ошибаюсь с расширениями).
          Проще уж rsnapshot.
          0
          А Вы случаем не пробовали flexbackup который умеет делать инкрементные бэкапы, если пользовались — не могли бы сравнить?
            0
            К сожалению, не пробовал.
            0
            Спасибо, теперь я знаю как просто синхронизировать свой android!!!
              0
              абаснуй!
              пожалуйста :-) Интересно понять, что имеется в виду под синхронизацией в контексте этой статьи?
                0
                В android-е все (за исключением контактов) хранится в виде файлов, поэтому Music, Video, English, Books, DCIM — все файлы. Имея копию на жестком диске (у меня такая имеется как backup-ная) unison-ом можно синхронизировать файлы в обоих направлениях. В результате сконвертированный в ту самую backup-ную директорию фильм, и новые снимки смартфона, после подключения последнего к компьютеру могут синхронизироваться и становиться доступными как на компьютере, так и на смартфоне.
              0
              за udev спасибо, а вообще очередной велосипед.

              Кстати, зачем делать бекап на внешний HDD? Он же дороже стоит?
                0
                Вы предлагаете делать бекап ноута на тот же винт? Или есть варианты поставитьв ноут второй винт?
                  0
                  ой, прошу прощения — насчет ноута упустил

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое