среда, ноября 21, 2012

Backup’ы подручными средствами

Процесс создания резервной копии данных, также известный как backup, в простейшем случае, не отличается от обычного копирования файлов и каталогов, и поэтому может быть выполнен стандартными для *nix командами cp или tar. В случае использования последней, к имени получаемого архива можно добавлять текущую дату для большего удобства при просмотре каталога с бэкапами:

$ tar -czvf /mnt/backups/docs-$(date "+%Y-%m-%d").tgz -C ~ docs
$ ls /mnt/backups

docs-2012-11-19.tgz


Использованные опции команды tar имеют следующее значение:
-cСоздать архив.
-zПолученный архив сжать с помощью gzip.
-vВыводить имена добавляемых в архив файлов.
-f archive-fileИмя файла создаваемого архива. Для записи формируемого архива в stdout в качестве имени нужно указать '-' (полезно при передачи данных дальше по конвейеру).
-C directoryПерейти в каталог directory перед созданием архива. В примере переход осуществляется в домашний каталог.

Последним параметром команде tar указывается каталог (или файлы) который ей со всем содержимым надлежит поместить в архив. Если опцию '-C ~' опустить и вместо неё написать ~/docs, то пути ко всем файлам в архиве будут начинаться с home/$USER/docs, что, как правило, не нужно.

Того же результата можно добиться и с помощью команды cp, только, разумеется, уже без сжатия:

$ cp -av ~/docs /mnt/backups/docs-$(date "+%Y-%m-%d")

Здесь ключ -a включает "Режим архивации" (archive mode). В этом режиме каталоги копируются вместе со всем содержимым, включая подкаталоги, т.е. рекурсивно. Кроме того, атрибуты копируемых файлов (такие как время модификации, принадлежность и т.д.) сохраняются в неизменном виде. Ключ -v заставляет cp выводить имена копируемых файлов.

Для восстановления данных из созданного ранее архива используется практически аналогичная команда:

$ tar -xzvf /mnt/backups/docs-2012-11-19.tgz -C ~

Здесь опция '-c' заменена на '-x' (от "eXtract"), которая говорит tar, что архив надо распаковать, предварительно перейдя в домашний каталог (опция '-C ~'). Кроме того указывать опцию '-z' не обязательно, tar сам догадается, что архив сжат gzip'ом. Задавать '-v' следует при остром желании увидеть кучу бегущих по экрану строчек.

Ну а теперь рассмотрим пару примеров.

Пример 1

Как-то раз мне пришлось иметь дело с платой, на которой должно было работать специальное приложение под управлением Linux. Загрузчик устройства U-Boot умел загружаться как по сети, так и с внутренней MMC-флешки. На время разработки для большего удобства было решено загружать плату по сети и по ней же монтировать корневую файловую систему, используя NFS. Дерево файлов не было "раскидистым" - все лежало на одной файловой системе. Когда пришло время проверить устройство в деле, встала задача переноса файлов с примонтированного по сети корня на внутреннюю флешку (которая предварительно была разбита на разделы и отформатирована):

# mount /dev/mmcblk3p2 /mnt
# cp -avx / /mnt

Обратите внимание на опцию '-x', которая позволяет исключить из обработки точки монтирования файловых систем или, другими словами, не выходить за пределы текущей файловой системы. Без нее команда cp завершится с ошибкой, ведь каталог /mnt находится в корневом каталоге!

Пример 2

Однажды я работал с устройством, на жестком диске которого был раздел подкачки, за которым в расширенном разделе жил Linux (sda5). В процессе настройки нужно было запускать разные версии Linux'а, имея возможность вернуться к старой в случае чего. При этом внешнего HDD для хранения backup'ов содержимого sda5 у меня не было (зато была сеть и загрузочная флешка), поэтому архивы я решил сохранять по сети на другом компьютере с Linux. В моём случае ip-адрес этой машины был 192.168.1.16, на ней был запущен NFS-сервер и экспортирован каталог для будущих бэкапов:

$ cat /etc/exports

/mnt/backups 192.168.1.0/24(rw,sync,all_squash,anonuid=500,anongid=100)

Значение этой строки следующее (см. exports(5)):
/mnt/backupsЭкспортируемый каталог.
192.168.1.0/24Кому разрешаем работать с каталогом (в данном случае всей подсети).
(...)Опции экспортирования
   rw - разрешаем читать и изменять экспортируемый NFS том
   sync - выполнять запись в синхронном режиме, т.е. отвечать готовностью только после того как данные действительно будут записаны
   all_squash,
   anonuid,
   anongid
- все запросы к экспортируемому NFS тому будут выполняться от имени указанного пользователя и группы

Теперь чтобы получить архив с содержимым корневого каталога устройства, выполняем на нем от имени root'а следующие команды:

# mount 192.168.1.16:/mnt/backups /mnt
# tar -czvf /mnt/rootfs-$(date "+%Y-%m-%d").tgz --one-file-system -C / .

Первой командой монтируется каталог /mnt/backups, расположенный на машине с ip-адресом 192.168.1.16 в каталог /mnt. Затем команда tar архивирует корневой каталог, не выходя при этом за пределы файловой системы на которой он расположен (опция --one-file-system, аналогичная '-x' команды cp). Формируемый архив сохраняется в примонтированном по NFS каталоге с текущей датой в имени файла.

Чтобы восстановить полученный таким образом бэкап системы, придется загрузиться с какого-нибудь загрузочного носителя (в моём случае это была USB-флешка) и распаковать архив в корневой каталог, предварительно удалив всё в нем. Если же перед восстановлением нужно сделать бэкап текущего корня, то проще сразу загрузиться с чего-нибудь внешнего. После чего создать точки монтирования удаленного каталога (ну не очень удаленного, но всё же), раздела с корневой ФС, смонтировать их и, собственно, выполнить архивацию:

# mkdir /mnt/{hdd,share}
# mount 192.168.1.16:/mnt/media/backup /mnt/share
# mount /dev/sda5 /mnt/hdd
# tar -czvf /mnt/share/rootfs-$(date "+%Y-%m-%d").tgz -C /mnt/hdd .

Затем можно приступить к, собственно, восстановлению корневого каталога из созданного ранее архива, пердварительно очистив от файлов корневую ФС:

# rm -Rf /mnt/hdd/*
# tar -xzvf /mnt/share/rootfs-2012-11-19.tgz -C /mnt/hdd

Вот так просто с помощью команд, которые есть практически на каждой UNIX машине, можно выполнять очень даже полезные вещи.

1 комментарий:

  1. The Casino: A Guide to New Games - Dr.MD
    New online 사천 출장마사지 casino games have come a 전라남도 출장샵 long 전라남도 출장샵 way since the dawn of casino 인천광역 출장샵 games that are 삼척 출장샵 the latest innovations in technology,  Rating: 5 · ‎1 vote

    ОтветитьУдалить