Cara termudah untuk transfer file cepat antara server linux?

16

Saya perlu mentransfer file dari satu server CentOS ke yang lain. Akan mentransfer file 5MB setiap 10 menit. Tidak perlu enkripsi.

Apa yang mudah adalah untuk transfer file yang cepat?

Apakah ada sesuatu yang lebih sederhana daripada ftp?

Terima kasih!

Alex L
sumber
1
Saya memiliki keyakinan bahwa tar lebih netcat akan menang ... heh heh ...: serverfault.com/questions/18125/...
Evan Anderson
Karena saya tidak perlu enkripsi tetapi membutuhkan kecepatan, saya lebih suka rsync.
Alex L
Saya baru tahu bahwa transfer http tidak memiliki banyak overhead jadi mungkin saya bisa menggunakannya.
Alex L
Jangan edit jawaban ke dalam pertanyaan Anda, sebagai gantinya kirimkan sebagai jawaban. Rolledback.
HopelessN00b
untuk "fast" lihat juga unix.stackexchange.com/questions/48399/…
rogerdpack

Jawaban:

25

rsync

Saya akan menggunakan rsync sebelum saya menggunakan ftp atau tftp.

Lebih banyak opsi dan (menurut pengalaman saya) transfer yang lebih andal.

KPWINC
sumber
1
Saya juga menemukan bahwa rsync biasanya mendapatkan throughput yang lebih tinggi dari apa pun (scp, cifs, nfs)
Ophidian
bagaimana dengan transfer http?
Alex L
@Ophidian Maksud Anda menggunakan rsync sebagai daemon? Kalau tidak, bagaimana bisa lebih cepat daripada scp, karena keduanya menggunakan ssh dan ada enkripsi.
balki
@ binalki Ya, daemon rsync. Itu tidak terlalu cerewet, melakukan pekerjaan yang baik untuk memberi makan data dari disk ke baris, dan itu hanya bekerja sesedikit yang diperlukan untuk menyelesaikan permintaan (berlaku berbeda untuk file teks misalnya).
Ophidian
21

tar over ssh tidak apa-apa, tetapi tar over TCP via netcat adalah tentang biaya rendah yang Anda bisa dapatkan! Jika ini hanya satu kali, coba ini:

Di penerima:

nc -l -p 8989 | tar x

Di pengirim:

tar cf - /source-path | nc (receiving host ip address) 8989

Jika ini adalah sesuatu yang akan Anda lakukan secara teratur, saya mungkin akan menggunakan rsync.

Evan Anderson
sumber
+1 untuk netcat, pisau swiss-army
chmeee
Sama dengan Anda karena tidak membaca Evan. Ha ha ha! Ini sebenarnya bukan hal satu kali. Dia mengatakan akan mentransfer file 5MB setiap 10 menit. Mungkin mengirim melalui kode Morse akan menjadi alternatif yang baik? ;-) (catatan: lelucon pribadi antara Evan dan saya)
KPWINC
8

Dua orang telah menyebutkan tar lebih dari ssh, tetapi tidak mengatakan bagaimana melakukannya. Sebagai catatan, prosedur dasar adalah menjalankan:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Atau, jika Anda ingin memulai transfer dari sisi penerima:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

Keuntungan melakukannya dengan cara ini daripada solusi netcat Evan adalah bahwa semuanya dapat dimulai dari satu komputer; Anda tidak perlu mengoordinasikan dua pemanggilan netcat. Jika Anda ingin ini berjalan secara otomatis, Anda dapat mengatur kunci ssh yang memungkinkan Anda membuat koneksi tanpa frasa sandi, dan menggunakan kunci itu untuk koneksi ini.

ssh memiliki opsi -C untuk mengompresi aliran datanya, atau Anda dapat menggunakan kemampuan kompresi bawaan GNU tar:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync adalah pilihan lain, tetapi setelan kuatnya adalah memperbarui file yang sudah ada pada sisi penerima. Saya menemukan ini lebih lambat daripada scp atau tar / ssh ketika menggunakannya untuk mentransfer file yang belum ada di ujung lainnya.

Kenster
sumber
1
+1 Apa, maksud Anda tidak semua orang secara intuitif tahu cara melakukan tar over ssh? Aneh. :)
chaos
tar, dengan sendirinya, tidak dapat diandalkan - namun tidak ada pemeriksaan integritas namun dengan SSH (TLS) Anda mendapatkan integritas karena kemampuan TLS untuk mendeteksi dalam perubahan penerbangan ke data. Rsync adalah pilihan yang lebih baik dan Rsync karena akan melakukan pemeriksaan integritas yang lebih baik tanpa enkripsi; enkripsi yang dinyatakan OP tidak diperlukan.
Kilo
Pemeriksaan integritas apa yang dibutuhkan tar? Lapisan TCP dan ssh menyediakan transportasi data yang andal. Jika Anda menegaskan bahwa tar itu sendiri dapat memiliki bug, Anda harus memperlakukan rsync dengan cara yang sama. Saya sebenarnya memiliki transfer rsync membeku pada saya karena masalah protokol. Saya tidak ingat pipa tar / untar pernah melakukan itu.
Kenster
6

Saya akan menggunakan scpatau tarlebih ssh, jujur. Enkripsi memang memperlambat segalanya, tetapi kemudahan pengaturan dan penggunaan, keandalan, dan (secara subjektif, tentu saja) keakraban membuat saya bersedia menerima pukulan, kecuali saya benar - benar membutuhkan kecepatan itu.

Anda dapat mempercepat transfer ssh dengan mengatakannya untuk menggunakan cipher yang lebih cepat dari standarnya. Standarnya biasanya 3desdan biasanya bisa Anda lakukan -c des, sehingga jelas akan lebih cepat, dan -c blowfishdirepresentasikan secepat juga, meskipun saya belum mengujinya dengan tepat.

(Kembali pada zaman SSHv1, Anda bisa sering melakukannya -c none, tapi saya kira seseorang memutuskan itu adalah juju yang buruk.)

kekacauan
sumber
4

Jika Anda harus melalui scp / ssh, percobaan saya menunjukkan bahwa cipher tercepat yang diaktifkan secara default hari ini adalah RC4. Anda menentukan cipher melalui ' -c arcfour ' di perintah ssh / scp Anda:

untuk salinan awal:

  • scp -c arcfour -r foo/ desthost:/destdir

untuk pembaruan:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir
allaryin
sumber
3

Rsync adalah cara yang baik untuk dilakukan karena jika Anda menemukan diri Anda mentransfer file yang sama lebih dari satu kali, itu akan mempercepat penyalinan, seperti yang ditunjukkan dengan kutipan ini dari halaman manual.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.
pisau pendakian
sumber
2

FTP cukup sederhana, tetapi cara yang bahkan lebih sederhana adalah dengan membuat share NFS di satu mesin dan memasangnya di yang lain. Kemudian menyalin file akan terdiri dari melakukan cp dari satu direktori ke direktori lain.

Swoogan
sumber
tergantung pada persyaratan. Saya tidak akan menggunakan NFS di Internet misalnya.
Kyle Hodgson
1
Poin bagus. Dalam hal ini saya akan merekomendasikan rsync karena dapat melanjutkan di mana tinggalkan jika terganggu. Juga karena hanya mentransfer delta antara sumber dan tujuan.
Swoogan
pertanyaannya sangat umum, saya suka soulution yang diposting oleh Swoogan, terutama yang penulis sebutkan yang memerlukan solusi paling sederhana dan tidak memerlukan enkripsi
integratorIT
2

Jika Anda ingin kecepatan, Anda bisa menggunakan netcat dan tar. Ini akan lebih cepat daripada ssh, rsync, atau scp di jaringan lokal di mana enkripsi tidak menjadi masalah. Google "netcat tar".

DestinationServer

nc -l -p 7878 | tar -C /target/dir -xzf -

SourceServer

tar -cz /source/dir | nc DestinationServer 7878

Ini jelas mengharuskan netcat untuk diinstal. Google "netcat tar" untuk info lebih lanjut.

robertmoggach
sumber
1

Saya percaya bahwa Anda sudah menyelesaikan masalah Anda tetapi jika ssh Anda bekerja pada port lain (bukan pada port standar 22) Anda dapat menggunakan ini

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / [email protected]: / remote / dir

Catatan: - ganti XXXXX dengan nomor port Anda - ganti 192.16.1.2 dengan IP server jarak jauh yang benar

mangia
sumber