Saya baru saja rsync-ed 2.000.000 file (3TB) dari satu RAID ke yang lain.
Saya ingin memastikan data saya utuh.
rsync -c
Butuh waktu sangat lama.
diff
tidak menunjukkan kepada saya apa yang dilakukannya.
Apakah ada alternatif yang (a) lebih cepat, dan (b) akan menunjukkan kepada saya kemajuan sambil membandingkan?
(Saya di Mac, dan brew search diff
memberi saya apgdiff colordiff diffstat diffutils fmdiff libxdiff open-vcdiff podiff rfcdiff vbindiff
bsdiff diffpdf diffuse dwdiff kdiff3 ndiff perceptualdiff rdiff-backup tkdiff wdiff
... akankah salah satu dari ini melakukan pekerjaan?)
rsync
menyalin data sekitar 150MB / s, namundiff
membandingkan hanya 60MB / s ...?rsync
lebih cepat b / crsync
secara default tidak menggunakan checksum untuk membandingkan file, terlihat pada ukuran dan info tanggal. Ketika Anda menggunakanrsync -c
semua file harus memiliki checksum mereka dihitung yang merupakan tugas yang memberatkan, maka mengapa itu bukan default.Jawaban:
edit untuk koreksi & kejelasan opsi - Saya lupa '--brief'
dan tambahkan opsi lain sesuai selera, tergantung pada apa yang Anda bandingkan:
diff -rs akan membaca setiap byte dari dokumen asli dan menyalin, dan melaporkan file yang sama.
Format keluaran diff didefinisikan oleh POSIX, sehingga cukup portabel. Anda mungkin ingin menambahkan sesuatu seperti:
| tee diff-out.1 | grep -v -Ee 'File. * dan. * identik'
Anda bisa menggunakan chksums atau hashes, tetapi Anda harus tetap menyinkronkannya dengan pohon file, jadi Anda akan kembali membaca setiap byte dari setiap file.
EDIT - terlalu lama untuk dikomentari, sebagai tanggapan atas:
Anda mungkin ingin mencoba opsi diff ini: --speed-large-files
Mungkin saja diff yang Anda gunakan tidak cocok dengan file yang sangat besar (misalnya lebih besar dari memori sistem), dan karenanya melaporkan perbedaan antara file yang sebenarnya sama.
Saya pikir ada opsi -h atau 'bdiff' yang lebih baik pada file besar, tetapi saya tidak dapat menemukannya di Fedora. Saya percaya bahwa opsi --speed-large-files adalah penerus dari opsi '-h' "half-hearted bandingkan".
Pendekatan yang berbeda akan mengulangi perintah rsync yang Anda gunakan, dengan '-vin' (verbose, itemize, no_run). Ini akan melaporkan setiap perbedaan yang ditemukan rsync - dan seharusnya tidak ada.
Untuk memindahkan beberapa file, Anda melihat skrip sesuatu seperti:
tapi saya tidak menyarankan melakukan itu. Pertanyaan mendasarnya adalah "bagaimana saya bisa yakin bahwa rsync menyalin hierarki file dengan benar?" dan jika Anda dapat menunjukkan kepada diri sendiri bahwa rsync bekerja dengan baik, dengan diff atau alat lain, maka Anda bisa mengandalkan rsync, daripada mengerjakannya.
rsync -vin akan membandingkan berdasarkan opsi lain apa pun yang Anda berikan. Saya pikir itu default ke checksum, tetapi Anda benar, -c atau --checksum diperlukan untuk itu.
Utilitas diff benar-benar ditujukan untuk file baris teks, tetapi harus melaporkan under -s 'identik' untuk file biner.
--Brief harus menekan output konten file apa pun - permintaan maaf saya karena mengabaikannya sebelumnya - itu dikubur dalam skrip yang jelek.
sumber
mv
setiap file yang ditemukan ke folder "diverifikasi" di root drive, mempertahankan path lengkap? Misalnya, jika/disk1/a/b/c/file1
identik dengan/disk2/a/b/c/file1
, maka pindahkan ke/disk1/verified/a/b/c/file1
. Lalu saya bisa berakhir hanya dengan file yang disalin dengan buruk. (Sejauh ini BANYAK file lebih dari 10GB tidak memverifikasi, yang menakutkan.)rsync -vin
- apakah itu melakukan perbandingan byte-by-byte atau checksum? Saya pikir rsync hanya membandingkan ukuran / tanggal kecuali Anda menambahkan-c
. Dan dari apa yang saya bacaspeed large files
tampaknya hanya membuat perbedaan dengan file non-biner ... atau saya salah?diff
memberi saya hasil dalam bentuk"Files __ and ___ differ"
... dan saya menjalankannyased -e "s/Files /cp -afv /" -e "s/ and / /" -e "s/ differ$//"
untuk mencoba dan menghasilkan skrip untuk menyalin ulang file yang buruk. Tetapi keluaran diff tidak dikutip, jadi tidak bekerja. Bisakah saya mendapatkannya untuk memberi saya jalur kutipan?Berikut adalah
diff
laporan kemajuan berdasarkan jumlah file:Anda akan membutuhkan pv (penampil pipa): http://www.ivarch.com/programs/pv.shtml
Penjelasan:
diff -r
membandingkan direktori dan subdirektori secara rekursif.diff -q
hanya cetak nama file file yang berbeda. jangan cetak perbedaan yang sebenarnya.diff -s
cetak juga nama file file yang tidak berbeda. ini penting untuk informasi kemajuan.pv -l
melaporkan kemajuan berdasarkan jumlah baris.pv -s count
memperkirakan waktu untuk menyelesaikan berdasarkan hitungan.logfile
adalah untuk output cantik. Kalau tidak, output daridiff
akan bercampur dengan garis status daripv
.untuk mendapatkan jumlah file gunakan perintah berikut:
Saring file log untuk file yang berbeda:
Variasi ini akan mencetak file yang berbeda secara waktu nyata sambil juga mencatat semuanya
logfile
:Atau Anda dapat login hanya file yang berbeda:
Catatan: perintah di atas akan melaporkan kemajuan berdasarkan jumlah file. Ini berfungsi baik jika ada banyak file bertubuh kecil. Jika Anda memiliki beberapa file besar maka Anda tidak akan bersenang-senang dengan ini.
Sayangnya saya tidak tahu cara mudah untuk melaporkan kemajuan berdasarkan byte yang dibandingkan.
Jika Anda dapat menemukan kedamaian hanya dengan membandingkan metadata (dan bukan konten sebenarnya dari file) maka Anda dapat menggunakan rsync. Ini akan jauh lebih cepat.
Untuk lebih jelasnya:
sumber
Saya akan melihat menggunakan semacam aplikasi hash untuk memeriksa integritas data. Saya tahu bahwa banyak utilitas menemukan file duplikat menggunakan hash untuk mengidentifikasi duplikat / non-duplikat. Menurut saya ini investigasi yang mungkin bermanfaat.
sumber
Anda dapat menggunakan rdiff-backup untuk itu. Instal di kedua server dan itu akan melakukan perbandingan cerdas checksum dan menyinkronkan apa yang belum ada.
sumber