Найти в Дзене
Герман Геншин

Как один bash-скрипт перевернул мой взгляд на бэкапы в Linux: автоматизация, контроль и неожиданные инсайты!

Графические инструменты типа Déjà Dup делают бэкапы на Linux простыми и быстрыми. Но если хочется гибкости и полного контроля, стоит написать свой скрипт для резервного копирования. Такой подход позволяет самому выбирать, что копировать, куда и как часто. К тому же, это отличный повод освоить основы bash ― расскажу, как я сделал свой скрипт и настроил его автозапуск через cron. Используя в скрипте абсолютные пути, вы сможете сохранять копии куда угодно — будь то локальная папка, отдельный раздел или внешний накопитель. Я хотел сделать максимально простой скрипт, но при этом обязательно сохранить все важные директории Linux — на случай, если придется восстанавливать систему. Для этого я взял обычную флешку на 128 ГБ. Ищете флешку, которая не подведёт? Вот лучшие надёжные модели для любых задач. Флешка, внешний диск, отдельный раздел — не принципиально, главное сразу знать точные пути и точки монтирования, чтобы потом не запутаться при написании скрипта. В качестве основы я выбрал rsync
Оглавление

В двух словах

Графические инструменты типа Déjà Dup делают бэкапы на Linux простыми и быстрыми. Но если хочется гибкости и полного контроля, стоит написать свой скрипт для резервного копирования. Такой подход позволяет самому выбирать, что копировать, куда и как часто. К тому же, это отличный повод освоить основы bash ― расскажу, как я сделал свой скрипт и настроил его автозапуск через cron.

Как я сделал свой backup-скрипт и настроил автоматизацию

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

Куда сохранять бэкапы?

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

-2

Топ USB-флешек 2024 года

Ищете флешку, которая не подведёт? Вот лучшие надёжные модели для любых задач.

Как подготовить место для бэкапов

Флешка, внешний диск, отдельный раздел — не принципиально, главное сразу знать точные пути и точки монтирования, чтобы потом не запутаться при написании скрипта.

В качестве основы я выбрал rsync — он идёт почти в каждом дистрибутиве Linux. Убедитесь, что он установлен, или добавьте его через пакетный менеджер.

Я создал на своей флешке папку ‘Backup’. Всё просто: через Проводник нажимаете Ctrl Shift N — или в терминале при помощи lsblk, cd и mkdir.

Что сохранять и как написать свой backup.sh

Чтобы всегда можно было восстановить систему, я сохраняю документы и ключевые системные папки — /home, /etc, /var, /usr/local, /root и /opt. Bash-скрипт удобно сделать в редакторе nano. Я создал backup.sh у себя в домашней папке. Просто копируйте код ниже в свой любимый редактор терминала:

Впишите свои абсолютные пути для BACKUP_ROOT, DEST_DIR, LOG_FILE и TMP_DIR, сохраните и закройте файл (в nano: Ctrl O Enter, затем Ctrl X). Дайте скрипту права на запуск с помощью chmod, проверьте через ls — ищите, чтобы был флаг -x.

-3

Как протестировать скрипт и включить автоматизацию через cron

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

Если при запуске вы увидите ошибки — смотрите, что не так, терминал всё подскажет. Если ошибок нет — появятся сообщения “Начинаю копировать” и “Копирую /home...”, а на флешке уже будут новые папки.

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

Убедившись, что всё работает, я запланировал автоматический запуск скрипта на 20:00 через cron. Команда ls показала наличие задачи, а systemctl status — что cron функционирует без сбоев.

Финальный шаг: проверьте лог-файл и убедитесь, что копирование прошло удачно сразу после 20:00 на следующий день.

Три главных открытия, которые я сделал сам

Этот проект оказался неожиданно интересным и подарил мне три важных инсайта.

Никогда не запускайте скрипт без теста!

Первый скрипт я, как водится, не проверил — и, конечно, он сломался ещё на старте. Причина банальна: неверно оформил переменную DATE. Вместо DATE=“$(date %F)” написал DATE “$(date %F)”, в итоге “command not found” на 10-й строке.

Тестирование помогает быстро найти такие опечатки и ошибки с правами, а ещё — прокачать навык работы с bash и терминалом.

Используйте только абсолютные пути

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

Не игнорируйте комментарии в коде

Комментарии — это ваши подсказки себе на будущее (и другим тоже), чтобы даже через полгода было понятно, зачем нужен тот или иной блок кода. В bash для этого используйте символ # — посмотрите мой скрипт, я старался пояснить все ключевые моменты.

-4

Пройдёт пара месяцев, решите что-то доработать — и без комментариев легко напутать. Не ленитесь писать пояснения, это сэкономит вам немало нервов и времени.

Вот так я автоматизировал бэкапы в Linux с помощью своего bash-скрипта — и по дороге научился многому новому. Да, тут чуть больше мороки, чем в простых графических программах, но если хотите разобраться в bash — такой опыт даст реальную пользу и для вас, и для вашей системы.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: