- Резервное копирование в Linux – команда tar
- Особенности использования утилиты tar
- Синтаксис и опции команды tar
- tar примеры
- Часть V Рекомендации связанные с резервным копированием
- Глава 22 Процедуры резервирования и восстановления данных
- Резервное копирование и восстановление в Linux
- Программа резервного копирования tar
- Создание резервных копий с tar
- Автоматизация задачи резервного копирования при помощи tar
- Восстановление файлов с tar
- Тестирование возможности восстановления из резервных копий
- Дополнительная документация
Резервное копирование в Linux – команда tar
Утилита tar в Linux предназначена для объединения (упаковки) нескольких файлов в один, т. е. для создания архивов. Она обладает хорошим функционалом для работы с архивами, умеет эффективно перемещать файлы (архивы или tar-файлы) с одного устройства на другое (включая ленточные устройства), сохраняя при этом атрибуты файлов и структуру файловой системы. Всё это позволяет использовать утилиту в качестве полноценного инструмента для организации резервного копирования. Конечно, для этих целей существуют и другие, специализированные утилиты. Как например dump, однако системным администраторам полезно уметь обращаться также и с tar.
Особенности использования утилиты tar
Как уже отмечалось, утилита объединяет несколько каталогов и файлов в один tar-файл, который потом можно сжать при помощи, например gzip, compress или bzip2. Это очень удобно, когда необходимо и данные зарезервировать и дополнительное место освободить на диске. Утилита часто применяется, когда нужно создать кратковременные резервные копии данных.
Среди версий tar, которые не относятся к GNU, подавляющее большинство таких, которые не поддерживают длину имён файлов больше, чем 100 символов, а также не умеют работать с несколькими лентами, поэтому перед использованием конкретной имеющейся в распоряжении версии утилиты необходимо внимательно ознакомиться с официальной технической документацией (команда man tar) для выяснения подобных деталей. Также, не все версии tar по-умолчанию обрабатывают символьные ссылки — от версии к версии для этого используются различные ключи, о чём можно также узнать из документации. Утилита очень хорошо подходит для быстрого копирования дерева каталогов.
Синтаксис и опции команды tar
У утилиты tar следующий синтаксис:
tar [опции] название_архива файлы_для_архива
Например, с помощью команды:
можно сделать копию каталога /etc в архив etc.tar. Приведённый пример демонстрирует распространённый случай резервного копирования с помощью команды tar. Здесь опция -c означает создание (create) архива, -f – вывод результатов в файл. Во второй части команды, которая принимает на свой вход выходной поток от tar -cf опция -x (extract) указывает tar, что нужно извлекать содержимое архива, -p – сохранять информацию о режимах доступа к файлам. Есть ещё опция -b, позволяющая задавать коэффициент объединения блоков, который полезен при записи на ленточные устройства. Это в некоторых случаях позволяет добиться большей производительности. Оптимальным считается значение 20, однако, поэкспериментировав, можно найти и лучший вариант для конкретных условий. Опция -v позволяет выводить подробную информацию о ходе работы команды.
Синтаксис для распаковки:
tar [опции] архив
Распакует archive.tar в текущую директорию, что бы задать директорию куда нужно распаковать архив используйте ключ -с. Например
Ниже представлен основной список ключей команды tar
-A, —catenate, —concatenate присоединение tar-файловк архиву
-c, —create создание нового архива
-d, —diff, —compare поиск различий между архивом и файловой системой
—delete удаление из архива (не на магнитных лентах!)
-r, —append добавление файлов в конец архива
-t, —list вывод списка содержимого архива
—test-label проверка метки тома архива и выход
-u, —update добавление в архив только более новых файлов
-x, —extract, —get извлечение файлов из архива
Обратите внимание, что при запуске команды, перед ключами не обязательно ставить знак дефиса
tar примеры
Как уже упоминалось, для создания сжатых архивов сначала создаётся сам архив командой tar, а затем этот архив сжимается с помощью gzip. Но можно всё это сделать и одной командой tar:
В результате будет создан сжатый архив gzip archive.tgz, сжатие которого будет выполнено с помощью gzip и благодаря опции z. Символ «*» указывает, что в архив попадёт всё, что находится в текущем каталоге. Здесь же будет создан и целевой архив archive.tgz. Вместо опции z можно указывать и другие — Z, J, j, которые задают соответствующие алгоритмы сжатия — LZV, xz и bzip2.
На всякий случай, перед созданием резервных копий лучше перейти в корневой каталог «/» — утилита убирает начальный символ «/» из имён/путей файлов, из-за чего в последствии информация из архивов может быть восстановлена не совсем правильно.
В случае с резервным копированием (на ленточный носитель) можно использовать следующие команды:
Как видно, здесь в качестве имени архива используется /dev/st0 – ленточное устройство. Поэтому для идентификации архивов полезно воспользоваться опцией —label, задающей описание конкретного архива. В обратных кавычках подставляется маска для даты/времени создания архива. Опцией -C (или —directory) задаётся директория, подлежащая резервированию. Для выполнения добавочного архивирования, т. е. когда необходимо зарезервировать только изменившиеся с момента предыдущей архивации файлов, следует воспользоваться опцией -N:
После создания резервной копии не лишним будет проверить с помощью опции -d, что архив цел:
Для резервирования всей системы можно использовать такую команду:
Здесь с помощью опций —exclude указывается, какие каталоги необходимо исключить из процедуры архивирования, а символ точки «.» в конце команды говорит о том, что нужно обрабатывать все каталоги и файлы, находящиеся в директории, указанной опцией -C. Следует заметить, что в данном примере, в отличие от предыдущих, в качестве целевого архива задан непосредственно tar-файл, а не ленточное устройство.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Часть V Рекомендации связанные с резервным копированием
Глава 22 Процедуры резервирования и восстановления данных
В этой главе
Резервное копирование и восстановление в Linux
Программа резервного копирования tar
Создание резервных копий с tar
Автоматизация задачи резервного копирования с tar
Восстановление файлов с tar
Программа резервного копирования dump
Создание резервных копий с dump
Восстановление файлов с dump
Резервное копирование и восстановление через сеть
Резервное копирование и восстановление в Linux
Безопасность и надежность сервера вплотную связана с процедурой регулярного резервного копирования. Иногда могут возникать различные повреждения. Они могут быть следствием атак, ошибок аппаратного обеспечения, людских ошибок, перепадов напряжения и пр. Самый надежный метод резервного копирования это записать данные в место независимое от вашего Linux сервера, например, через сеть, на стример, сменный носитель, записываемый CD-ROM и пр.
В Linux существует много методов выполнить резервное копирование, среди них такие, как «dump», «tar», «cpio» и «dd». Также доступны утилиты базирующиеся на текстовых файлах, например «Amanda», которая разработана, чтобы добавить дружественный пользовательский интерфейс к процедуре резервного копирования и восстановления данных. И наконец, коммерческие пакеты резервного копирования, например «BRU».
Процедуры выполнения резервного копирования и восстановления данных будет отличаться в зависимости от выбранного вами решения. Из этих соображений, мы будем обсуждать здесь процедуру резервного копирования при помощи традиционных для UNIX утилит: «tar» и «dump».
Что такое резервное копирование
Основная идея резервного копирования — это создание копий всего что установлено на вашей системе, но с некоторыми исключениями, о которых мы напишем ниже. Будет не логичным включать их в ваши резервные копии, так как это будет напрасная трата времени и пространства на носители. Основными исключениями, не включаемыми в ваши резервные копии, являются:
- Файловая система «/proc»: так как она содержит только данные, которые ядро генерирует автоматически, и нет никакого смысла сохранять их.
- Файловой системы «/mnt», потому что в нее вы монтируете ваши сменные носители, подобные CD-ROM, гибким дискам и пр.
- Каталоги и носители, содержащие резервные копии, такие как стримеры, CD- ROM, смонтированная файловая система NFS, удаленные/локальные каталоги и прочие виды носителей.
- Программное обеспечение, которое может быть легко повторно установлено, хотя оно может иметь конфигурационные файлы, которые необходимо копировать, чтобы не выполнять работы по их настройке позже. Я рекомендую сохранять их (конфигурационные файлы программного обеспечения) на дискете.
Программа резервного копирования tar
Программа резервного копирования tar — это программа архивирования, которая была создана для хранения и извлечения файлов из архива, известного как тарфайл. Тарфайл может быть создан на лентопротяжном устройстве; однако, чаще всего тарфайлы записываются как обычные файлы.
Простая схема резервного копирования
Когда вы решили создавать резервные копии ваших файлов, вы должны выбрать схему резервного копирования до начала этой процедуры. Существует множество схем резервного копирования, зависящих от политики резервного копирования, которую вы хотите использовать. В дальнейшем, я покажу вам одну из схем, которую вы можете использовать, которая использует преимущественно возможности программы tar. Эта схема выглядит так: сперва копировать все, что возможно, а в дальнейшем все, что изменилось со времени создания последней резервной копии. Первая резервная копия называется полной, а остальные добавочными.
Создание резервных копий с tar
С шестью лентами вы можете делать резервные копии каждый день; процедура использует ленту 1 для полного резервного копирования (Пятница 1), и ленты со 2 по 5 для добавочного резервного копирования (С понедельника по четверг). Затем, мы делаем новую полную резервную копию на ленту 6 (вторая пятница), и далее делаем добавочные копии на лентах со 2 по 5. Важно сохранить 1 в неприкосновенности, пока мы не получим полную резервную копию на ленте 6. В следующем примере, мы подразумеваем, что записываем резервные копии на SCSI ленточное устройство с именем (/dev/st0), и создаем резервную копию домашнего каталога (/home) нашей системы.
Первое, мы должны переместиться в корневой раздел. Когда «tar» создает архивные файлы, он удаляет начальный символ «/» (слеш) из пути к файлу. Это значит, что после восстановления файлы могут оказаться не на своем месте. Чтобы решить эту проблему, необходимо до изготовления резервных копий и восстановления данных переходить в корневой раздел вашей файловой системы.
Переместитесь в корневой раздел:
Важно всегда начинать с изготовления полной резервной копии, например, в пятницу:
- Пятница 1, (используйте ленту 1 для первой полной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home - Понедельник, (используется лента 2 для добавочной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home - Вторник, (используется лента 3 для добавочной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home - Среда, (используется лента 4 для добавочной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home - Четверг, (используется лента 5 для добавочной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpNf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home - Пятница 2, (используется лента 6 для полной резервной копии).
[root@deep /]# cd /
[root@deep /]# tar cpf /dev/st0 —label=» full-backup created on `date ‘+%d-%B-%Y’`.» —directory / home
Далее, делаем добавочные резервные копии на лентах со 2 по 5 и так далее.
Опция «c» определяет, что мы создаем архивный файл.
Опция «p» сохраняет права доступ.
Опция «N» делает добавочную резервную копию и запоминает файлы новее чем DATE.
Опция «f» говорит, что следующий аргумент будет либо имя архивного файла, либо имя устройства на которое производится запись.
Объясним как мы получили имя файла, который содержит текущую дату: просто поместите команду «date» между обратными кавычками. К основному имени добавляется суффикс «tar» для не сжатых архивов, и суффикс «tar.gz» для сжатых. Так как мы не определяем конкретное имя для файла резервной копии, то воспользуемся опцией «—label», которая позволяет записать некоторую информацию в архивный файл. В заключении мы определяем, что только файлы из каталога «/home» будут записаны на ленту.
Так как лента это устройство посимвольного ввода, мы не можем определить имя файла. Поэтому, в качестве аргумента для опции «имя файла» программы tar используется просто имя устройства, «/dev/st0». Устройство «/dev/st0» не перематывается после создания резервной копии; поэтому, мы имеем возможность записать на одну ленту несколько сессий. Вы можете, также сказать устройству «/dev/st0», автоматически перемотать ленту после окончания записи резервной копии. При работы с лентой, вы можете использовать следующие команды для перематывания и извлечения ленты из устройства:
[root@deep /]# mt -f /dev/st0 rewind
[root@deep /]# mt -f /dev/st0 offline
ПРЕДОСТЕРЕЖЕНИЕ. Для уменьшения пространства занимаемого tar архивом, резервная копия может быть сжата при помощи опции «z» программы tar. К сожалению, использование этой опции может создать ряд проблем. Из природы работы сжатия следует, что если хотя бы один бит будет испорчен, то и все данные нужные для восстановления будут потеряны. Поэтому рекомендуется не использовать сжатие (опция «z») для создания резервной копии при помощи команды tar.
Если ваша резервная копия не помещается на ленте, то вам надо использовать опцию —multi-volume (-M) для создания многотомных архивов:
[root@deep /]# cd /
[root@deep /]# tar cMpf /dev/st0 /home
Prepare volume #2 for /dev/st0 and hit return:
После того, как вы создали резервную копию, вы должны убедиться, что все OK, используя опцию —compare (-d):
[root@deep /]# cd /
[root@deep /]# tar dvf /dev/st0
Для резервного копирования всей системы используйте следующую команду:
[root@deep /]# cd /
[root@deep /]# tar cpf /archive/full-backup-`date ‘+%d-%B-%Y’`.tar \
—directory / —exclude=proc —exclude=mnt —exclude=archive \
—exclude=cache —exclude=*/lost+found .
Опция «—directory» говорит tar, что до начала резервного копирования надо перейти в следующий каталог (в нашем примере «/»). Опция «—exclude» говорит tar не создавать резервные копии заданных каталогов и файлов. Символ «.», находящийся в конце командной строки говорит tar, что он должен копировать все в текущем каталоге.
ПРЕДУПРЕЖДЕНИЕ. Когда вы создаете резервную копию вашей системы, не включайте в нее псевдофайловую систему «/proc»! Файлы «/proc» не настояшие файлы, это просто файлоподобные ссылки к структуре ядра. Также не включайте каталоги «/mnt», «/archive» и все «lost+found».
Автоматизация задачи резервного копирования при помощи tar
Всегда интересно автоматизировать задачу резервного копирования. Автоматизация предлагает огромные возможности использования вашего Linux сервере для целей, которые вы поставили. Следующий пример, представляет из себя скрипт для резервного копирования, называемый «backup.cron». Этот скрипт написан для запуска на любом компьютере, при этом, вы должны поменять только четыре переменные: COMPUTER, DIRECTORIES, BACKUPDIR и TIMEDIR. Мы считаем, что вы устанавливаете этот сценарий для запуска его в начале месяца для получения полной резервной копии, а затем используете его в течении месяца для получения добавочных копий. В нашем примере, мы создаем резервную копию в каталоге на локальном сервере (BACKUPDIR), но вы можете изменить это для использования ленты на локальном сервере или смонтированной файловой системы NFS.
Создайте скрипт резервного копирования backup.cron (touch /etc/cron.daily/backup.cron) и добавьте в него следующие строки:
Здесь приводится список файлов созданных после недели работы данного скрипта:
[root@deep /]# ls -l /backups/
total 22217
-rw-r—r— 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar
-rw-r—r— 1 root root 6879 Feb 7 11:24 deep-Fri.tar
-rw-r—r— 1 root root 2831 Feb 7 11:24 deep-Mon.tar
-rw-r—r— 1 root root 7924 Feb 7 11:25 deep-Sat.tar
-rw-r—r— 1 root root 11923013 Feb 7 11:24 deep-Sun.tar
-rw-r—r— 1 root root 5643 Feb 7 11:25 deep-Thu.tar
-rw-r—r— 1 root root 3152 Feb 7 11:25 deep-Tue.tar
-rw-r—r— 1 root root 4567 Feb 7 11:25 deep-Wed.tar
drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full
ЗАМЕЧАНИЕ. Каталог в котором вы планируете хранить резервные копии (BACKUPDIR) и каталог , где запоминаете время (TIMEDIR) должны быть созданы до запуска этого скрипта, иначе вы получите сообщение об ошибке.
Если вы не запустили этот скрипт вначале месяца (1 день месяца), добавочным резервным копиям для корректной работы будет нужно время полной воскресной резервной копии. Если вы запускаете скрипт в середине недели, вам нужно создать файл со временем в TIMEDIR. Для этого выполните следующую команду:
[root@deep /]# date +%d%b > /backups/last-full/myserver-full-date
где ваша переменная TIMEDIR, описывающая место хранения даты последней полной резервной копии, а — это имя вашего сервера (например, deep); наш файл времени состоит из одной строки содержащей дату (например 15-Feb).
Сделайте скрипт исполняемым и измените права доступа к нему (755).
[root@deep /]# chmod 755 /etc/cron.daily/backup.cron
ЗАМЕЧАНИЕ. Так как этот скрипт расположен в каталоге «/etc/cron.daily», он будет автоматически выполняться в час ночи каждый день.
Восстановление файлов с tar
Более важным, чем выполнение регулярных резервных копий, является их доступность в момент, когда надо восстановить информацию! Здесь мы рассмотрим методы восстановления файлов, которые были скопированы командой «tar».
Следующая команда будет восстанавливать все файлы из архива «full-backup- Day-Month-Year.tar», который является примером резервной копии нашего каталога «home» и был создан в нашем примере описанном выше. Для восстановления полной резервной копии каталога «home» используйте следующую команду:
[root@deep /]# cd / [root@deep /]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar
Вышеприведенная команда извлекает все файлы, содержащиеся в архиве, сохраняя оригинальные значения владельцев файлов и прав доступа к ним.
Опция «x» обозначает извлечение файлов.
Опция «p» сохраняет права доступа.
Опция «f» указывает на то, что следующим аргументом является имя архива или устройства.
Если вам не надо извлекать все файлы и каталоги из архива, вы можете указать, что вам нужно.
Для задания одного или более файлов, которые вы хотите извлечь из архива используйте следующую команду:
[root@deep]# cd /
[root@deep]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar \
home/wahib/Personal/Contents.doc home/quota.user
Вышеприведенная команда извлекает файлы «/home/wahib/Personal/Contents.doc» и «/home/quota.user» из архива. Если вы хотите посмотреть, какие файлы находятся в архиве, то используйте опцию —list (-t):
[root@deep /]# tar tf /dev/st0
ПРЕДУПРЕЖДЕНИЕ. Если вы имеете в своей системе файлы с установленным битом «постоянства», то используйте команду «chattr +i», так как этот бит не сохраняется при резервном копировании при помощи команды tar.
Тестирование возможности восстановления из резервных копий
Для многих системных администраторов, восстановление файлов из резервной копии редкое действие. Периодическое выполнение проверки возможности восстановления файлов из резервных копий поможет вам выявить проблемы с процедурами резервного копирования, чтобы вы могли скорректировать их до того, как потеряете данные. Некоторое программное обеспечение восстановления файлов некорректно восстанавливает права доступа и владельца файлов. Проверьте атрибуты восстановленных файлов, чтобы они были установлены правильно. Периодически тестируйте возможность полного восстановления системы из ваших резервных копий.
Дополнительная документация
Для получения больших деталей вы можете прочитать следующую страницу
tar (1) — GNU версия утилиты архивирования данных tar
Источник