rsnapshot: первоначальная резервная копия будет сохранена навсегда?
При создании резервной копии с помощью rsnapshot " [...] мы сначала копируем предыдущую резервную копию в параллельную структуру каталогов, создавая все каталоги и делая жесткие ссылки на все файлы"., Это все хорошо.
Я предполагаю, что это означает, что первоначальная резервная копия будет сохранена навсегда? "Более новые" резервные копии будут указывать (через жесткие ссылки) только на более старую резервную копию, поэтому я предполагаю, что фактический файл, на который указывает любая заданная жесткая ссылка, должен быть сохранен навсегда, чтобы не сломать вещи?
Это предположение верно?
2 ответа
Нет, это не правильно. Если у вас есть несколько жестких ссылок на файл, не имеет значения, какой из них изначально создал файл, файл будет удален только в том случае, если будет удалена последняя ссылка на файл (см. Разницу между жесткой ссылкой, используемой rsnapshot и символическая ссылка) В случае 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
, мовде hourly.1
в hourly.2
, переехать hourly.0
в hourly.1
, "копировать" (создавать жесткие ссылки) из hourly.1
создавать hourly.0
, а затем снова запустите rsync.
Если файл изменяется, rsync "удалит" файл (на самом деле это просто ссылка) hourly.0/myfile.jpg
(данные остаются на диске, так как на него все еще есть две ссылки). Rsync создаст новый файл (ссылка + данные) с новым myfile.jpg
,
Итак, теперь у вас есть один блок данных с одной ссылкой для нового файла, один блок с двумя ссылками на него для старой версии файла.
На следующей итерации удаляет hourly.2
(на одну ссылку меньше для данных старого файла), "копирует" (жесткие ссылки) новый файл (новая ссылка для нового файла. Есть два указателя для данных нового файла и один для данных старых версий.
На следующей итерации удаляется последняя ссылка для старой версии (данные без ссылок, указывающих на нее, файловая система считается свободной и при необходимости перезаписывается), а также три ссылки на новые данные файла.
Если есть ссылка, указывающая на данные (независимо от того, из какого каталога), эти данные остаются на диске. Только после удаления всех ссылок данные могут быть перезаписаны.