Rsync Kesalahan 23: Dapatkah saya tahu file mana yang tidak ditransfer?

32

Saya berlari sudo rsync -va --progressdari root satu drive eksternal ke folder di drive eksternal lain. Alasannya adalah bahwa sumber drive memiliki NTFS kesalahan-ful dan saya tidak memiliki akses ke PC Windows untuk memperbaiki NTFS.

10 jam kemudian dikatakan:

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]

Saya menyimpan seluruh output terminal. Pada awalnya, ada beberapa ratus Input/output error (5)file yang sebenarnya tidak saya butuhkan berjumlah sekitar 2GB. "Penggunaan disk" oleh OSX Finder memberi tahu saya bahwa sumbernya adalah 617 miliar byte, bukan 608 seperti dalam laporan di atas.

Pertanyaan:

  1. Apakah bagian pertama dari output verbose (membangun daftar file) pasti mengatakan Input/output error (5)untuk SETIAP file yang tidak akan disalin?
  2. Apakah ini code 23berarti semua file kecuali Input/output error (5)yang berhasil disalin?
kaca
sumber
1
Mungkin bermanfaat: pesan kesalahan rsync tampaknya dimulai dengan "rsync:", jadi grep '^rsync: ' outputsemoga bermanfaat.
barrycarter

Jawaban:

19

23 hanya berarti (dari halaman manual):

23 Transfer sebagian karena kesalahan

Untuk semua yang tidak dapat ditransfer, Anda akan mendapatkan pesan kesalahan. Perhatikan bahwa pesan kesalahan mungkin tentang membuka atau membaca direktori, jadi Anda tidak perlu melihat pesan kesalahan untuk setiap file yang tidak dapat ditransfer.

Jika sumber Anda belum berubah, Anda dapat menjalankan rsynclagi dengan -nuntuk melihat apa yang akan ditransfer kali ini tanpa benar-benar melakukan transfer.

Tentang perbedaan byte, rsyncmemberi Anda ukuran file (seberapa banyak data dapat dibaca dari mereka). Apakah Anda yakin Findertidak memberi tahu Anda penggunaan disk sebagai gantinya?

Juga perhatikan bahwa NTFS dapat menyimpan data dalam aliran alternatif atau atribut dari file, dan rsyncbiasanya tidak akan mentransfer (tidak mengetahui) mereka (dan itu juga bisa menyebabkan banyak).

Stéphane Chazelas
sumber
Jadi, apakah Anda mengatakan bahwa SEMUA data (tidak peduli seberapa rusak) yang tidak ditransfer terdaftar pada awalnya sebagai Input/output error (5)?
themirror
mengenai perbedaan byte: Ya itu benar. Namun saya bingung mengapa perbedaan antara laporan rsync dan "penggunaan disk" Finder adalah 9 miliar byte, tetapi saya hanya dapat mengidentifikasi 2-3 miliar byte file yang disebutkan Input/output error (5). Bisakah Anda jelaskan?
themirror
1
@themirror, file 1-byte masih akan membutuhkan beberapa kilo-byte yang dialokasikan pada disk untuk menyimpannya (cobalah echo > file; du -k fileuntuk melihat berapa banyak pada sistem file sumber, tetapi pada ntfs, biasanya 4k). rsyncakan memberi tahu Anda bahwa ukurannya adalah 1, tetapi Finder mungkin memberi tahu Anda 4.096 untuk file itu.
Stéphane Chazelas
@themirror, wrt komentar pertama Anda, saya mengatakan bahwa untuk semuanya (konten file, lihat edit saya tentang stream alternatif) yang tidak dapat ditransfer, Anda akan mendapatkan kesalahan, tetapi jika Anda mendapatkan direktori tidak dapat membaca / foo , maka jelas /foo/bardan /foo/bar/baztidak akan ditransfer juga.
Stéphane Chazelas
17

Anda dapat membungkam output non-kesalahan rsync menggunakan -qflag rsync .

-q, --quiet                 suppress non-error messages

Jika Anda menjalankan rsync lagi dengan -qflag, rsync kemungkinan masih akan gagal, tetapi setidaknya kali ini pesan kesalahan apa pun yang menyebabkan masalah Anda tidak akan dikubur di bawah baris dan baris pesan status transfer file.

Grimtech
sumber
2

Re: error 23-- Alasan paling umum untuk memiliki kesalahan ini adalah untuk membuat kesalahan ketik kecil masuk dalam sumber rsync. Lihatlah perintah sumber Anda dan pastikan semuanya memeriksa terhadap ls, dan cari hal-hal halus yang bodoh seperti ruang ekstra atau masalah 1-l.

blaan swaan
sumber
Saya tahu itu konyol, tetapi saya bahkan pergi rute untuk terus menggali kode sampai saya menyadari saya telah membuat kesalahan bodoh ini. Terima kasih!
rburhum