Linux & Tools
May 31, 2023

Как использовать tar для создания резервных копий в Linux

Введение

Бывают такие ситуации, что некорректно отредактировали какой-нибудь конфигурационный файл, попросту нечаянно удалили или просто хотите сделать backup нужной директории для своего спокойствия
В данной заметке разберем два простых способа из множества вариантов backup, будем использовать tar и cron для запуска нашего backup по расписанию


Способ первый, простой, ручками, для разового backup директорий с помощью Tar

Для начала создадим директорию куда будут складываться наши backup файлы (вы можете использовать любую удобную для вас директорию и имя):

mkdir /backup

Перейдем в нее:

cd /backup

Рассмотрим простую команду с помощью Tar, которая создаст и сожмет нам архив, с сохранением информации о правах на примере директории /etc:

tar -zcfp /backup/etc.tar.gz /etc

tar | -ключи | /куда/название_архива.tar.gz | /что_бекапим

  • -z — сжать gzip
  • — создать новый архив
  • -f — использовать указанный файл
  • -p — сохранение информации о правах

Готово, в нашей директории /backup создан архив с названием etc.tar.gz, который вы можете сохранить себе через scp или другими удобными для вас способами на ваш компьютер или сервер, и восстановить после неудачной правки конфигурационных файлов или их удаления.

Со всеми ключами и инструкциями к tar, можно ознакомиться в его man:

man tar

Полезные команды которые вам пригодятся:

Если нам нужно разархивировать наш backup используем команду (в текущую директорию с архивом) :

tar -xf /backup/etc.tar.gz

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

tar -xf /backup/etc.tar.gz -C /backup/temp/

В данной команде ключом -C мы указываем место куда разархивировать наш backup

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

tar -tf /backup/etc.tar.gz

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

tar -xf /backup/etc.tar.gz etc/ssh/sshd_config

Способ второй, автоматический backup по расписанию с помощью Tar и Cron

Создаем директорию, переходим в нее и создаем в ней простой скрипт (названия и место можете использовать любое удобное для вас, я буду делать например backup директории /etc):

mkdir -p /backup/etc
cd /backup/etc
nano etcbackup.sh

Копируем в наш скрипт следующее содержимое:

#!/bin/sh
DATE=`date +%F`;
BACKUPPATH="/backup/etc"; #Замените на свою директорию
find $BACKUPPATH/ -mtime +30 | xargs rm -f; #Удалять backup старше 30 дней
tar -czvpf "$BACKUPPATH/etc.$DATE.tar.gz" /etc/ > /dev/null 2> /dev/null;

Немного о самом скрипте:

  • #!/bin/sh — указываем на интерпретатор, который будет использоваться для выполнения этого скрипта.
  • DATE=date +%F; — задает переменную $DATE и присваивает ей значение текущей даты в формате ГГГГ-ММ-ДД.
  • BACKUPPATH="/backup/etc"; — задает переменную $BACKUPPATH и присваивает ей путь к папке, в которую будут сохраняться резервные копии.
  • find $BACKUPPATH/ -mtime +30 | xargs rm -f; — используется для удаления предыдущих бэкапов, которые старше 30 дней.
  • tar -czvpf "$BACKUPPATH/etc.$DATE.tar.gz" /etc/ — создает новый архив с помощью команды tar с аргументами c, z, v, p, и f, который будет сохранен в $BACKUPPATH с именем etc.$DATE.tar.gz, где $DATE — текущая дата, полученная в первой строке скрипта.
  • >/dev/null 2> /dev/null; — перенаправляет вывод процесса архивации и стандартных ошибок в /dev/null, чтобы они не отображались в консоли и не записывались в лог-файлы.

Скрипт удаляет старые резервные копии и создает новую копию папки /etc со всей ее структурой и содержимым, сохранив также атрибуты и разрешения файлов и затем сохраняет ее в $BACKUPPATH/etc.$DATE.tar.gz.

Сделаем скрипт исполняемым, пользователю который его создавал:

chmod u+x etcbackup.sh

Настраиваем Cron для автоматизации

Создаем задание на выполнение каждый день в 4 утра:

crontab -e

Внизу добавляем данную строку (после того как вставите данную строку, перейдите с помощью Enter на новыйю строку и сохраните):

00 4 * * * nice -19 /backup/etc/etcbackup.sh >/dev/null 2 >> /var/log/cron.log

  • nice -19 — задает приоритетность выполнения скрипта
  • /backup/etc/etcbackup.sh— Скрипт который будет выполнен
  • >/dev/null — указывает, что вывод команды будет перенаправлен в файл /dev/null 2 и будет проигнорирован
  • >> /var/log/cron.log — указывает, что вывод ошибок будет перенаправлен в файл журнала /var/log/cron.log

Вывод

В данной заметке разобрали простенький backup с помощью Tar и Cron, пусть вам не пригодиться из них что-либо восстанавливать, а использовать для своего спокойствия)

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT или посетить мой сайт, откуда и взята статья, спасибо за потраченное время на чтение и доброго времени суток!)