У кого-нибудь есть сценарий bash, который выполняет ежедневное / еженедельное / ежегодное резервное копирование, которое я могу использовать с cron.
Обычно резервные копии помещаются в 3 папки. Ежедневное резервное копирование будет содержать только файлы резервных копий этой недели. Еженедельная резервная копия будет содержать только файл еженедельной резервной копии этого месяца, а папка месячной резервной копии будет файлом годовой резервной копии.
Спасибо!
Взгляните на эти инструменты:
Вы можете обнаружить, что эти инструменты удовлетворяют требованиям и устраняют необходимость в скриптах. Я тоже использую скрипты, но они предназначены для определенных ситуаций. Если вам нужны примеры того, что сделали другие люди, два человека опубликовали свои сценарии резервного копирования. Вот.
Резервное копирование исчерпывающе описано на ServerFault. Если вы пытаетесь разработать стратегию резервного копирования, я предлагаю поискать на сайте. Если вы не можете найти ответ на конкретный вопрос, вы можете задать его отдельным вопросом.
Нет, но сделать это очень тривиально. OTOH - совсем не тривиально дать ответ на ваш вопрос на основе предоставленной вами информации.
Конечно, было бы намного проще контролировать тип резервного копирования (ежедневно / еженедельно / ежегодно) и место назначения из crontab, а не из сценария bash (хотя это может быть просто вопросом отправки другого параметра в сценарий has).
Резервные копии не важны по сути - возможность восстановить ваши данные очень важны - поэтому для того, чтобы ваша резервная копия имела какое-либо значение, она должна быть в формате, позволяющем ее восстановить. Мы не можем вам сказать:
1) Which backup format is appropriate for your data
2) what backup tools you have on your system which are scriptable
3) what restore tools you are likely to have access to if you suffer a complete system failure
4) whether you need to support multi-volume / media changes in your backup
например tar и compress доступны почти повсеместно, но не очень надежны. CPIO более надежен, но не поддерживает сжатие.
Предупреждение: взломано за 5 минут и не проверено (у меня не установлен Bash).
#!/bin/bash
#Usage: $0 [Yearly,Monthly,Weekly]
set PROTECTEDFILES = "/etc /usr/home /usr/local/etc"
set BACKUPDIR = "/usr/backups"
set BACKUPTAR = backup-`hostname -s`-`date "+%F"`.tgz
tar czf $BACKUPDIR/$1/$BAKCUPTAR $PROTECTEDFILES
В crontab:
0 0 1 1 * root /root/sbin/my_backup Yearly
0 0 1 * * root /root/sbin/my_backup Monthly
0 0 * * 6 root /root/sbin/my_backup Weekly
Ты можешь использовать Двойственность для этой цели. По сравнению с популярными rsnapshot и rdiff-резервное копирование он все еще активно развивается.
Единственная ошибка заключается в том, что вы не можете создавать ежедневные, еженедельные и ежемесячные резервные копии, но можно создать более простую комбинацию, например «ежедневно, еженедельно» или «еженедельно, ежемесячно» или «ежедневно, ежемесячно» и так далее.
Для этого я рекомендую этот сценарий-оболочку: https://github.com/zertrin/duplicity-backup что значительно упрощает настройку.
Я написал сценарий, который вращает все резервные копии в одной папке, сохраняя X ежедневных, Y еженедельных и Z ежемесячных резервных копий.
Беру все бэкапы в папки
/root/backup/YYYYMMDD
ежедневно.
Затем у меня есть следующий вращающийся скрипт:
#!/bin/bash
echo > /root/keep.txt
#writing dates of the backups that should be kept to the array
for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
DW=$(date +%-W)
for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
#writing the array to file keep.txt line by line
for i in ${!keep[@]}; do echo $i >> /root/keep.txt; done
#delete all files that not mentioned in keep.txt
cd /root/backup
ls -1 /root/backup/ | sort /root/keep.txt /root/keep.txt - | uniq -u | xargs rm -rf
rm /root/keep.txt
Это позволит хранить 7 ежедневных, 4 еженедельных, 12 ежемесячных и 5 ежегодных резервных копий.
Я получил большую часть логики от Эта тема