Автор: Джо Берри (Joe Berry)

Как и у многих из вас, у меня есть цифровая музыкальная коллекция в mp3 файлах. Она появилась, когда я начал оцифровывать CD-диски. Сейчас же, в основном, я покупаю музыку в интернет. С тех пор, как я стал тратить на неё достаточно большие суммы, мне всё больше не хочется её потерять. На сегодня моя коллекция имеет размер примерно 25Гб. В этой статье описывается моя стратегия по сохранению и управлению моей музыкальной коллекцией.

Я храню свою музыку на компьютере с Linux, с запущенной Samba и NFS, что позволяет прослушивать её как на компьютере с Windows, так и с Linux и Unix, которые имеются у меня дома. В основном я работаю за ноутбуком с установленной Ubuntu 8.04. Когда я дома, я получаю доступ к музыкальному серверу по NFS и слушаю мою коллекцию через Rhythmbox. Но иногда мне приходится путешествовать, и мне очень важно иметь доступ к моей музыке. Поэтому, я приобрёл недорогой, переносной жёсткий USB диск 160Гб ($99 US), который обеспечил меня как резервным копированием моей коллекции, так и возможностью слушать музыку, когда я нахожусь вне дома.

Есть множество способов создания резервных копий файлов. Множество статей уже опубликовано, а многие другие ещё будут опубликованы. Я не обещаю, что мой способ является самым лучшим. Но как бы то ни было, он отвечает моим требованиям и, может быть, угодит и вашим.

Как я уже говорил, я часто пополняю свою коллекцию, а иногда и удаляю из неё некоторые композиции. И мне не нужна такая схема резервного копирования, которая просто копирует новые файлы в некоторую резервную папку. Если я удаляю композицию, я хочу, чтобы она исчезла и из резервной папки. Мне нужен простой механизм, который будет чётко управлять и поддерживать точную копию моей коллекции (удаляя некоторые композиции и добавляя новые). Мне также не хочется, чтобы это занимало длительное время (помните, у меня 25Гб музыки). Решением, которое выбрал я, стала программа rdiff-backup. Само приложение и документация на него расположены на домашней странице:*www.nongnu.org/rdiff-backup/. *Менеджер пакетов Synaptic делает установку rdiff-backup очень простой. Просто сделайте поиск по rdiff-backup и установите его (заметка: также требуется установка Python).

Наилучшее описание программы rdiff-backup даёт сам автор: “rdiff-backup дублирует одну директорию в другую, возможно даже по сети. Целевая директория является копией директории источника, но также дополнительные обратные изменения сохраняются в специальных поддиректориях, поэтому вы всегда сможете восстановить давно утерянные файлы. Идея заключается в том, чтобы комбинировать все достоинства зеркального и инкрементального резервного копирования. rdiff-backup также сохраняет поддиректории, жёсткие ссылки, dev файлы, права доступа, uid/gid права, время модификации, расширенные атрибуты, списки доступа и ответвления ресурсов. Также rdiff-backup может управлять пропускной способностью канала на манер rsync. Поэтому, вы можете использовать rdiff-backup совместно с ssh, чтобы безопасно создавать резервную копию жёсткого диска на удалённой машине, при этом будут переданы только различия в файлах. И, наконец, rdiff-backup лёгок в использовании и имеет удобные настройки по умолчанию”.

Чтобы автоматизировать запуск rdiff-backup, я создал скрипт:

 1.  #!/bin/bash
 2.  LOG=/home/jberry/rdiff-backup-output.txt
 3.  echo "Starting rdiff-backup" >> $LOG
 4.  date >> $LOG 2>&1
 5.  # make sure the portable drive is mounted 
 6.  df /media/* | grep PASSPORT
 7.  if [ $? -eq 1 ] ; then
 8.      echo "No portable drive -- can't continue" >> $LOG
 9.      exit 1
10. fi
11. # make sure fedora's music is mounted
12. df /music | grep fedora
13. if [ $? -eq 1 ] ; then
14. #  try to mount
15.     echo "mounting the fedora music dir" >> $LOG
16.     /home/jberry/util/mount-music
17. # now make sure the mount was successful
18.     if [ ! -e /music/README.txt ] ; then
19.         echo "Unsuccessful mount of music from fedora" >> $LOG
20.         exit 1
21.     fi
22. fi
23. /usr/bin/rdiff-backup --print-statistics /music /media/WD\ PASSPORT/music >> $LOG 2>&1
24. echo "rdiff-backup is finished at " >> $LOG
25. date >> $LOG 2>&1

Строка №2 определяет выходной файл для хранения истории ежедневного запуска этого скрипта. Без этого будет трудно разобраться, если возникнут проблемы. Следующие несколько строк просто отмечают временную отметку.

В строках 5-10 скрипт подтверждает, что переносной USB диск присоединен. Если же он не присоединен, то нет причин продолжать выполнение скрипта дальше. В зависимости от специфики вашего жёсткого диска, в строке №6, возможно, необходимы изменения. Чтобы определить, какую строку вам использовать для вашего диска, подсоедините диск и запустите окно терминала (Приложения → Системные → Терминал). Введите команду “df”, и вы должны увидеть что-то похожее на

$ df 
Filesystem           1K-blocks      Used Available Use% Mounted on 
/dev/sda1             36835176  27133928   7830080  78% / 
varrun                  512916       296    512620   1% /var/run 
varlock                 512916         0    512916   0% /var/lock 
udev                    512916        60    512856   1% /dev 
devshm                  512916       164    512752   1% /dev/shm 
lrm                     512916     38176    474740   8% /lib/modules/2.6.24-18-generic/volatile 
/dev/loop0              510984    104716    406268  21% /joe0 
/dev/sdb1            156250144 117254752  38995392  76% /media/WD PASSPORT 

Заметка о последней строке. Она касается моего переносного диска. У вас, возможно, будет стоять другие значения после строки “/media/”. Строка №6 ищет в выводе команды “df” значение параметра “PASSPORT”. Если такое значение не найдено, скрипт завершается. Измените эту строку под свои параметры.

Следующая часть скрипта определяет доступность источника с музыкой. Мой музыкальный сервер является Linux системой и называется 'fedora'. Если директория fedora/music не присоединена, скрипт присоединит её, запустив другой скрипт mount-music (строка 16). В этом скрипте всего лишь одна строчка:

mount -o ro fedora:/joe0/music /music

Если ваша музыкальная коллекция находится на вашей локальной системе Ubuntu, то вы просто можете удалить строки 11-22. Вам потребуется изменить строку 23, строку, запускающую rdiff-backup, для определения местонахождения вашей музыкальной коллекции. Параметры, которые я указал (в порядке их появления):

  1. print-statistics

Это означает, что будет показана различная статистика.

/music

Директория где хранится музыка.

/media/WD\ PASSPORT/music

Эта директория определяет, где будет храниться резервная копия коллекции. Есть множество других параметров rdiff-backup. Введите:

man rdiff-backup

чтобы узнать, какие ещё команды доступны. Также вы можете посетить сайт с подробной документацией.

Существуют две вещи, о которых, как мне кажется, я должен упомянуть. Первая - это особенность, о которой я ничего не знал, пока не обнаружил её в FAQ. Когда я заглянул на мой диск с резервными копиями, я испытал некоторое беспокойство. Вот приблизительный вид структуры директории, который я увидел.

Обратите внимание, что каждый исполнитель и альбом (пятый исполнитель Alison Krauss и его альбом “Now That I've Found You”) имеет забавные символы вместо буквы в верхнем регистре. В частности, символ “;065” находится на месте буквы “A”. В FAQ это объясняется так:

Когда производится резервное копирование с регистро-зависимой файловой системы на регистро-независимую (такую как Mac's HFS+ или Windows's FAT32 или NTFS), rdiff-backup удаляет символы в верхнем регистре, чтобы избежать случая перезаписи уже имеющихся файлов. Если файловая система является регистро-сохраняющей, но не регистро-независимой - это означает, что файл с именем «Foo» равнозначен именам «Foo», «foo», «foO», «fOo» и т.д. Файловые системы, такие как ext3 в Linux, всё же воспринимают такие файлы, как разные копии файла.

Мой переносной диск отформатирован под файловую систему FAT32 (я хочу, чтобы он также был читаемым под Windows системами). На самом деле эта проблема не существенна. Т.к. все mp3-проигрыватели, например Rhythmbox, используют метаданные mp3 файла, чтобы определить имя исполнителя и альбома; они не используют физические имена файлов ни в каких целях.

Вторая вещь, о которой я должен сказать, возникала всего пару раз за прошедший год или два. Что-то начинает «засоряться», после чего rdiff-backup перестаёт работать. При этом сообщается об ошибке. Опять же в FAQ описано, каким образом можно обойти эту ошибку и перезагрузить процесс резервного копирования. Тут нет ничего серьёзного; нужная информация - это музыка - с ней всё в порядке, но вот файлы поддержки rdiff-backup, в которых записывается, что и когда было скопировано, вот они-то и «засоряются».

Я автоматически запускаю скрипт синхронизации моей музыки в одно и то же время каждый день. Это делается при помощи cron. Мой Crontab выглядит так:

15 9 * * * /home/jberry/util/run-rdiff-backup.sh

Это означает: запустить выполнение rdiff-backup.sh каждый день в 9:15 утра. По случаю, я проверил журнал (см. строку №2 в вышеприведенном скрипте), чтобы убедиться, что все работает правильно. В качестве домашнего задания вы можете улучшить скрипт для отправки по электронной почте уведомлений об имеющихся проблемах с созданием резервной копии.