Бэкап системы linux tar

Команда tar в Linux — создаём резервные копии быстро и эффективно

Tar — самая удобная, простая для понимания и быстрая команда для архивирования файлов и папок. Поскольку большинство сайтов расположены на серверах с ОС Linux, чаще всего данную команду используют для создания резервных копий сайтов и важных файлов проекта. В данной статье я расскажу про особенности работы с командой tar, выборочное (инкрементное) резервное копирование, автоматизацию создания архивов и многое другое.

Итак, как создать архив в Linux, используя команду tar

Для более полного понимания работы tar, давайте для начала создадим тестовую папку, в которой создадим множество других папок:

А затем наполним её файлами, чтобы нам было с чем экспериментировать:

С помощью этих двух команд мы создали папку test , в ней разместили 100 папок вида dir-001 .. dir-100 и в каждую из 100 папок поместили файлы вида file-A.txt .. file-Z.txt

Теперь давайте выполним команду для архивирования:

В той папке, в которой мы находимся, появится архив test.tgz , в котором будет папка test и все вложенные в неё папки. Флаг » c » внутри команды означает «создать архив», » z » — сжать файлы. Флаг » f » ничего не означает и присутствует во всех командах, связанных с tar .

Если мы захотим посмотреть содержимое нашего архива — можно воспользоваться командой:

которая отобразит содержимое нашего архива в простом формате отображения. Для просмотра подробного списка архива добавим флаг » v «:

А теперь давайте распакуем архив. Для этого сначала есть смысл удалить имеющуюся папку test (используем команду rm -rf test ), а затем используем команду извлечения данных из нашего архива:

После этого архив распакуется и у нас снова появится папка test со всем её содержимым.

Кстати, мы можем извлекать файлы как по одному, так и выборочно. Например, извлекаем 1 файл:

А если мы хотим извлечь несколько файлов, то при использовании параметра —wildcards мы имеем возможность прописать групповые символы ( * и прочие ). Допустим, мы хотим извлечь все файлы с именем file-A.txt из всех 100 наших папок. Для этого используем команду:

Обратите внимание на то, что мы должны указать относительный путь к нашим файлам. Т.е. путь без ‘ / ‘ в котором мы должны указать полный путь, исходя из структуры нашего имеющегося архива.

Групповые символы — это отличная возможность извлекать из больших архивов отдельные группы файлов, например, за доли секунд мы можем извлечь из огромного архива все файлы изображений.

Есть один ньюанс, который нужно понимать при работе с архиватором. Если при создании архива мы укажем абсолютный путь (от корня диска), то при создании архива в него будут включена вся структура каталогов, начиная от корня диска. Чтобы было понятнее, давайте попробуем это на деле. Сначала давайте выполним команду pwd , чтобы у нас отобразился полный путь к текущей рабочей директории. Далее выполняем команду:

Обратите внимание на получившийся архив: все файлы имеют абсолютные пути, например, такого вида: /home/den/Desktop/test/dir-001/file-A.txt

Этот момент обязательно нужно учитывать при создании архивов и использовать именно тот вариант, который необходим для конкретно данной ситуации.

Использование tar вместе с find

Команду tar часто используют вместе с командой find (с помощью которой мы ищем файлы и папки). Например, мы хотим найти в папке все файлы с именем file-A.txt и добавить их внутрь имеющего архива, то это можно сделать командой:

В данном примере флаг » r » используется для инкрементного добавления файлов внутрь имеющегося архива. Отличная и очень удобная на практике возможность! К примеру, мы можем с помощью find находить файлы, созданные не позже опреденённой даты и добавлять их к нашему архиву.

Читайте также:  Microsoft mobile device center windows 10 не запускается

Также, tar умеет считывать данные со стандартного ввода и вывода. Пример:

Когда архиватору tar передается имя файла — (дефис), то под этим имеется ввиду либо стандартный ввод, либо стандартный вывод (и зависит это от контекста).

А ещё, можно использовать tar для передачи файлов через SSH . Пример:

Здесь мы скопировали с удалённой машины папку ‘ ИмяПапки ‘ в текущий рабочий каталог. С помощью SSH мы можем выполнить любой запрос на удаленной машине. Используя это, мы с помощью tar создали архив (флаг » c «) и вывели его не в файл, а в стандартный вывод (флаг » f » с дефисом в качестве аргумента), вследствие чего архив передается через SSH-туннель на локальную машину. В локальной машине мы вызываем tar для того чтобы распаковать архив (флаг » x «), полученный со стандартного ввода.

Автоматическое резервное копирование, с помощью tar и cron

Для создания регулярной резервной копии мы можем настроить планировщик cron . Если у Вас стандартный хостинг без root-доступа, то cron настраивается в панели управления Вашего хостинга. Если же у Вас выделенный сервер, тогда делаем всё стандартным образом через crontab -e

Пример записи cron для резервного копирования 1 раз в неделю:

В данном примере мы раз в неделю, в полночь, архивируем папку (включая всё её содержимое) по адресу /home/den/Desktop/test и размещаем полученный архив внутрь папки /home/den/ , вписывая при этом в имя архива текущую дату.

Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
W e b d e v e l o p m e n t b l o g !

Источник

Резервное копирование в 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 позволяет выводить подробную информацию о ходе работы команды.

Читайте также:  Консольный клиент яндекс диска для windows

Синтаксис для распаковки:

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.

Источник

Бэкап Linux и восстановление его на другом железе

Я работаю в организации с маленьким штатом, деятельность тесно связана с IT и у нас возникают задачи по системному администрированию. Мне это интересно и частенько я беру на себя решение некоторых.

На прошлой неделе мы настраивали FreePBX под debian 7.8, нанимали фрилансера. В процессе настройки оказалось, что сервер (да, я так называю обычный PC) не хочет грузится с HDD при подключенных USB 3G модемах, которые мы используем для звонков на мобильные, колупание BIOSа не помогло. Непорядок. Решил, что нужно перенести его на другую железяку. Так появилось сразу две связанные задачи:

  • сделать бэкап сервера;
  • восстановить бэкап на другом железе.

Гугление не дало внятных ответов, как это сделать, пришлось собирать информацию кусками и пробовать. Всякие acronis’ы отбросил сразу, ибо не интересно.

Опыт общения с linux-системами у меня небольшой: настройка VPN сервера на open-vpn, ftp-сервера и еще пара мелочей. Сам себя я характеризую как человека умеющего читать маны и править конфиги 🙂

Ниже я описываю свой частный случай и почему я поступил именно так. Надеюсь, новичкам будет полезно, а бородатые админы улыбнутся вспомнив молодость.

Начинаем копать теорию:

Второй способ требует наличия внешнего жесткого диска объемом не меньше раздела, который архивируем. Да и что с ним потом делать, непонятно, хранить на полочке? Остановился на tar, чуть сложнее в реализации, нужно будет создать MBR, но время создания/восстановления архива существенно меньше, хранить бэкап проще, полтора гига можно закинуть в облако и скачать, когда будет нужно. Записывать его можно на ту же live-флэшку, с которой буду грузиться.

Читайте также:  Cisco vpn client для mac os
Итак, план действия:

1. Создание бэкапа

Грузимся с live-флэшки, у меня это debian-live-7.8.0-amd64-standard.

Переключаемся на root:

Монтируем раздел, который будем архивировать, у меня это sda1, чтобы случайно не наломать дров, монтируем только для чтения. Посмотреть все свои разделы можно при помощи команд ls /dev | grep sd или df -l

Наша флэшка уже примонтирована, но в режиме только чтения, нужно перемонтировать для чтения-записи, чтобы писать туда бэкап.

Все готово для создания архива

Здесь у нас параметры: c — создать архив, v — выводить информацию о процессе, z — использовать сжатие gzip, p — сохраняем данные о владельцах и правах доступа, f — пишем архив в файл, путь к файлу, —exclude — исключаем из архива каталог (я исключил каталоги с записями разговоров и каталог с бэкапами FreePBX), /mnt/ — каталог, который архивируем.

Ждем… у меня вся подготовка и создание архива заняли 10 минут. Будь флэшка быстрее, уложился бы в 7-8 минут.

Складываем архив в надежное место за пределами офиса.

Восстановление бэкапа на другом железе

2. Размечаем диск, создаем файловую систему

Грузимся с live-флэшки, у меня все та же debian-live-7.8.0.

Переключаемся на root:

Размечаем диск. Мне понравилась утилита с псевдографическим интерфейсом cfdisk. Там все просто и понятно.

Удаляем все имеющиеся разделы. Я создал два новых раздела, один на 490 Gb под / (sda1) и 10 Gb под swap (sda2) в конце диска, т.к. он практически не будет задействован. Проверим типы разделов. Который под систему должен иметь тип 83 Linux, второй — 82 Linux swap / Solaris. Помечаем системный раздел загрузочным (bootable), сохраняем изменения и выходим.

Cоздаем файловую систему на первом разделе.

3. Распаковываем архив.

Монтируем отформатированный раздел

Распаковываем архив прямо с флэшки

Параметр —same-owner — сохраняет владельцев у распаковываемых файлов, x — извлекаем из архива, v — выводить информацию о процессе, p — сохраняем права доступа, f — указываем файл, который распаковываем, C — распаковываем в категорию.

4. Создаем MBR на новом диске.

Чтобы корректно создать загрузочную запись, монтируем рабочие каталоги к нашему будущему root-каталогу, у меня это /mnt. Каталоги /dev и /proc сейчас используются live-системой, используем параметр bind, чтобы они были доступны сразу в двух местах:

Переключаемся на новую систему используя chroot:

Делаем swap-раздел для новой системы:

Подключаем его же:

Чтобы grub работал, нужно указать ему правильные UUID разделов в fstab, сейчас там прописаны разделы предыдущей системы:

Открываем второй терминал (Alt+F2) под root:

И видим текущие UUID разделов.

Вручную переписываем их в fstab переключаясь между Alt+F1 и Alt+F2. Да, муторно, но попытки копировать занимали у меня больше времени, чем переписывание. Сохраняем fstab.

Устанавливаем grub2. У меня один физический диск, поэтому ставим его на sda:

На чистый диск должно встать без ошибок. Обновляем информацию из fstab:

Возвращаемся в Live-систему:

Размонтируем все каталоги:

Если вылазят процессы, которые используют эти каталоги, убиваем их используя fuser.

Все, поехали. Грузимся с жесткого диска:

Здесь статья должна была закончиться, но у меня возникли проблемы с подключением к интернету. Сервер видит сеть, видит компьютеры в ней, но в интернет не ходит… а это как бы важно для телефонии.

5. Тестирование и устранение неполадок.

Показывет интерфейсы eth1 и lo, гугление сказало, что gateway можно прописать только подключению eth0, остальные рассчитаны только на работу внутри сети.

Похоже, отсутствие eth0 вызвано способом переноса системы. Находим файл, который отвечает за нумерацию интерфейсов, смотрим туда:

Действительно, там два активных интерфейса, определенных MAC’ами. Комментируем первый, второму прописываем eth0.

Перезапуск /etс/init.d/networking не помог, поэтому перезагружаемся:

Подключаем донглы, проверяем, все работает.
Спасибо за внимание.

Источник

Оцените статью