Я использовал модифицированную версию сценария моментального снимка rsync от Майка Рубеля , и у меня возникли некоторые проблемы с его настройкой, чтобы я делал то, что хотел. Его снимки делаются только раз в час; Я надеюсь на снимки каждый час, день, неделю и месяц через crontab.
Вот мой почасовой сценарий:
if [ -d $BUP/temp ] ; then
rm -rf $BUP/temp ;
fi;
rsync -avzO --delete --exclude-from=$CONFIG/rsync-excludes /home/jwhendy/ $DAT/jwhendy/ ;
rsync -avzO --delete --exclude=vault* --link-dest=../vault.hourly.0 $DAT/ $BUP/temp ;
if [ -d $BUP/vault.hourly.2 ] ; then
rm -rf $BUP/vault.hourly.2 ;
fi;
if [ -d $BUP/vault.hourly.1 ] ; then
mv $BUP/vault.hourly.1 $BUP/vault.hourly.2 ;
fi;
if [ -d $BUP/vault.hourly.0 ] ; then
mv $BUP/vault.hourly.0 $BUP/vault.hourly.1 ;
fi;
mv $BUP/temp $BUP/vault.hourly.0 ;
Вот ежедневный сценарий (еженедельные / ежемесячные почти одинаковые):
if [ -d $BUP/vault.daily.2 ] ; then
rm -rf $BUP/vault.daily.2 ;
fi;
if [ -d $BUP/vault.daily.1 ] ; then
mv $BUP/vault.daily.1 $BUP/vault.daily.2 ;
fi;
if [ -d $BUP/vault.daily.0 ] ; then
mv $BUP/vault.daily.0 $BUP/vault.daily.1 ;
fi;
if [ -d $BUP/vault.hourly.2 ] ; then
cp -al $BUP/vault.hourly.2 $BUP/vault.daily.0 ;
fi;
Почасовой скрипт отлично работает. Я борюсь с тем, чтобы переходить с часового на ежедневный (и на ежедневный, еженедельный и т. Д.).
В настоящее время скрипт будет работать следующим образом, скажем, если почасовой скрипт выполняется 6 раз в день, а ежедневный скрипт запускается после этого («hourly.n» сокращенно обозначается как «hr.n», а «b_m» обозначает индивидуальный снимок):
| hour 1 | hour 2 | hour 3 | hour 4 | hour 5 | end of day |
|------------+------------+------------+------------+------------+---------------|
| hr.0 (b_0) | hr.0 (b_1) | hr.0 (b_2) | hr.0 (b_3) | hr.0 (b_4) | hr.0 (b_5) |
| | hr.1 (b_0) | hr.1 (b_1) | hr.1 (b_2) | hr.1 (b_3) | hr.1 (b_4) |
| | | hr.2 (b_0) | hr.2 (b_1) | hr.2 (b_2) | hr.2 (b_3) |
| | | | | | daily.0 (b_3) |
Так как hourly.sh заменяет hourly.2, если он существует, мы видим, что daily.0 впервые создается с b_3, и я потерял b_0, b_1 и b_2. Я бы предпочел делать инкрементный дамп hourly.2 в daily.0 каждый час, прежде чем удалять его. Таким образом, в любой момент времени у меня будут hourly.0, 1 и 2, и daily.0 будет содержать последнюю версию hourly.2 до того, как она будет удалена.
Надеюсь, это имеет смысл.
Я пытался взять строку cp -al $BUP/hourly.2 $BUP/daily.0 ;
и поместить ее в почасовой скрипт. С этим я столкнулся с тремя проблемами:
- кажется, что это занимает намного больше времени, чем один скрипт rsync, хотя технически просто копирует некоторые жесткие ссылки
- , поскольку это жесткие ссылки, в моем случае первая резервная копия будет иметь полный размер (~ 20 ГБ); последующие запуски должны создавать снимки размера обновленных файлов (что он делает). Я ожидаю, что самый большой снимок будет постепенно перемещаться дальше и дальше назад в дереве (в конце концов, в месяц.2). Эта линия
cp -al
, кажется, удерживает ее на отметке daily.0 и никогда не возвращается к daily.1 и т. Д. (Это может быть неправильным пониманием того, как работает du
.
- Я не могу понять, как не разорвать цепочку резервных копий, что заставляет создавать новый снимок (полные 20 ГБ), который необходимо воссоздать. Другими словами, hourly.2 продолжает сбрасывать в daily.0 ... но в конечном итоге
mv $BUP/daily.0 $BUP/daily.1
сделает daily.0 более не существующей. Таким образом, он должен быть воссоздан с нуля при следующем запуске hourly.sh.
В любом случае, надеюсь, понятно, чего я пытаюсь достичь. Мне нужна помощь для перевода каждого сценария (ежечасно, ежедневно, еженедельно) в следующее «ведро» (ежедневно, еженедельно, ежемесячно) без необходимости разрывать цепочку жестких ссылок.
Я также не хотел бы терять значимые снимки по пути, как показано в таблице выше.
Большое спасибо за любые предложения.