Bagaimana cara me-rsync file besar, dengan sesedikit CPU dan biaya bandwidth mungkin?

13

Saya memiliki file 500 GB yang saya rencanakan untuk mencadangkan dari jarak jauh. File sering berubah. Saya akan rsyncing dari desktop ke server. Keduanya dapat menjalankan rsync client atau server.

Apa perintah yang tepat untuk ini? Yang saya coba sofar telah mengambil selamanya atau hanya bertindak aneh.

Contoh dan hasil:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

Tampaknya bekerja, tetapi hanya jika saya melakukannya dua kali (?!). Juga lambat.

Apakah perintah di atas melakukan checksumming pada kedua komputer, atau hanya pada komputer pengirim? Apakah itu benar?

Johan Allgoth
sumber
File yang besar yang sering berubah? Anda akan mendapatkan hasil yang sangat, sangat mengecewakan dengan rsync ...
Ignacio Vazquez-Abrams
Ada saran lain? Saya harus bisa melakukannya dengan beberapa aplikasi, klien eksklusif Dropbox melakukannya dengan sangat baik. Lihat forums.dropbox.com/topic.php?id=17631
Johan Allgoth
--inplace menyiratkan --partial lihat: linux.die.net/man/1/rsync
Ray Hulha

Jawaban:

12

Tidak akan pernah cepat, karena rsync harus membaca / memeriksa seluruh file, dan membaca 500GB akan memakan waktu lama, kecuali Anda menyimpannya di SSD atau apalah.

Coba rsync -vhz --partial --inplace <file/server stuff>.

-cberarti bahwa checksum seluruh file SEBELUM melakukan transfer, daripada menggunakan timestamp untuk melihat apakah itu berubah, yang berarti membaca seluruh file dua kali. Jika timestamp tidak diubah (seharusnya), maka Anda dapat touchmenjalankan file tersebut sebelum menjalankan rsync.

Jika ini bukan skrip, Anda dapat menambahkan --progresssehingga Anda dapat melihat bagaimana kinerjanya saat berjalan.

Dentrasi
sumber
Ya, saya tahu 'file besar == penanganan panjang'. Tapi saya merasa saya kehilangan sesuatu di sini, lihat komentar di atas. Jika Dropbox dapat melakukannya, kami juga dapat melakukannya! =) Saya tidak mengatakannya, tetapi saya juga mencoba tanpa -c, masih lambat.
Johan Allgoth
2
juga --inplacemenyiratkan--partial
2

Meskipun ini bukan rsync, tergantung pada apa yang Anda coba lakukan ini mungkin bekerja lebih baik. Saya melakukan tugas cadangan serupa dan itu pasti lebih cepat.

Gunakan netcat untuk membuat pipa tar dari satu mesin ke mesin lainnya.

Di mesin sumber Anda:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

Anda sedang membuat tarball mempertahankan izin dan waktu, lalu memasukkannya ke netcat pada port 45454

Di mesin cadangan Anda

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = alamat ip lokal mesin sumber Anda.

Bagi saya, ini bekerja dengan baik. Itu berjalan pada 25-30 MB / s melalui LAN kabel dibandingkan dengan 2-3 MB / s dengan rsync. Kerugiannya adalah: tidak disinkronkan, hanya membuat salinan dari apa yang ada di sumber Anda. Untuk cadangan seperti yang Anda gambarkan - satu file 500GB - ini bisa bekerja dengan sangat baik.

Anda mungkin harus melakukan ini sebagai root untuk menghindari masalah izin, atau Anda mungkin beruntung.

FWIW, saya awalnya belajar tentang ini di sini: http://www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/

SteveLambert
sumber
1
tarlebih baik daripada rsyncketika Anda memiliki banyak file kecil untuk ditransfer. Menggunakan ncjuga meningkatkan kecepatan transfer ketika pada koneksi cepat, karena Anda tidak memiliki overhead SSH-enkripsi (yang saya tidak perlu pada koneksi peer-to-peer)
jornane
0

Untuk menghindari overhead jaringan cukup gunakan protokol rsync dan bukan SSH. Secara default, rsync menggunakan SSH ketika menentukan URL seperti nama host: / path. Gunakan rsync: // hostname / path sebagai gantinya untuk menggunakan protokol rsync yang lebih cepat. Tidak ada trik dengan tar / netcat yang diperlukan dengan cara ini. Algoritma delta rsync harus jauh lebih cepat.

Lihat juga https://gergap.wordpress.com/tag/rsync/ untuk informasi lebih lanjut.

gergap
sumber