Одним из самых простых способов резервного копирования системы является использование сценария оболочки. Например, с помощью сценария можно настроить, какие каталоги следует резервировать, и передать эти каталоги в качестве аргументов утилите tar, которая создает архивный файл. Затем архивный файл можно переместить или скопировать в другое место. Архив также может быть создан на удаленной файловой системе, например, на монтируемой системе NFS.
Утилита tar создает один архивный файл из многих файлов или каталогов. tar также может фильтровать файлы с помощью утилит сжатия, тем самым уменьшая размер архивного файла.
Простой сценарий оболочки
Следующий сценарий оболочки использует tar для создания архивного файла на удаленно смонтированной файловой системе NFS. Имя архивного файла определяется с помощью дополнительных утилит командной строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/bash #################################### # Резервное копирование в NFS. #################################### # Что нужно копировать. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Куда создать резервную копию. dest="/mnt/backup" # Создание имя файла архива. day=$(date +%A) hostname=$(hostname -s) archive_file="$hostname-$day.tgz" # Выведите сообщение о состоянии запуска. echo "Backing up $backup_files to $dest/$archive_file" date echo # Резервное копирование файлов с помощью tar. tar czf $dest/$archive_file $backup_files # Выведите сообщение о завершении работы. echo echo "Backup finished" date # Длинный список файлов в $dest для проверки размеров файлов. ls -lh $dest |
Где:
- $backup_files: переменная, в которой перечислены каталоги, резервные копии которых вы хотите создать. Список должен быть настроен в соответствии с вашими потребностями.
- $day: переменная, содержащая день недели (понедельник, вторник, среда и т.д.). Это используется для создания архивного файла для каждого дня недели, что дает историю резервного копирования за семь дней. Есть и другие способы добиться этого, включая использование утилиты date.
- $hostname: переменная, содержащая короткое имя хоста системы. Использование имени хоста в имени архивного файла дает возможность размещать ежедневные архивные файлы из нескольких систем в одном каталоге.
- $archive_file: полное имя архивного файла.
- $dest: место назначения архивного файла. Каталог должен быть создан и в данном случае смонтирован перед выполнением сценария резервного копирования. Подробности использования NFS см. в разделе ???
- сообщения о состоянии: необязательные сообщения, выводимые на консоль с помощью утилиты echo.
- tar czf $dest/$archive_file $backup_files: команда tar, используемая для создания архивного файла.
- c: создает архив.
- z: фильтрация архива через утилиту gzip, сжимающую архив.
- f: вывод в архивный файл. В противном случае вывод tar будет отправлен в STDOUT.
- ls -lh $dest: необязательный оператор печатает длинный список -l в человекочитаемом формате -h каталога назначения. Это полезно для быстрой проверки размера архивного файла. Эта проверка не должна заменять тестирование архивного файла.
Это простой пример сценария оболочки резервного копирования; однако существует множество опций, которые можно включить в такой сценарий.
Выполнение сценария
Выполнение из терминала
Самый простой способ выполнения приведенного выше сценария резервного копирования - скопировать и вставить его содержимое в файл. Например, backup.sh. Файл необходимо сделать исполняемым:
1 | chmod u+x backup.sh |
Затем из приглашения терминала:
1 | sudo ./backup.sh |
Это отличный способ протестировать сценарий, чтобы убедиться, что все работает так, как ожидалось.
Выполнение с помощью cron
Для автоматизации выполнения скрипта можно использовать утилиту cron. Демон cron позволяет выполнять скрипты или команды в указанное время и дату.
cron настраивается с помощью записей в файле crontab. файлы crontab разделены на поля:
1 | m h dom mon dow command |
Где:
- m: минута, в течение которой выполняется команда, от 0 до 59.
- h: час, в который выполняется команда, от 0 до 23.
- dom: день месяца, в который выполняется команда.
- mon: месяц, в котором выполняется команда, от 1 до 12.
- dow: день недели, в который выполняется команда, от 0 до 7. Воскресенье может быть указано с помощью 0 или 7, оба значения действительны.
- command: команда для выполнения.
Для добавления или изменения записей в файле crontab следует использовать команду crontab -e. Кроме того, содержимое файла crontab можно просмотреть с помощью команды crontab -l.
Чтобы выполнить приведенный выше сценарий backup.sh с помощью cron. Введите в терминале следующую команду:
1 | sudo crontab -e |
Использование sudo с командой crontab -e редактирует кронтаб пользователя root. Это необходимо, если вы создаете резервные копии каталогов, доступ к которым имеет только пользователь root.
Добавьте следующую запись в файл crontab:
1 | 0 0 * * * bash /usr/local/bin/backup.sh |
Теперь сценарий backup.sh будет выполняться каждый день в 12:00 дня.
Сценарий backup.sh необходимо скопировать в каталог /usr/local/bin/, чтобы эта запись выполнялась правильно. Сценарий может находиться в любом месте файловой системы, просто измените путь к сценарию соответствующим образом.
Восстановление из архива
После создания архива важно протестировать его. Архив можно протестировать, перечислив содержащиеся в нем файлы, но лучшим тестом будет восстановление файла из архива.
Чтобы просмотреть список содержимого архива. В терминале введите:
1 | tar -tzvf /mnt/backup/host-Monday.tgz |
Чтобы восстановить файл из архива в другой каталог, введите:
1 | tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts |
Опция -C в tar перенаправляет извлеченные файлы в указанный каталог. В приведенном выше примере файл /etc/hosts будет извлечен в /tmp/etc/hosts. tar воссоздает структуру каталогов, в которых он находится.
Также обратите внимание, что в пути к восстанавливаемому файлу отсутствует лидирующий символ "/".
Чтобы восстановить все файлы в архиве, выполните следующие действия:
1 2 | cd / sudo tar -xzvf /mnt/backup/host-Monday.tgz |
Это приведет к перезаписи файлов, находящихся в настоящее время в файловой системе.
так же вариант создания
mkdir -p /opt/backup
nano /opt/backup/backup.sh
#!/bin/bash
dirs="/home /etc"
out="/opt/backup"
day=$(date +%A-%F)
hostname=$(hostname -s)
archive="$hostname-$day.tgz"
echo "### Directory backup has been started ###"
echo "### Creating backup archive ###"
tar czf $out/$archive $dirs
echo "### Backup successfully completed ###"
date +%A-%F-%T
ls -lh $out
chmod +x /opt/backup/backup.sh
Спасибо, в принципе тоже самое, только немного короче)