rsync не работает между NTFS / FAT и EXT

13

У меня есть музыка, которую я играю в своей машине, с USB-накопителя FAT32. Папка, в которую я помещаю песни, хранится на моем жестком диске EXT4. Я регулярно добавляю / удаляю / переписываю песни и иногда хочу внести rsyncизменения в флешку. Но по какой-то неизвестной причине (возможно, разрешения?), rsyncКопирует все файлы каждый раз, а не только измененные. Я звоню rsyncкак:

rsync -vrlptgD source dest

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

Wim
источник

Ответы:

17

Ответ Хавьера Риверы работает, но rsync проверяет и сравнивает все контрольные суммы файлов довольно долго. Я обнаружил, что использование следующей опции работает лучше для меня:

rsync -rtv --modify-window=1 /source /dest

--modify-window=1Переключатель позволяет для дисперсии ± 1s на временные метки. Если эта опция включена, сравнение временных меток будет более мягким и позволит взглянуть на незначительные различия во времени между файловыми системами NTFS / FAT и Unix.

Источник (гер): http://www.kai-hildebrandt.de/tutorials/rsync.html

PS: Имейте в виду, что DST будет вызывать полную передачу файлов два раза в год. Смотрите здесь для получения дополнительной информации и возможных решений.

Glutanimate
источник
Это круто. Я также нашел эту опцию --iconvполезной при переходе с исходного linux на dest MacOS
wim
2
По какой-то причине мне нужно использовать, modify-window=2потому что =1все еще копирует все файлы. Копирование из NTFS в FAT32. После этого все нормально.
Люк
Я добавил --size-onlyфлаг, чтобы пропустить файлы, которые соответствуют по размеру
alexandre1985
1
@ alexandre1985: Это пропустит файлы, которые изменяют их содержимое, но не их размер. Вы должны использовать его только в том случае, если вы хотите создавать резервные копии файлов, которые всегда меняют размер при изменении содержимого, например, потому что данные только добавляются к ним, но никогда не перезаписываются.
Дэвид Фёрстер
11

Отметки времени в FAT32 слишком отличаются от отметок Unix, чтобы полагаться на них при проверке изменений файлов, также следует использовать ключ -c, он заставит rsync сравнивать все файлы, чтобы обнаружить изменения, а не полагаться на отметки времени. Это будет работать, но медленнее.

Наконец, в вашей команде есть несколько параметров, которые не могут работать с файловыми системами FAT32.

  • -l сохранит ссылки, FAT32 не имеет понятия ссылок
  • -p попытается сохранить разрешение, опять же нет разрешений на FAT32
  • -t попытается сохранить временные метки модификации, на FAT32 есть только одна временная метка
  • -g попытается сохранить групповое владение, снова не поддерживается FAT32
  • -D постарается сохранить специальные файлы и устройства, теперь вы, что приходит сюда.

Как комментарии htorque, неверные параметры не повредят вам, они просто ничего не сделают. Но вы должны добавить ключ -c.

Эта:

rsync -vrc source dest

должно работать (по крайней мере, это работает на моем компьютере).

Хавьер Ривера
источник
3

У меня была похожая проблема под OSX, и ответ Glutanamate не помог. Некоторые файлы отличаются на час; это может быть потому, что я склонен пересекать часовые пояса относительно часто. Другие файлы отключены на день или даже месяц. Я не уверен, почему это так. Контрольная сумма для некоторых файлов с сильно различающимися временными метками показывает, что они действительно идентичны.

В любом случае, похоже, что --size-onlyопция, которая указывает rsyncигнорировать метки времени, будет работать для моих целей. -c/ --checksum(как упомянуто Хавьером) также работает, но занимает немного больше времени. Я рассчитал время, и мне потребовалось около минуты, чтобы сравнить контрольные суммы для ГБ или около того в подкаталоге, с которым я работаю. Конечно, скорость, с которой это происходит, будет зависеть от самого медленного диска в системе; в моем случае это SD-карта в моем телефоне. Однако это было после того, как я уже делал некоторые манипуляции с файлами (включая контрольные суммы), поэтому многие из файлов, возможно, уже были скопированы в кэш-память ОЗУ.

созерцаемое
источник
1

Вам также следует избегать использования популярной опции -a. Моя рекомендация по FAT32

 rsync -vrc --delete --progress --no-p source  destination

--no-p: нет разрешения

--delete: удалить несопоставленные файлы и папку в месте назначения (если вы действительно этого хотите)

--progress: показать прогресс во время передачи. Это хорошо для больших файлов.

Ахмад Юсофан
источник
1
Получите от меня ответ, хотя в дополнение к -vrc, я тоже-vrcz
Антоний
0

Это слишком много флагов (-vrlptgD), которые вы используете. Помните, что rsync - это утилита для Linux, которая не работает эффективно с Fat32 и NTFS.

Вы должны охотиться за трюками, чтобы иметь возможность использовать его.

Пытаться:

rsync -rvh --size-only --progress --delete /path/to/ext4/ /path/to/fat32/

Больше информации здесь

Раман Катпалия
источник