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

В системе Linux регулярное резервное копирование имеет решающее значение для защиты ваших данных, обеспечения их сохранности и упрощения восстановления в случае сбоя. Независимо от того, работаете ли вы с личными файлами, настраиваете среду разработки или управляете серверами, вам нужен надёжный план резервного копирования.
Один из самых простых и гибких способов резервного копирования — написание собственного сценария, который позволяет вам решать, что именно будет копироваться, когда и где это будет храниться. Это также экономит время и снижает риск потери данных.
В этой статье вы узнаете, как создать простой сценарий оболочки, который автоматически создаёт резервные копии важных файлов.
Зачем использовать сценарий резервного копирования?
Использование сценария резервного копирования в Linux даёт системным администраторам больше возможностей и гибкости при защите важных данных.
Вот почему это разумный ход:
- Автоматическое резервное копирование: вы можете запланировать выполнение скрипта с помощью таких инструментов, как cron, чтобы вам не приходилось вручную создавать резервные копии.
 - Полный контроль: вы сами решаете, что создавать в резервных копиях, куда их сохранять и как часто. Будь то ежедневные копии 
/etc, еженедельные снимки домашних каталогов или просто выборочные каталоги. 
Создание сценария резервного копирования важных файлов
Откройте терминал и перейдите в каталог, в котором вы хотите сохранить скрипт (например, в ваш домашний каталог или /usr/local/bin/ для доступа из всей системы).
Создайте файл сценария с помощью текстового редактора, например nano или vim:
nano backup_script.sh
Ниже приведен базовый скрипт, который создает резервные копии файлов в указанный каталог.
#!/bin/bash
# Определите исходный и целевой каталоги
SOURCE_DIR="/home/user/Documents" # Исходный каталог для резервного копирования
BACKUP_DIR="/home/user/backups" # Целевой каталог для резервных копий
# Создайте метку времени для папки с резервными копиями
TIMESTAMP=$(date +'%Y%m%d%H%M%S')
# Создайте новую папку с резервными копиями с меткой времени
BACKUP_FOLDER="$BACKUP_DIR/backup_$TIMESTAMP"
mkdir -p "$BACKUP_FOLDER"
# Скопировать файлы в папку с резервными копиями
cp -r "$SOURCE_DIR"/* "$BACKUP_FOLDER"
# Записать в журнал завершение резервного копирования
echo "Резервное копирование завершено в $TIMESTAMP" >> "$BACKUP_DIR/backup_log.txt"
# Необязательно: удалите резервные копии старше 30 дней
find "$BACKUP_DIR" -type d -name "backup_*" -mtime +30 -exec rm -rf {} \;
Объяснение сценария:
SOURCE_DIR: Каталог, содержащий файлы, которые вы хотите создать резервную копию (например,/home/user/Documents).BACKUP_DIR: Каталог, в котором будут храниться резервные копии (например,/home/user/backups).TIMESTAMPПеременная, которая хранит текущую дату и время для уникальной идентификации каждой папки с резервными копиями.mkdir -p: Создает папку резервной копии с меткой времени.cp -r: Копирует все файлы и подкаталоги из исходного каталога в папку с резервными копиями.- Команда echo регистрирует завершение резервного копирования и добавляет метку времени в файл журнала.
 - Команда find удаляет резервные копии старше 30 дней, чтобы каталог резервных копий не заполнялся старыми файлами.
 
Сохраните и закройте скрипт (в nano нажмите CTRL + X, затем Y для подтверждения и нажмите Enter).
Теперь, когда скрипт написан, вам нужно сделать его исполняемым.
chmod +x backup_script.sh
Теперь вы можете запустить скрипт вручную, выполнив:
./backup_script.sh
Если всё настроено правильно, он должен создать резервную копию ваших файлов в указанном каталоге для резервного копирования.
Запланируйте сценарий резервного копирования С помощью Cron
Чтобы автоматизировать процесс резервного копирования, вы можете запланировать выполнение сценария через определённые промежутки времени с помощью cron, планировщика заданий Linux.
Откройте файл конфигурации cron, набрав:
crontab -e
Добавьте задание cron для запуска скрипта в указанное время. Например, чтобы запускать скрипт резервного копирования каждый день в 2 часа ночи, добавьте в файл cron следующую строку:
0 2 * * * /path/to/backup_script.sh
Теперь скрипт будет запускаться автоматически в указанное время.
Чтобы подтвердить создание резервной копии, вы можете проверить каталог резервных копий и убедиться, что резервные копии создаются должным образом, или просмотреть журналы cron, чтобы убедиться, что сценарий резервного копирования запускается в запланированное время.
grep CRON /var/log/syslog
Добавьте сжатие с помощью tar и gzip
Вместо того чтобы копировать файлы напрямую, вы можете сжать всю резервную копию в архив .tar.gz для экономии места и поддержания порядка.
Модифицированный скрипт со сжатием:
# Определите исходный и целевой каталоги
SOURCE_DIR="/home/user/Documents"
BACKUP_DIR="/home/user/backups"
# Создайте метку времени
TIMESTAMP=$(date +'%Y%m%d%H%M%S')
# Определите имя файла резервной копии
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.tar.gz"
# Создайте каталог резервных копий, если он не существует
mkdir -p "$BACKUP_DIR"
# Создайте сжатый архив исходного каталога
tar -czf "$BACKUP_FILE" -C "$SOURCE_DIR" .
# Запишите в журнал завершение резервного копирования
echo "Сжатая резервная копия создана в $TIMESTAMP" >> "$BACKUP_DIR/backup_log.txt"
# Необязательно: удалите старые резервные копии (более 30 дней назад)
find "$BACKUP_DIR" -type f -name "backup_*.tar.gz" -mtime +30 -exec rm -f {} \;
Отправка резервной копии на удаленный сервер с помощью scp
Если вы хотите хранить резервные копии на удалённом сервере (например, на резервном VPS или NAS), вы можете загрузить архив с помощью команды scp.
Добавьте следующее в конец скрипта:
# Задайте информацию об удалённом сервере REMOTE_USER="ваш_пользователь" REMOTE_HOST="ваш_сервер_ip" REMOTE_DIR="/удаленный/резервная_копия/местоположение" # Отправьте файл резервной копии на удалённый сервер scp "$BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
Настройте аутентификацию по ключу SSH между вашим локальным компьютером и удалённым сервером, чтобы не вводить пароли вручную.
Заключение
Создание сценария резервного копирования в Linux — это простой и практичный способ защитить ваши данные от случайной потери. Запланировав выполнение сценария с помощью cron, вы можете автоматизировать процесс резервного копирования, чтобы важные файлы регулярно сохранялись без необходимости делать это вручную.
Редактор: AndreyEx