Серверная (www.it-simple.ru)

Резервное копирование в Linux на примере файлового сервера


Файловый сервер - громко сказано.
Будем рассматривать файловую помойку, где всем разрешён полный доступ к файлам и нет разграничения прав.
То есть - наиболее распространённый вариант хранения важной документации в компаниях.

Наше резервное копирование будет многоуровневым.

  1. RAID Файлы должны находиться не на одном жёстком диске, а, как минимум, на зеркальном RAID-массиве. Уже здесь пойдёт дублирование файлов на физически разные устройства.
  2. Защита от дурака Например, задумчиво вращая мышкой над структурой папок человек случайно ткнул левую кнопку и переместил какой-то каталог в другой, сам того не заметив. Или удалил файл и тут же спохватился. Надо иметь возможность восстановить такие «потери» без обращения к основному архиву.
  3. Резервное копирование Создание основного архива файлов.

Определимся с путями.

/mnt/storage/Точка монтирования для RAID, на котором лежат файлы
/mnt/storage/smb/Расшаренная папка
/mnt/storage/bk/Резервные копии «защиты от дурака»
/mnt/bk/Точка монтирования для хранилища архива. Это может быть сторонний samba-сервер, FTP-сервер или просто отдельный винчестер.

Защита от дурака

cp -lr /mnt/storage/smb /mnt/storage/bk/smb-`date +%y%m%d-%H%M%S`/

Эта команда создаст в /mnt/storage/bk подкаталог smb с меткой текущей даты и времени в формате +%y%m%d-%H%M%S (6 цифр - год, месяц и день, минус, 6 цифр - часы, минуты и секунды), в который вместо файлов зальёт жёсткие ссылки на них.

Другими словами, мы создадим «образ» структуры нашего файлового хранилища.

Плюсы:

Минусы:

Внимание:

Создание основного архива файлов

Можно использовать способ в лоб:

cp -r /mnt/storage/smb /mnt/bk/smb-`date +%y%m%d-%H%M%S`/

но это тупо.

Сколько файлов пользователи успеют изменить с предыдущего резервного копирования? Нужно ли тратить дисковое пространство на файлы, которые не изменились?

Поэтому воспользуемся программой rsync.

rsync -abx --suffix="-`date +%y%m%d-%H%M%S`" /mnt/storage/smb /mnt/bk/smb/
-aРежим архивной синхронизации. Симлинки копируются как симлинки, копирование происходит рекурсивно, сохраняются права доступа, владелец и время изменения файла.
-bДелать копии изменённых файлов. Старый файл переименовывается: к имени добавляется суффикс. Новый файл ложится на его место.
-vПоказывать подробности операций (см. ниже)
-xНе выходить за пределы файловой системы (игнорируются некоторые символические ссылки и mount --bind)
--suffixбудет дописан в конец старого файла в архиве

При первом запуске этой команды в /mnt/bk/smb/ ляжет полная копия файлов из /mnt/storage/smb.
При следующих запусках rsync будет копировать только изменённые файлы, причём в архиве будут оставаться и старые версии - с другими именами (со штампом времени в конце). То есть, при желании можно будет проследить эволюцию каждого изменяемого файла и восстановить его за любую дату архивирования.

Модифицируем команду, чтобы вести логи операций - по ним удобно отслеживать изменения в архивной копии.

rsync -abvx --suffix="-`date +%y%m%d-%H%M%S`" /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +%y%m%d-%H%M%S`.txt

Если архивирование идёт на удалённый сервер, то лучше не монтировать его в /mnt/bk/, а настроить на нём ещё один rsync и не гонять лишний трафик по сети.


Осталось теперь добавить нужные задания в crontab и только изредка проверять как оно работает.

Внимание! В файле /etc/crontab символы «%» надо экранировать: «\%».

Файл /etc/crontab:

... # В 0 часов 1 минуту со вторника по субботу, от имени пользователя bkuser делаем сохранение структуры файлов и каталогов 1 0 * * 2-6 bkuser cp -lr /mnt/storage/smb /mnt/storage/bk/smb-`date +\%y\%m\%d-\%H\%M\%S`/
# В 0 часов 5 минут в те же дни и от того же пользователя делаем инкрементный архив всех файлов нашей файлопомойки. 5 0 * * 2-6 bkuser rsync -abvx --suffix="-`date +\%y\%m\%d-\%H\%M\%S`" /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +\%y\%m\%d-\%H\%M\%S`.txt

Проверяем запуск заданий

cat /var/log/syslog | grep CRON
... [Mon] [Day] 00:01:01 gw /USR/SBIN/CRON[...]: (bkuser) CMD (cp -lr /mnt/storage/smb /mnt/storage/bk/smb-`date +%y%m%d-%H%M%S`/) [Mon] [Day] 00:05:01 gw /USR/SBIN/CRON[...]: (bkuser) CMD (rsync -abvx --suffix="-`date +%y%m%d-%H%M%S`" /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +%y%m%d-%H%M%S`.txt) ...

Ссылки

Работа с FTP как с локальной папкой. CurlFtpFS (http://www.it-simple.ru/?p=2785)

man rsync на русском (http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=rsync)