Menjalankan beberapa thread scp secara bersamaan


11

Menjalankan beberapa thread scp secara bersamaan:

Latar Belakang:

Saya sering mendapati diri saya sering mem- mirror satu set file server, dan termasuk dalam file server ini ada ribuan file 1kb-3kb kecil. Semua server terhubung ke port 1Gbps, umumnya tersebar di berbagai pusat data.

Masalah:

SCP mentransfer file-file kecil ini, SATU demi SATU, dan itu butuh waktu lama, dan saya merasa seperti saya membuang-buang sumber daya jaringan yang indah yang saya miliki.

Larutan?:

Saya punya ide; Membuat skrip, yang membagi file menjadi jumlah yang sama, dan memulai 5-6 scp utas, yang secara teoritis kemudian akan dilakukan 5-6 kali lebih cepat, bukan? Tapi saya tidak punya pengalaman scripting linux!

Pertanyaan:

  • Apakah ada solusi yang lebih baik untuk masalah yang disebutkan?
  • Apakah sudah ada yang seperti ini?
  • Jika tidak, apakah ada seseorang yang akan memberi saya permulaan, atau membantu saya?
  • Jika tidak ke 2, atau 3, di mana akan menjadi tempat yang baik untuk mulai mencari belajar scripting linux? Seperti bash, atau lainnya.

Jawaban:


11

Saya akan melakukannya seperti ini:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

Bergantung pada file yang Anda transfer, masuk akal untuk mengaktifkan kompresi dalam tarperintah:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Mungkin juga masuk akal bahwa Anda memilih cipher yang lebih ramah untuk sshperintah (seperti arcfour): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

Atau gabungkan keduanya, tetapi itu benar-benar tergantung pada apa yang menjadi hambatan Anda.
Jelas rsyncakan jauh lebih cepat jika Anda melakukan sinkronisasi tambahan.


10

Gunakan rsyncsebagai ganti scp. Anda dapat menggunakan rsynclebih sshsemudah scp, dan mendukung "pipelining transfer file untuk meminimalkan latency biaya".

Satu tip: Jika data kompresibel, aktifkan kompresi. Jika tidak, nonaktifkan.


Saya baru saja melakukan satu transfer tadi malam dengan scp dan saya melakukan transfer serupa dengan rsync - sepertinya jauh lebih cepat. Namun, tampaknya masih mentransfer satu file pada suatu waktu - setiap ide bagaimana membuat ini melakukan banyak utas (Melampaui - termasuk 'dan - mengecualikan' banyak direktori melalui skrip; lihat: sun3.org/archives / 280 )
aendrew

Tidak ada gunanya mentransfer banyak file pada saat yang sama mengingat bandwidth terbatas. Saya yakin Anda tidak akan mempertimbangkan perintah ini ketika bandwidth berlimpah. Menghilangkan biaya latensi sudah banyak membantu ketika Anda menangani banyak file kecil. Bahkan jika Anda dapat menyalin beberapa file secara bersamaan, bandwidth terbatas tidak akan mempercepat transfer file Anda.
Joe

1

Saya baru saja akan menyarankan GNO Parallel (yang masih membutuhkan beberapa pekerjaan scripting di pihak Anda), tetapi kemudian saya menemukan pscp (yang merupakan bagian dari pssh ). Itu mungkin hanya sesuai dengan kebutuhan Anda.


1
Tampaknya psshberoperasi secara bersamaan ke beberapa mesin. Saya tidak berpikir itu menerapkan paralelisme tingkat file.
David Schwartz

Saya mungkin harus spesifik - maksud saya pscp.
Rilindo


0

Mungkin tidak berhubungan, tetapi jika Anda menginginkan sesuatu yang lebih nyata, Anda dapat mencoba GlusterFS . Bekerja dengan baik, tetapi membutuhkan penyetelan jika Anda ingin membaca file kecil secara efisien.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.