Текущая страница: ГлавнаяНастройка сервера → Резервное копирование

Резервное копирование

Как обычно, возникла необходимость настройки резервного копирования, задача стандартная и возникающая у всех сисадминов в тот или иной момент времени. Единого решения не существует, но погуглив, можно найти достаточно много способов и скриптов реализующих данную задачу.
Прежде всего приведу ссылку на интересный материал — перевод статьи сравнивающей различные инструменты создания бекапа.
Методы создания бекапов.
Обычное резервное копирование — файлы каждый раз копируются заново, независимо от того, были они изменены или нет.
Дифференциальное резервное копирование — процесс сохранения резервных копий только тех файлов, которые были изменены или созданы с момента последнего полного резервного копирования.
Инкрементное резервное копирование — процесс сохранения резервных копий только тех файлов, которые были изменены или созданы с момента последнего инкрементного резервного копирования.
Пример: пусть полное копирование проводится по воскресеньям. Частичное — каждый день. Если в течении недели файл был изменен 1 раз, допустим во вторник, то инкрементное копирование создаст копию 1 раз, а диффиренциальное будет копировать этот файл со вторника каждый день вплоть до следующего полного копирования.
Еще один ньюанс выбора способа создания резервных копий, это вопрос как программа определяет, изменились ли данные. Надежные способы перечислены ниже.

  • проверка контрольной суммы, но она занимает много времени.
  • проверка ctime. Файловая система тоже должна поддерживать ctime, но большинство систем это могут.

Довольно теории, перейдем к практической реализации.
Вот ссылка на статью, в которой предлагается использовать tar, причем объединяются преимущества инкрементального и дифференциального бекапов.
Применяемые ключи:
1. —create — говорит, что мы создаем архив.
2. —ignore-failed-read — игнорируем файлы, которые не удалось прочитать
3. —one-file-system — запрещает бэкапу выходить за пределы файловой системы.
4. —preserve-permissions — эта опция говорит архиватору, что мы хотим сохранить все разрешения сохраняемых файлов.
5. —recursion — мы выполняем бэкап всех файлов и каталогов по указанному пути, а также всех файлов и каталогов всех подкаталогов.
6. —sparse — файлы с наличием «пустот» сохраняем именно с указанием мест и длин пустот, а не как файлы с огромным набором нулей.
7. —totals — в конце процесса выводим информацию о том, сколько данных мы сохранили.
8. —verbose — вывод подробной информации о процессе.
9. —gzip — сжимаем архив с помощью GZIP.
10.—file=файл_бэкапа — этот параметр указывает путь к создаваемому файлу бэкапа.
11.—wildcards — разрешаем использовать маски (* и ?) в списке исключений.
Замечание 1: У меня при включении этой опции файл метаданных получился пустым в случае если не задан список исключений.
12.—listed-incremental=файл_метаданных
13.—exclude-from=файл_исключений
14.—listed-incremental=файл_метаданных
Суть в следующем:
1. Если указанного файла не существует — выполняется полный бэкап, а сам файл — создается и заполняется.
2. Если указанный файл существует — выполняется инкрементальный бэкап от момента, определяемого файлом метаданных, а сам файл метаданных обновляется.
Собственно команда для архивации:

/bin/tar --create --ignore-failed-read --one-file-system --preserve-permissions --recursion --sparse --totals --verbose --gzip --file=файл_бэкапа --listed-incremental=файл_метаданных

Ежемесячно делаем полный бекап.
Еженедельно делаем бекап с изменениями от начала месяца.
Ежедневно делаем инкрементный бекап.
Фактически файлы метаданных нам нужны только для создания инкрементального бекапа, для восстановления они не требуются. Таким образом развернуть такой бэкап тоже несложно. Сначала разворачиваем полный (ежемесячный) бэкап на нужный месяц. Потом — поверх него в туже папку недельный бэкап на нужную неделю в этом месяце. А потом — поверх, по очереди все дни до нужного нам включительно.
Развертывание бекапа:

/bin/tar --extract --ignore-failed-read --preserve-permissions --listed-incremental=/dev/null --recursion --sparse --verbose --gzip --file=файл_бэкапа --directory=путь_для_развертывания

Дополнение:
Допустим есть полный архив и через некоторое время вы хотите посмотреть что изменилось в каталоге, который мы архивировали:
tar —compare —file=путь-к-архиву -С путь-от-которого-ищем-файлы
Пояснение:ключ -С меняет рабочую директорию, т.е.как работает compare. Берется путь из которого мы запускаем tar+путь с которым файл был сохранен в архиве, например если мы архивировали каталог /var/www/site1.ru и не использовали опцию —strip-components=N (которая вырезает из пути N слешей) то путь к файлам в архиве будет var/www/site1.ru, таким образом полный путь будет путь-от-которого-ищем-файлы+var/www/site1.ru т.е. запускаем так
tar —compare —file=путь-к-архиву -С /
Недостатки tar
1. Если есть пустой каталог — в архив он не добаляется.
2. Если вы удалили файлы, tar это никак не обрабатывает.
Баги/Недостатки
1. Опция —wildcards при включении этой опции файл метаданных получился пустым. Саму опцию устанавливал, файл исключений не задавал.
2. Если у файла были изменене права доступа то от окажется в инкрементном архиве, при проверке с помощью —compare будет указана причина — Mode differs. Однако если были изменены права доступа на подкаталог то все файлы подкаталога окажутся в архиве без объяснения причины.
3. tar никак не обрабатывает удаление файла из каталога. Если вы делаете инкрементный архив в течении недели, где-то в середине недели удалить файл, а к концу недели развернули резерные копии, то файл в них удален не будет. Впрочем это известный недостаток tar.
4. tar не добавляет в архив пустые каталоги.
Теперь о бекапах БД.
Вот тут утилька для создания резервной копии БД, некая замена mysqldump. Плюсы по сравнению с mysqldump
1. За раз бекапит все базы данных, доступные пользователю.
2. Базы дампятся потаблично, полезно если mysqldump на больших БД сваливается с ошибкой
Еще одно, понравившееся мне решение для резервирования БД — sypex.net
Ну и наконец как прописывать задания в планировщике — Настройка Crontab
Статья о подключении удаленных каталогов -
Установка и настройка SSHFS и AutoFS храним резервные копии на удаленном сервере.

Добавить комментарий