Часто простые домашние пользователи хранят данные на единственном диске, в одном экземпляре. Это неоправданно рискованно: если носитель станет нечитаемым, то информация будет безвозвратно утеряна. Поэтому стоит делать бэкапы хотя бы самых важных папок. У меня есть довольно быстрый и удобный способ делать бэкапы.
Раз в несколько месяцев я делаю бэкапы данных. Причём сохраняю бэкапы на стороннем носителе, а не на том, на котором находятся первоисточники. Все данные я разделяю на папки по их принадлежности и архивирую с указанием даты создания в имени файла.
Раньше я делал бэкапы вручную. Но решил автоматизировать процесс из-за большого количества папок и однотипности действий. К примеру, есть у меня набор папок, в которых хранятся данные моих сайтов (исходники, файлы, наработки и т.п.). Все данные организованы в отдельные папки, которые называются как сайты:
Чтобы сделать бэкап, создаю папку "backup" на отдельном носителе и делаю туда архивирование каждой папки. В названия архивов ставлю дату в формате "ГГГГММДД", чтобы была возможность сортировки по возрастанию/убыванию даты через имя файла. Организация сохранённых бэкапов получается такой:
Архивы всегда создаю именно в папках с теми же названиями, что были и в оригинале. Делается это специально, чтобы было легче переносить созданные архивы в хранилище. Если названия папок будут совпадать, то новые архивы будут добавляться к существующим. То есть не надо будет вручную раскладывать их.
Автоматизация бэкапов
Очевидно, что это однотипная работа. А следовательно, её можно запрограммировать. В качестве операционной системы я использую Linux Mint, поэтому решил сделать скрипт на bash. Он запустится на подавляющем большинстве дестрибутивов, потому что не использует какие-либо особо изощрённые функции.
Попробуем сделать такой скрипт. Для этого переходим туда, где лежат папки, содержимое которых надо забэкапить. Создаём файлик "MakeBackup.sh":
Файлу "MakeBackup.sh" даём права на исполнение и пишем внутрь файла:
for i in * do if [ -d "$i" ]; then if [ "$(ls -A $i)" ]; then mkdir -p "backup/$i/" tar zcf "backup/$i/$(date +\%Y\%m\%d).tar.gz" "$i" echo "$i archived" else echo "$i ERROR" fi fi done echo DONE;
Если разобрать скрипт подробнее, то можно заметить, что в нём только две команды: mkdir и tar. Первая "mkdir" создаёт папку для архива, а ключ "-p" заставляет проверять создана ли папка "backup". Вторая команда "tar" делает архив и сжимает его через gzip.
Теперь попробуем запустить этот bash скрипт. Он выдаст в терминал список обработанных папок:
site1.ru archived
site2.ru archived
site3.ru archived
DONE
В процессе работы скрипта создалась папка "backup", а в ней сохранены бэкапы:
Остаётся только перенести эту папку "backup" в хранилище. Там она объединиться с уже существующей папкой "backup" со всеми старыми архивами. В хранилище получится такая организация:
P.S.
Хорошо бы написать скрипт, который бы удалял старые архивы из хранилища, но оставлял парочку самых свежих в каждой из папок.