Błąd synchronizacji 23: Czy mogę stwierdzić, które pliki nie zostały przesłane?

32

Uruchomiłem sudo rsync -va --progressz katalogu głównego jednego dysku zewnętrznego do folderu na innym dysku zewnętrznym. Powodem jest to, że dysk źródłowy ma bezbłędny system plików NTFS i nie mam dostępu do komputera z systemem Windows, aby naprawić system plików NTFS.

10 godzin później napisano:

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]

Zapisałem całe wyjście terminala. Na początku jest kilkaset Input/output error (5)plików, których nie potrzebuję w sumie około 2 GB. „Wykorzystanie dysku” przez OSX Finder mówi mi, że źródłem jest 617 miliardów bajtów, a nie 608 jak w powyższym raporcie.

Pytania:

  1. Czy pierwsza część pełnego wyjścia (budowanie listy plików) zdecydowanie mówi Input/output error (5)o KAŻDYM pliku, który nie zostanie skopiowany?
  2. Czy to code 23oznacza, że ​​wszystkie pliki oprócz Input/output error (5)tych zostały pomyślnie skopiowane?
lustro
źródło
1
Prawdopodobnie pomocne: komunikaty o błędach rsync zaczynają się od „rsync:”, więc grep '^rsync: ' outputmogą być pomocne.
barrycarter

Odpowiedzi:

19

23 oznacza tylko (ze strony podręcznika):

23 Częściowe przeniesienie z powodu błędu

W przypadku wszystkiego, czego nie można przenieść, pojawi się komunikat o błędzie. Zauważ, że komunikaty o błędach mogą dotyczyć otwierania lub odczytywania katalogów, więc niekoniecznie zobaczysz komunikat o błędzie dla każdego pliku, którego nie można przenieść.

Jeśli twoje źródło się nie zmieniło, możesz uruchomić je rsyncponownie, -naby zobaczyć, co przeniesie tym razem bez faktycznego wykonania transferu.

O różnicy bajtów, rsyncpodaje rozmiar plików (ile danych można z nich odczytać). Czy na pewno Findernie powiesz w zamian o zużyciu dysku ?

Należy również pamiętać, że NTFS może przechowywać dane w alternatywnych strumieniach lub atrybutach plików i rsynczazwyczaj nie przenosi (nie jest tego świadomy) tych (i to również może stanowić wiele).

Stéphane Chazelas
źródło
Czy mówisz, że WSZYSTKIE dane (bez względu na to, jak uszkodzone), które nie zostały przesłane, zostały wymienione na początku jako Input/output error (5)?
poniedziałek
w odniesieniu do różnicy bajtów: Tak, to prawda. Jestem jednak zdezorientowany, dlaczego różnica między raportem rsync a „użyciem dysku” Findera wynosi 9 miliardów bajtów, ale mogę zidentyfikować tylko 2-3 miliardy bajtów plików, które powiedziały Input/output error (5). Możesz wytłumaczyć?
poniedziałek
1
@themirror, 1-bajtowy plik będzie nadal wymagał kilku kilobajtów przydzielonych na dysku do przechowywania (spróbuj echo > file; du -k filezobaczyć, ile w źródłowym systemie plików, ale w NTFS zwykle jest to 4k). rsyncpowie Ci, że rozmiar jest 1, ale Finder może powiedzieć 4096 dla tego pliku.
Stéphane Chazelas
@themirror, napisz swój pierwszy komentarz, mówię, że dla wszystkiego (zawartość pliku, zobacz moją edycję o alternatywnych strumieniach), których nie można przenieść, pojawi się błąd, ale jeśli nie możesz odczytać katalogu / foo , to oczywiście /foo/bari /foo/bar/baznie zostaną przeniesione.
Stéphane Chazelas
17

Możesz wyciszyć wyjście bez błędów rsync za pomocą -qflagi rsync .

-q, --quiet                 suppress non-error messages

Jeśli ponownie uruchomisz rsync z -qflagą, rsync prawdopodobnie nadal się nie powiedzie, ale przynajmniej tym razem wszelkie komunikaty o błędach, które powodują problem, nie zostaną ukryte pod liniami i liniami komunikatów o stanie przesyłania plików.

Grimtech
źródło
2

Odp: błąd 23 - Najczęstszym powodem tego błędu jest wprowadzenie niewielkiej literówki do źródła rsync. Przejrzyj komendę źródłową i upewnij się, że wszystko sprawdza się względem ls, i szukaj głupich, subtelnych rzeczy, takich jak dodatkowe miejsce lub problem 1-l.

blut swaan
źródło
Wiem, że to głupie, ale nawet wybrałem drogę, by wciąż przekopywać kod, dopóki nie zdałem sobie sprawy, że popełniłem ten głupi błąd. Dziękuję Ci!
rburhum