При создании резервной копии с помощью rsnapshot "[...] мы сначала реплицируем предыдущую резервную копию в параллельную структуру каталогов, создавая все каталоги и делая жесткие ссылки на все файлы ".. Это все хорошо.
Я полагаю, это означает, что исходная резервная копия будет храниться вечно? «Новые» резервные копии будут указывать (через жесткие ссылки) только на старую резервную копию, поэтому я предполагаю, что фактический файл, на который указывает любая данная жесткая ссылка, должен быть сохранен навсегда, чтобы ничего не сломать?
Верно ли это предположение?
Нет, это не так. Если у вас есть несколько жестких ссылок на файл, не имеет значения, какая из них изначально создала файл, файл будет удален только в том случае, если будет удалена последняя ссылка на файл (см. Разницу между жесткая ссылка как используется rsnapshot и a символическая ссылка) В случае rsnapshot это означает, что каждый каталог резервных копий является самодостаточным, и вы можете удалить все другие каталоги резервных копий (включая исходный), сохранив при этом полный набор данных.
В зависимости от того, как вы настроите rsnapshot, он в конечном итоге удалит исходный набор резервных копий.
TL; DR: нет.
Это зависит от того, что вы определяете как «начальную резервную копию».
Вы сначала создаете резервную копию (hourly.0
), в котором есть все файлы с сегодняшнего дня.
На следующей итерации он «копирует» файлы (cp -L
, просто копирует ссылки на данные), в hourly.1
папка.
Если все файлы такие же, как и раньше, rsync ничего не будет записывать, поэтому у вас есть один блок данных для файла (давайте использовать myfile.jpg
) и две ссылки (hourly.0/myfile.jpg
и hourly.1/myfile.jpg
) указывая на тот же файл на диске.
На следующей итерации без изменений у вас останутся те же данные, просто еще один указатель (hourly.2/myfile.jpg
) указывая на эти данные. Если вы настроили его для хранения 3 резервных копий, он удалит hourly.2
, movde hourly.1
к hourly.2
, шаг hourly.0
к hourly.1
, "копировать" (создавать жесткие ссылки) из hourly.1
создавать hourly.0
, а затем снова запустите rsync.
Если файл изменится, rsync "удалит" файл (на самом деле только ссылку) hourly.0/myfile.jpg
(данные остаются на диске, поскольку на него все еще указывают две ссылки). Затем Rsync создаст новый файл (ссылка + данные) с новым myfile.jpg
.
Итак, теперь у вас есть один блок данных с одной ссылкой для нового файла и один блок с двумя ссылками на него для старой версии файла.
На следующей итерации удаляет hourly.2
(на одну ссылку меньше для данных старого файла), «копирует» (жесткие ссылки) новый файл (новая ссылка для нового файла. Есть два указателя для данных нового файла и один для данных старых версий.
На следующей итерации он удаляет последнюю ссылку для старой версии (данные без ссылок, указывающих на нее, считаются файловой системой свободными и при необходимости будут перезаписаны), а также три ссылки на новые данные файла.
Если есть ссылка, указывающая на данные (независимо от того, из какого каталога), эти данные остаются на диске. Только после того, как вы удалите все ссылки, данные могут быть перезаписаны.