Btrfs и rsync - PullRequest
       80

Btrfs и rsync

0 голосов
/ 08 сентября 2018

Так что я искал это вверх и вниз, но, должно быть, делал что-то в корне неправильно.Что я хочу сделать:

Я настроил свой NAS для создания снимков моей домашней папки, файловая система - btrfs.Это работает должным образом и использует жесткие ссылки.

Я хочу скопировать весь каталог моментальных снимков для резервного копирования на usb-диск ext4, используя rsync -aH для сохранения жестких ссылок.Но жесткие ссылки не сохраняются после завершения rsync - я приведу минимальный пример, где я rsync файл 2 разных моментальных снимков (проверенных на наличие идентичных Inode) на томе btrfs - просто в другой каталог - который также создает 2 отдельных файла.Я пропускаю опцию rsync, чтобы заставить это работать?Или rsync просто неспособен сделать это?Неправильный инструмент для работы?

1 Ответ

0 голосов
/ 19 сентября 2018

Файлы имеют одинаковый номер инода, но btrfs представляет их в разных (виртуальных) файловых системах. Проверьте вывод «stat», и вы должны увидеть, что устройство отличается. rsync правильно определяет, что это не настоящие жесткие ссылки.

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

Правильный способ добиться того, чего вы хотите, - это выполнить обычную rsync из внутри первого снимка. Затем выполните другой rsync из второго снимка в новый каталог назначения, но укажите опцию --link-dest=<first-dest-dir>. Это создаст новый снимок с жесткими ссылками на старый снимок, где файлы идентичны.

1010 * Е.Г. *

rsync -aH /.snapshot1/ dest1/
rsync -aH --link-dest=dest1/ /.snapshot2/ dest2/
rsync -aH --link-dest=dest2/ /.snapshot3/ dest3/
rsync -aH --link-dest=dest3/ /.snapshot4/ dest4/
rsync -aH --link-dest=dest4/ /.snapshot5/ dest5/
rsync -aH --link-dest=dest5/ /.snapshot6/ dest6/

Вы можете думать об этом как о cp --link dest1 dest2 до rsync (который будет иметь аналогичный эффект, если вы не используете --inplace).

...