Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #62, ЯНВАРЬ 2006 г.

Пингвинья резервация

Alexander S. Salieff

Спецвыпуск: Хакер, номер #062, стр. 062-066-1


(salieff@mail.ru)

Резервирование данных в Linux подручными средствами

можно резервировать данные с помощью сложных монолитных программных комплексов. можно с помощью специализированных небольших утилит. а можно и подруЧными средствами, входЯщими практиЧески в любой современный дистрибутив

В сущности, процесс бэкапа, или резервирования данных, сводится к тому, чтобы произвести файловое копирование в тех или иных вариациях, с помощью того или иного транспорта. Так что в этой статье я буду изображать из себя пользователя, который немного соображает в том, как функционируют некоторые типичные Linux'овые утилиты. Попытаюсь создать системы резервирования из комбинации подручных средств, как говорится, в стиле unix-way. Будем продвигаться от очень простого к не очень сложному, попутно отчитываясь о проделанной работе.

В каких случаях не нужно мудрить

Если ты решаешь свести процесс резервирования данных к копированию, то прежде всего возникает мысль скопировать информацию самыми элементарными средствами из доступных:

$> cp -fpR srcdir dstdir

И не надо снисходительных смешков. Во-первых, если dstdir находится на «другом» винчестере или хотя бы на «другом» разделе, копирование, может быть, реально спасет данные. Во-вторых, не надо забывать, что в Linux'овом ядре прослойка файловых систем действительно виртуальная и обладает открытой, масштабируемой архитектурой, при этом наша dstdir вполне может являться точкой монтирования, например, для NFS и физически находиться за сто километров на абсолютно другой машине.

Резервной копией придется пользоваться очень редко (я на это надеюсь), а она занимает столько же места, сколько и оригинал. Непорядок. Но не зря же придумали архивацию:

$> cp -fpR srcdir dstdir && tar -zc -f archive.tar.gz && rm -Rf dstdir

После оформления конструкции только медленномыслящий человек не увидит избыточности создания dstdir. Она теперь не нужна, можно паковать прямо в файл из исходной директории. Также волнует и то, что архив имеет фиксированное имя, — могут возникнуть проблемы, когда захочется резервировать данные не уничтожая старый резерв. Проблему мы решим с помощью строковой интерполяции команды date, приняв за факт то, что бэкап создается не чаще одного раза в секунду:

$> tar -zc -f "bkpdir/backup_`date '+%Y-%m-%d_%H:%M:%S'`.tar.gz" srcdir

Далее в директории bkpdir будут помещены чудесные файлы вида backup_2005-10-25_04:00:12.tar.gz, backup_2005-10-26_04:00:11.tar.gz и т.д. Теперь осталось только разобраться с устаревшими резервными копиями, дабы они не занимали ценное место. Допустим, мы хотим удалять бэкапы, имеющие возраст больше недели. В этом нам поможет чудесная утилита find:

$> find bkpdir/ -name 'backup_*.tar.gz' -mtime +7 -exec rm -f \{\} \;

Обрати особенное внимание на экранирование аргументов, идущих за exec: если не сделать этого, shell интерполирует их по-своему. На основе полученного опыта мы уже можем сотворить вполне работоспособный бэкап-скрипт, после чего останется только за'shedull'ить его в крон, дабы он выполнялся каждую ночь ровно в четыре часа:

Содержание  Вперед на стр. 062-066-2