$ 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 машине, можно выполнять очень даже полезные вещи.
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