Назад | Перейти на главную страницу

Как сделать так, чтобы rsnapshot ссылался на исходные файлы?

Я бы хотел, чтобы rsnapshot не создавал вторую копию всех моих файлов, а вместо этого имел жесткие ссылки на исходные файлы и сохранял только копию изменений.

У меня есть windows и linux server. Я хотел бы, чтобы резервные копии моей системы Linux хранились в системе Windows. Однако я бы также хотел, чтобы пользователям были доступны снимки.

Я запускаю rsnapshot в Linux, чтобы делать снимки. Я не могу разместить корень моментального снимка в Windows, так как я не могу сохранить атрибуты файла в другой файловой системе, поэтому моментальный снимок находится в Linux. Это означает, что теперь мои файлы занимают вдвое больше места (оригинал и снимок).

Поскольку моментальный снимок не является резервной копией, я создаю резервную копию, архивируя свои файлы и отправляя zip-файл в Windows.

Проблема в том, что, поскольку я создаю отдельную резервную копию, мне не нужно хранить две копии одного и того же файла в Linux. Поэтому я бы хотел, чтобы rsnapshot не создавал вторую копию всех моих файлов, а вместо этого имел бы жесткие ссылки на исходные файлы.

Могу ли я просто вручную создать первую папку сохранения / интервала со всеми жесткими ссылками? (cp -al)

Как работает rsnapshot, при первом запуске он создает полную копию.

На следующих хранятся только те файлы, которые были изменены. Если файл не изменился, создается жесткая ссылка на него.

Это означает, что теперь мои файлы занимают вдвое больше места (оригинал и снимок).

Да. У вас есть рабочие файлы и снимки.

Проблема в том, что, поскольку я создаю отдельную резервную копию, мне не нужно хранить две копии одного и того же файла в Linux. Поэтому я бы хотел, чтобы rsnapshot не создавал вторую копию всех моих файлов, а вместо этого имел бы жесткие ссылки на исходные файлы.

Если вы хотите, чтобы rsnapshot не копировал все дерево при первом запуске, проблема в том, что, поскольку это один и тот же файл, он не может обнаружить изменения.

FILE_A   -> DATA1
RFILE_A1 -> DATA2

IF FILE_A == RFILE_A1:
  HARDLINK RFILE_A1 RFILE_A2
ElSE
  COPY FILE_A RFILE_A2

Это основная логика.

Если RFILE_A1 является жесткой ссылкой на FILE_A, проблема в том, что никакие изменения в FILE_A не могут быть обнаружены, поскольку базовые данные такие же.

Простое объяснение: A Hardlink - это имя. Он указывает на данные на диске. Поэтому, когда вы создаете дополнительную жесткую ссылку, вы повторно используете данные на диске. Так что изменения не обнаруживаются.

 

Короткий ответ (TL; DR), нельзя. Вам нужна первая полная копия.

Другой вариант - использовать что-то вроде Git.