Я хочу сделать резервную копию данных, установленных на NTFS-разделе Linux-машины, в NTFS-раздел другой Linux-машины. Локальный диск NTFS монтируется со всеми файлами, принадлежащими root.root, но удаленный диск NTFS монтируется с помощью plugdev (поэтому владельцем файла является root.plugdev).
rsync, по-видимому, не может копировать информацию о владельце / группе и разрешениях в этой ситуации, поэтому я пытался запустить
sudo rsync -rltDvO --delete /ntfs/src/ user@remote.example.com:/ntfs/dest/
Однако каждый раз, когда я запускаю эту команду, она повторно копирует ВСЕ файлы, а не просто передает измененные файлы. Я пробовал использовать флаг --modify-window, но это тоже не помогло.
Обновить: это не повторное копирование всех файлов, а пересчет контрольных сумм (или выполнение другой обработки, вызывающей печать имени файла) для каждого файла. Это противоположно тому, что происходит между дисками e2fs, где имена файлов не печатаются, если с момента последнего rsync не было внесено никаких изменений в источник и место назначения. Я предполагаю, что эта обработка связана с тем, что временные метки недоступны в NTFS (?)
Следующее обновление: Разрешения, безусловно, кажутся его частью: во-первых, использование -u в качестве флага rsync остановило обработку всех файлов в месте назначения, но это не то, что я хочу. Во-вторых, если я использую учетную запись с корневым доступом (и флагами rsync -avz) на удаленном компьютере, я могу изменить временные метки для файлов и каталогов. Однако некоторые файлы продолжают копироваться, и окно --modify-window, кажется, помогает в этом отчасти (но, кажется, не полностью - я все еще экспериментирую, чтобы выяснить, почему).
Согласно моему второму обновлению, разрешения моего пользователя не позволяли мне устанавливать время. Запуск rsync с использованием учетной записи root на конечном компьютере вместе с --modify-window=5
дал мне подходящее поведение. (Если у вас нет корневого доступа к месту назначения, может помочь флаг -u, но только если вы уверены, что никто не будет изменять файлы в удаленной системе.)
В идеале вы всегда хотите использовать robocopy
поскольку он обрабатывает изменения в метках времени (до 2 секунд для FAT). Вы можете запустить внутри Wine, но подключение к удаленному хосту может быть неудобным.
http://technet.microsoft.com/en-us/library/cc733145(WS.10).aspx
редактировать: согласно комментарию Стива, эта функция теперь присутствует в rsync 3.0:
- окно модификации
При сравнении двух временных меток rsync рассматривает временные метки как равные, если они отличаются не более чем на значение окна изменения. Обычно это 0 (для точного совпадения), но в некоторых ситуациях может оказаться полезным установить для него большее значение. В частности, при передаче в файловую систему MS Windows FAT или из нее (которая представляет время с 2-секундным разрешением) полезно использовать --modify-window = 1 (позволяя временам отличаться до 1 секунды).
Еще один лакомый кусочек, который я нашел в таких случаях: стандартное и дневное время. У меня была куча файлов в rsync, которые начали синхронизацию сразу после смены часового пояса через год. Я использовал --modify-window = 3605, и это устранило проблему. Обратной стороной является то, что он будет игнорировать файлы с датой изменения в пределах часа друг от друга. В моем случае файлы менялись только раз в несколько дней или недель, так что это было нормально.