Rsync-avzHP следует за hardlinks вместо того, чтобы копировать их как hardlinks

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

Щелкните правой кнопкой по папке-> Свойства-> безопасность-> Усовершенствованный. Удостоверьтесь, что "Позволяют наследуемые полномочия....", проверяется. Добавьте Пользователя и укажите ее полномочия.

Другой путь состоит в том, чтобы установить полномочия программно. Вот пример кода в C#, который показывает, как установить ACL. Программный путь более гибок: можно ожидать периодически прежде, чем установить права доступа. Следовательно перфект сервера не пострадает.

11
задан 13 April 2017 в 15:14
4 ответа

Параметр -H (или - жесткая ссылка ) команды rsync теоретически будет делать то, что вы вкратце: создать копию вашей файловой системы, сохраняющую жестко связанную структуру оригинала. Как я упоминал в моем ответе на другой аналогичный вопрос , эта опция обречена на неудачу, когда ваша исходная файловая система вырастет за пределы определенного порога сложности жестких ссылок.

Точное расположение этого порога может зависеть от вашего RAM и общее количество жестких ссылок (и, вероятно, ряд других вещей), но я обнаружил, что нет смысла пытаться точно определить это. Что действительно имеет значение, так это то, что порог слишком легко переступить в реальных ситуациях, и вы выиграли » Я знаю, что вы пересекли его , пока не настанет день, когда вы попытаетесь запустить rsync -aH или cp -a , которые терпят неудачу и в конечном итоге терпят неудачу.

Я рекомендую следующее: копируйте файловую систему с жесткими связями как единое целое, а не как файлы. То есть скопируйте весь раздел файловой системы как один большой двоичный объект. Для этого доступен ряд инструментов, но наиболее распространенным из них является dd .

Со стандартной прошивкой ваше NAS-устройство QNAP должно иметь встроенный dd , а также fdisk . С помощью fdisk создайте раздел на целевом диске, размер которого не меньше размера исходного раздела. Затем используйте dd , чтобы создать точную копию исходного раздела на вновь созданном целевом разделе.

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

9
ответ дан 2 December 2019 в 21:52

-l предназначен для символических ссылок, почему он должен что-то делать с жесткими ссылками?

(Извините, это ответ, а не комментарий, у меня еще нет прав на комментарии и этот ответ требовал ответа)

Еще одно примечание, которое должно быть комментарием: это все собственное оборудование или вы используете виртуальную машину, подключенную к сети?

Правка

игнорируйте мой предыдущий комментарий относительно того, почему вы используете жесткие ссылки, Я пропустил комментарий rsnapshot .

Было бы полезно провести тест, который сначала проверяет rsync между двумя локальными каталогами на локальном диске, а затем на вашем удаленном диске. Этот небольшой тест показывает, как работает опция -H . Параметр -i для ls показывает inodes, таким образом показывая, что ссылки были сохранены без дополнительных копий.

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

Последующий тест rsync -avzHP src / хост:

1
ответ дан 2 December 2019 в 21:52

Вы пробовали добавить параметр -l ?

Я знаю, что на странице руководства указано , что он включен в -a , но страницы руководства не всегда точны на 100%.

0
ответ дан 2 December 2019 в 21:52

Это долгий путь, но если вы не можете найти другое решение, я бы предложил попробовать отформатировать USB-накопитель как EXT4. Возможно, проблема в этом: https://bugzilla.samba.org/show_bug.cgi?id=7670

При наличии достаточного количества жестких ссылок в исходной папке и достаточно небольшого места назначения том, копирование с помощью rsync --hard-links может завершиться ошибкой. Rsync не работает из-за исчерпания максимального количества жестких ссылок в месте назначения <...> реальная проблема это не rsync, а основная файловая система.

1
ответ дан 2 December 2019 в 21:52

Теги

Похожие вопросы