Mempercepat rsync di atas seseorang

8

Saya mencadangkan kotak Linux melalui SMB ke NAS. Saya memasang NAS secara lokal dan kemudian saya menghubungkan banyak data (100GB atau lebih). Saya percaya ini membutuhkan waktu yang sangat lama untuk melakukannya: lebih dari 12 jam. Saya diharapkan akan jauh lebih cepat setelah semuanya disalin karena hampir tidak ada yang berubah dari hari ke hari.

Apakah ada cara untuk mempercepat ini?

Saya berpikir bahwa mungkin rsync berpikir itu bekerja dengan hard disk lokal dan menggunakan checksum alih-alih perbandingan waktu / ukuran? Tetapi saya tidak menemukan cara untuk memaksa perbandingan waktu dan tanggal. Ada lagi yang bisa saya periksa?

pupeno
sumber
Saya juga sarankan melihat NFS bukan fo SMB - saya perhatikan (dan mungkin hanya saya) bahwa itu lebih cepat tha Samba
warren
Sayangnya, NAS ini tidak memiliki NFS dan untuk saat ini, saya terjebak dengannya.
pupeno
Periksa kemampuan NAS menggunakan mapper port, seperti nmap. Saya telah mengalami beberapa unit NAS yang menjalankan layanan rsync asli, meskipun tidak disebutkan dalam dokumentasi, dan tidak disebutkan dalam konfigurasi.
Kyle__
Silakan juga periksa utas ini ["rsync ke NAS menyalin semuanya setiap waktu"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis
Silakan juga periksa utas ini [rsync ke NAS menyalin semuanya setiap kali] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Jawaban:

28

Saya pikir Anda memiliki kesalahpahaman tentang algoritma rsync dan bagaimana alat tersebut harus diterapkan.

Keuntungan kinerja Rsync berasal dari melakukan transfer delta - yaitu, hanya memindahkan bit yang diubah dalam file. Untuk menentukan bit yang diubah, file harus dibaca oleh host sumber dan tujuan dan memblokir checksum dibandingkan untuk menentukan bit yang diubah. Ini adalah bagian "ajaib" dari rsync - algoritma rsync itu sendiri.

Ketika Anda memasang volume tujuan dengan SMB dan menggunakan rsync untuk menyalin file dari apa yang "dilihat" Linux sebagai sumber lokal dan tujuan lokal (keduanya dipasang pada mesin itu), sebagian besar versi rsync modern beralih ke mode salin 'seluruh file' , dan matikan algoritme delta copy. Ini adalah "win" karena, dengan algoritma delta-copy aktif, rsync akan membaca seluruh file tujuan (melalui kabel dari NAS) untuk menentukan bit-bit apa dari file yang telah berubah.

"Cara yang benar" untuk menggunakan rsync adalah dengan menjalankan server rsync pada satu mesin dan klien rsync di yang lain. Setiap mesin akan membaca file dari penyimpanan lokalnya sendiri (yang seharusnya sangat cepat), menyetujui bit-bit apa dari file yang telah berubah, dan hanya mentransfer bit-bit itu. Mereka seperti Anda menggunakan jumlah rsync dari 'cp' yang dibuat-buat. Anda dapat mencapai hal yang sama dengan 'cp' dan mungkin akan lebih cepat.

Jika perangkat NAS Anda mendukung menjalankan server rsync (atau klien) maka Anda sedang dalam bisnis. Jika Anda hanya akan memasangnya di mesin sumber melalui SMB maka Anda mungkin juga cukup menggunakan 'cp' untuk menyalin file.

Evan Anderson
sumber
7
Ooo! Downvotes! Saya ingin tahu mengapa Anda menurunkan jawaban, mengingat secara teknis akurat.
Evan Anderson
Saya tidak bisa menjalankan server rsync di NAS, kalau tidak saya akan melakukannya. Ketika tidak menggunakan server rsync, rsync dapat menggunakan checksum atau ukuran dan datetime untuk mengetahui apakah suatu file berubah atau tidak. Menurut halaman manual, ini akan menggunakan ukuran dan datetime secara default, tetapi pengalaman saya adalah bahwa itu tidak melakukan itu dan saya tidak melihat cara untuk memaksanya. Saya hanya melihat cara untuk memaksa checksumming. --checksum: Tanpa opsi ini, rsync menggunakan "pemeriksaan cepat" yang (secara default) memeriksa apakah setiap ukuran dan waktu modifikasi terakhir cocok dengan pengirim dan penerima.
pupeno
Evan, beri saya beberapa menit untuk menulis komentar saya.
pupeno
2
Perilaku apa yang Anda lihat yang memberi tahu Anda bahwa file itu checksumming? Perilaku "pemeriksaan cepat" adalah perilaku default, jadi tidak ada cara untuk "memaksanya". Jika Anda tidak dapat menjalankan rsync di NAS gunakan saja 'cp'. Ini akan secepat atau lebih cepat.
Evan Anderson
Menurut cara saya memahami kerja rsync, itu harus memeriksa tanggal dan waktu lokal, tanggal dan waktu jarak jauh dan jika mereka cocok tidak menyalin file. Yang berarti tidak boleh menyalin 99% dari file, tetapi fakta bahwa dibutuhkan lebih dari 12 jam untuk 60GB atau lebih memberitahu saya bahwa baik menyalin segala sesuatu (yang tampaknya menjadi apa yang Anda maksudkan dengan mengatakan bahwa cp akan lebih cepat) atau itu sebenarnya checksumming, yang berarti itu tidak menyalin semuanya, tetapi mengunduh semuanya.
pupeno
6

Sepertinya cap waktu adalah masalah Anda, karena terkait halaman ini:

http://www.goodjobsucking.com/?p=16

Solusi yang diusulkan adalah menambahkan

--modify-window=1

ke parameter rsync.

Bob
sumber
4

Ya, Anda bisa mempercepatnya. Anda perlu membuat sumber atau tujuan terlihat seperti mesin jarak jauh, katakan dengan menyebutnya sebagai " localhost:".

Anda menyatakan bahwa Anda memasang pangsa SMB secara lokal. Ini membuat sumber atau tujuan terlihat seperti jalur lokal ke rsync. Halaman manual rsync menyatakan bahwa salinan tempat sumber dan tujuan adalah jalur lokal akan menyalin seluruh file. Ini dinyatakan dalam paragraf untuk opsi "--whole-file" di halaman manual. Oleh karena itu, algoritma delta tidak digunakan. Menggunakan localhost:solusi " " akan mengembalikan fungsionalitas algoritma delta dan akan mempercepat transfer.

Bintang laut
sumber
1
Saya bertanya-tanya apa yang masuk akal ... rsyncmenggunakan cap waktu dan tanggal untuk memeriksa apakah suatu file perlu diperbarui atau tidak. Jika perlu pembaruan, maka rsync akan membagi file dalam potongan dan membandingkan checksum. Itu berarti akan membaca seluruh file untuk dapat melakukan itu. Jadi jika Anda tidak memiliki daemon rsync yang berjalan dari jarak jauh, Anda harus mentransfer seluruh file untuk melakukan chunking dan checksumming sehingga Anda dapat langsung mentransfernya. Jadi "solusi" yang diuraikan di sini tidak memberi Anda apa pun dalam skenario ini.
TylerDurden
3

Kupikir aku akan melempar 2pku ke sini.

Adikku baru saja menginstal Buffalo NAS di jaringan kantornya. Dia sekarang melihat backup di luar kantor, sehingga kantor itu harus terbakar, setidaknya dia masih memiliki semua dokumen bisnisnya di tempat lain (ratusan kilometer jauhnya).

Rintangan pertama saya adalah untuk mendapatkan VPS yang dimilikinya (server privat virtual Linux kecil, tidak ada yang terlalu gemuk) untuk dial-in sebagai pengguna VPN ke router broadband-nya (dia menggunakan DrayTek untuk ini) sehingga itu sendiri dapat menjadi bagian dari VPN-nya, sehingga dapat mengakses NAS secara langsung, dengan cara yang aman. Dapatkan itu diurutkan dan bekerja dengan cemerlang.

Masalah selanjutnya adalah mentransfer file dari NAS ke server VPS. Saya mulai dengan melakukan pemasangan Samba dan mengalami masalah yang persis sama (atau bahkan lebih buruk) yang telah Anda jelaskan. Saya melakukan rsync kering-lari dan butuh lebih dari 1 jam 30 menit hanya untuk mengetahui file apa yang akan ditransfer, karena seperti Evan mengatakan, di bawah metode ini, ujung yang lain tidak rsync sehingga harus melakukan banyak pengajuan system call / reads pada Samba mount (melintasi koneksi PPTP / tunnelled, dengan waktu perjalanan sekitar 40ms). Benar-benar tidak bisa digunakan.

Sedikit yang saya tahu bahwa Buffalo sebenarnya menjalankan daemon rsync jadi, sebagai gantinya, seluruh proses kering hanya membutuhkan waktu 1 menit 30 detik untuk 87k file dengan total 50Gb. Jelas, untuk mentransfer 50Gb file (dari NAS yang ada di jalur broadband dengan hanya 100k / detik bandwidth keluar) adalah masalah lain sepenuhnya (ini akan memakan waktu beberapa hari) tetapi, begitu rsync awal selesai, setiap pencadangan tambahan harus grease lightening (datanya tidak akan banyak berubah setiap hari).

Saran saya adalah gunakan NAS yang layak, yang mendukung rsync, untuk alasan yang Evan katakan di atas. Itu akan menyelesaikan semua masalah Anda.

parkamark
sumber
+1 untuk membuat saya sadar bahwa Buffalo NASes menjalankan rsync - terima kasih!
Michael
0

Baunya seperti Anda memiliki NAS yang lebih murah. Bisa juga dari bandwidth jaringan Anda ...

NAS "standar" konsumen benar-benar lemah ketika datang ke IO berat yang adalah apa yang Anda coba lakukan di sini. Ini juga bisa menjadi saklar murah yang menghubungkan PC Anda dan NAS Anda yang tidak cukup kuat untuk menangani semua paket dengan benar.

Antoine Benkemoun
sumber
NAS yang sama, sakelar yang sama, komputer lain, yang menjalankan Windows, mendukungnya, lebih banyak informasi, dalam waktu kurang dari empat jam.
pupeno
0

Ada dua sumber potensial masalah - Anda menggunakan opsi baris comman yang salah atau NAS Anda memiliki masalah dengan timestamping (atau keduanya :-). Silakan periksa utas ini "rsync to NAS copy everything every time" untuk info lebih lanjut.

dtoubelis
sumber