Mempercepat / menghindari penghitungan daftar file rsync

12

Saya menggunakan rsync 3.1.1 untuk tetap menyinkronkan dua disk, salah satunya ada di jaringan dan dipasang sebagai share samba /mnt/ROUTER_WD_2TB/. Ini adalah sumbernya, dengan kecepatan maksimum 30-40MB / s karena keterbatasan jaringan. Yang lain, tujuannya, sudah terpasang secara lokal (puncak 110MB / s) dan /mnt/BACKUP_HITACHI_2TB/.

Saya menggunakan perintah rsync berikut:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Disk berisi banyak file, kebanyakan kecil.

Masalahnya adalah bahwa rsync membutuhkan waktu yang cukup lama (10-20 m) sebelum mulai memindahkan file, saya kira karena harus menghitung daftar file untuk sejumlah besar file kecil. Selama periode ini, utilisasi newtwork berada pada level rendah 200-500KB / dtk, sementara ketika mentransfer file kecepatannya sekitar 40MB / dtk.

Biasanya terjadi bahwa rsync membutuhkan waktu sekitar 15m untuk akhirnya menemukan sesuatu yang harus disalin, kemudian membutuhkan waktu 5 detik untuk menyalinnya, kemudian terus memeriksa beberapa file lain untuk menyalin selama 5 menit. Semua dalam semua, salinan file 5 detik berakhir hingga 20 menit!

Apakah ada tindakan apa pun yang dapat saya lakukan untuk menghindari periode yang lama ini sebelum menyalin file, selain mengecualikan folder? Apa pun jenis "cache" yang dapat saya terapkan sehingga rsync tidak harus membangun kembali semua daftar file dari awal?

AF7
sumber
1
Sudahkah Anda mencoba solusi dari utas ini? unix.stackexchange.com/questions/189878/…
UVV
@ UVV saya belum melakukan itu. saya dapat melakukannya, namun 1) rsync sepertinya tidak menggunakan inti penuh dalam kasus saya, karena beberapa alasan (= Saya tidak yakin apakah saya terbatas pada CPU atau jika batasannya terletak di tempat lain) dan 2) Ini hanya pada CPU dual-core, jadi bahkan jika peningkatannya 2X, masih akan ada margin besar untuk perbaikan.
AF7
Ya ini sepertinya gila bagi saya, mengapa rsync sangat lambat dalam hal ini? Bahkan dengan rsync "--size-only" sepertinya butuh selamanya untuk membangun daftar file tambahannya. Mengapa? Saya dapat memeriksa ukuran file secara manual dan menentukan mana yang telah berubah lebih cepat! Apa yang menghabiskan begitu banyak waktu, dan bagaimana cara mematikan fitur mewah ini? EDIT: Ah, sudahlah, saya punya bendera 'c' yang ditetapkan secara tidak sengaja. Tanpa checksum sangat cepat dalam hal ini.
Ben Farmer

Jawaban:

5

Sejauh rsyncmenyangkut Anda menyalin antara dua pohon file lokal, jadi itu menonaktifkan sebagian besar optimisasinya (termasuk algoritma delta yang terkenal itu). Jika Anda dapat menjalankan rsyncpada server jarak jauh Anda (sehingga Anda mendapatkan skenario client-server yang sebenarnya di seluruh jaringan Anda) Anda akan mendapatkan sejumlah besar daya tarik.

Namun demikian, berikut adalah pilihan lain untuk dipertimbangkan

  1. Menyalin tanpa khawatir menghapus file lama. Ini memungkinkan Anda untuk melakukan transfer yang lebih cepat lebih sering, dan membuang pembersihan lambat untuk mengatakan, hanya sekali sehari:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. Gunakan variasi rsyncalgoritme penghapusan default untuk menghindari pembuatan daftar lengkap file sebelum transfer:

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Membagi direktori tingkat atas menjadi tugas yang terpisah dan menjalankannya secara paralel. Anda mungkin menemukan bahwa jika Anda terikat dengan IO disk maka ini tidak akan membantu, dan untuk memintal piringan, hampir pasti akan memperburuk keadaan.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

Jika tidak ada saran ini membantu maka akan bernilai menambahkan lain --verboseuntuk rsyncmelihat apa yang dilakukannya. Saya menduga itu berderak melalui semua file yang tidak berubah, dan jika Anda memiliki cukup file ini hanya membutuhkan waktu lama.

roaima
sumber
--delete --delete-duringtidak melakukannya untuk saya - yang masih mengirim daftar file tambahan - tetapi --delete --delete-beforelangsung menuju:, building file listyang sepertinya merupakan kemajuan besar. Kupikir.
mlissner
Tidak, itu mundur, saya khawatir. Jika Anda menggunakan --delete-before, kemudian rsynclakukan dua lintasan melintasi pohon file: satu untuk dihapus dan berikutnya untuk menyalin.
roaima
Terima kasih. Dalam hal itu ... cara apa pun untuk menghindari membangun daftar file tambahan?
mlissner
@mlissner tergantung pada beberapa faktor. Sejauh ini yang terbesar adalah apakah Anda melakukan penyalinan lokal-ke-lokal atau lokal-ke-jauh.
roaima
Itu semua lokal untuk lokal bagi saya, meskipun salah satu penduduk setempat adalah disk USB?
mlissner
-2

Anda dapat menggunakan -vvuntuk melihat seluruh log rsync.

namaiiee
sumber
2
Bagaimana ini akan menjawab pertanyaan, yaitu, bagaimana ini akan mempercepat?
Kusalananda
Anda bisa melihat log, yang menunjukkan mengapa butuh begitu banyak waktu untuk memulai rsync, mungkin ada file yang bisa Anda lewati dari rsync untuk mengurangi waktu.
namaiiee