Rsync Ошибка 23: Могу ли я сказать, какие файлы не были переданы?

32

Я запускал sudo rsync -va --progressиз корня одного внешнего диска в папку на другом внешнем диске. Причина в том, что на исходном диске имеется ошибка NTFS, и у меня нет доступа к ПК с Windows для восстановления NTFS.

10 часов спустя он сказал:

sent 608725204596 bytes  received 19365712 bytes  15902210.53 bytes/sec
total size is 608586212274  speedup is 1.00
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

Я сохранил весь вывод терминала. В начале, есть несколько сотен Input/output error (5)файлов, которые на самом деле мне не нужны, примерно 2 ГБ. «Использование диска» OSX Finder говорит мне, что источником является 617 миллиардов байт, а не 608, как в приведенном выше отчете.

Вопросов:

  1. Первая часть подробного вывода (создание списка файлов) определенно говорит Input/output error (5)о КАЖДОМ файле, который не будет скопирован?
  2. Означает ли code 23это, что все файлы, кроме тех, Input/output error (5)которые были успешно скопированы?
зеркало
источник
1
Возможно, полезно: сообщения об ошибках rsync начинаются с «rsync:», поэтому grep '^rsync: ' outputмогут быть полезны.
Баррикартер

Ответы:

19

23 только означает (со страницы руководства):

23 Частичная передача из-за ошибки

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

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

О разнице в байтах, rsyncдает вам размер файлов (сколько данных можно прочитать из них). Вы уверены, Finderчто не говорит вам об использовании диска вместо этого?

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

Стефан Шазелас
источник
Таким образом, вы говорите, что ВСЕ данные (независимо от того, насколько повреждены), которые не были переданы, были перечислены в начале как Input/output error (5)?
themirror
относительно разницы байтов: да, это правильно. Я смущен тем, что разница между отчетом rsync и «использованием диска» в Finder составляет 9 миллиардов байт, но я могу определить только 2-3 миллиарда байтов файлов, в которых говорится Input/output error (5). Вы можете объяснить?
themirror
1
@themirror, для 1-байтового файла по-прежнему потребуется несколько килобайт, выделенных на диске для его хранения (попробуйте echo > file; du -k fileпосмотреть, сколько в исходной файловой системе, но в ntfs это обычно 4 КБ). rsyncскажет вам, что размер есть 1, но Finder может сказать вам 4096 для этого файла.
Стефан Шазелас
@themirror, по поводу вашего первого комментария, я говорю, что для всего (содержимое файла, см. мою правку об альтернативных потоках), которое не может быть передано, вы получите сообщение об ошибке, но если вы не можете прочитать каталог / Фу , тогда, очевидно, /foo/barи /foo/bar/bazне будет переведен либо.
Стефан Шазелас
17

Вы можете отключить вывод ошибок без rsync, используя -qфлаг rsync .

-q, --quiet                 suppress non-error messages

Если вы снова запустите rsync с -qфлагом, скорее всего, rsync все равно потерпит неудачу, но, по крайней мере, на этот раз любые сообщения об ошибках, которые вызывают вашу проблему, не будут скрыты за строками и строками сообщений о состоянии передачи файлов.

Grimtech
источник
2

Re: ошибка 23-- Наиболее распространенная причина возникновения этой ошибки - сделать незначительную опечатку, входящую в источник rsync. Посмотрите на исходную команду и убедитесь, что все проверяется на соответствие ls, и найдите глупые тонкие вещи, такие как лишний пробел или проблема 1-l.

Blut Swaan
источник
Я знаю, что это глупо, но я даже продолжал копаться в коде, пока не понял, что совершил эту глупую ошибку. Спасибо!
rburhum