Cara mempercepat rsync untuk file kecil

15

Saya mencoba mentransfer ribuan file kecil dari satu server ke server lain menggunakan perintah berikut:

rsync -zr --delete /home/user/ [email protected]::backup

Saat ini transfer membutuhkan waktu lama (saya belum menghitung waktunya). Apakah ada cara untuk membuat ini lebih cepat? Haruskah saya menggunakan alat lain? Haruskah saya menggunakan rsync lebih dari ssh daripada menggunakan protokol rsync?

Mie
sumber
Apakah ini benar-benar hanya ratusan? Seperti dalam kurang dari beberapa ribu?
Zoredache
Beberapa lebih dari itu ... 475.576 total 9,3GB
Mie
Itu akan menyedot menggunakan hampir semua alat yang bekerja di tingkat filesystem. Saya menduga jika Anda melakukan beberapa profil Anda akan melihat jumlah waktu yang signifikan dihabiskan untuk menelepon stat().
Zoredache
Mengapa tidak -atapi -r?
kamae

Jawaban:

13

Anda perlu menentukan hambatannya. Itu bukan rsync. Mungkin bukan bandwidth jaringan Anda. Seperti yang disarankan @Zoredache , kemungkinan besar jumlah iops yang dihasilkan oleh semua stat()panggilan. Alat sinkronisasi apa pun perlu membuat stat file. Saat menyinkronkan jalankan iostatuntuk memverifikasi.

Jadi pertanyaannya menjadi; bagaimana cara saya mengoptimalkan stat? Dua jawaban mudah:

  1. dapatkan subsistem disk yang lebih cepat (pada kedua host jika perlu) dan
  2. tune sistem file Anda (misalnya untuk mount ext3 dengan noatimedan tambahkan a dir_index).

Jika kebetulan itu bukan iops disk Anda yang merupakan batas maka Anda dapat bereksperimen dengan membelah pohon dir menjadi beberapa pohon yang berbeda dan menjalankan beberapa rsyncs.

Mark Wagner
sumber
1
Terima kasih, saya akan melihat ke dir_index dan melihat bagaimana saya maju (kita sudah menggunakan noatime). Sepertinya disk io adalah penghambat, tetapi kami sudah menjalankan 15k SAS drive di RAID 5. Langkah selanjutnya adalah SSD, tetapi perusahaan hosting kami belum memberikan kami opsi itu.
Mie
5

Kompresi tidak terlalu berguna untuk file kecil (katakanlah, kurang dari 100 byte). Untuk file kecil, terkadang versi terkompresi bisa lebih besar dari aslinya. Coba rsyncperintah tanpa -zbendera.

sshbagus untuk keamanan, tetapi tidak akan membuat transfer lebih cepat. Bahkan, itu akan membuat transfer menjadi lebih lambat karena kebutuhan akan enkripsi / dekripsi.

rsyncmungkin tidak tampak cepat saat pertama kali dijalankan karena ada banyak data untuk ditransfer. Namun, jika Anda berencana menjalankan perintah ini secara berkala, proses selanjutnya mungkin jauh lebih cepat karena rsyncpintar tidak mentransfer file yang tidak berubah.

unutbu
sumber
Jika Anda hanya menggunakan rsyncklien, itu akan menggunakan SSH di belakang layar. Anda harus keluar dari cara untuk menonaktifkan enkripsi saat menggunakan rsync. Lihat: stackoverflow.com/a/1821574/64911
mlissner
1

Versi rsync apa yang Anda gunakan? Apa pun yang lebih lama dari 3.0.0 (di kedua ujungnya) tidak memiliki fitur daftar file tambahan, yang mempercepat transfer besar.

devicenull
sumber
Menggunakan rsync 3.0.5 di kedua server.
Mie
1

Menambahkan -v --progress ke baris perintah rsync Anda

rsync dilakukan dalam 2 langkah:

  1. telusuri lebih dalam semua file di kedua platform untuk membandingkan ukuran dan tanggalnya
  2. lakukan transfer yang sebenarnya

Jika Anda rsync ribuan file kecil di direktori bersarang, bisa jadi rsync menghabiskan sebagian besar waktu ini untuk masuk ke subdir dan menemukan semua file

Jika waktu tidak dihabiskan untuk browsing, waktu mungkin hanya karena penambahan semua latensi memulai setiap transfer file baru.

Alex F
sumber
1

Dalam kasus filesystem ext3 atau ext4 yang terlibat, periksa, apakah keduanya memiliki fitur dir_index diaktifkan! Ini rsync-throughput tiga kali lipat dalam kasus saya.

Lihat detail dalam jawaban saya di: /server//a/759421/80414

alfonx
sumber