Cara tercepat untuk menyalin folder yang berisi banyak file melalui SSH

13

Apa cara terbaik untuk menggandakan file di server melalui ssh?

Dalam kasus saya: Saya sedang berbicara tentang menduplikasi toko magento. (15000 file ~ 50MB)

cp -a source destination

Membutuhkan waktu berjam-jam ... (dalam server kasus saya adalah 2,4 Xeon, 2GB RAM)

enloz
sumber

Jawaban:

18

Satu kata: rsync.

Perhatikan bahwa jika Anda berada di tautan lambat, atau server berada di bawah beban berat, alat yang digunakan untuk menyalin tidak akan menjadi hambatan, dan bagaimanapun cara menyalin akan lambat.

Ini akan memberi Anda penggunaan dasar untuk menyalin antara komputer lokal Anda dan server jarak jauh: http://oreilly.com/pub/h/38

Untuk menyalin dari komputer lokal ke server jarak jauh (Anda perlu mengganti jalur, nama pengguna dan alamat host, tentu saja):

rsync -avz -e ssh /path/on/local/computer [email protected]:/path/on/server
  • -a arsip
  • -v bertele-tele
  • -z kompres
  • -e ssh "gunakan terowongan SSH"

Untuk menyalin ke arah lain, alihkan jalurnya (pertama adalah dari , kedua adalah ke ):

rsync -avz -e ssh [email protected]:/path/on/server /path/on/local/computer

Tetapi rsync berguna bahkan untuk menyalin sesuatu di server yang sama:

rsync -av /path-to/copy/from /path_to/copy/to
Piskvor meninggalkan gedung
sumber
2
Catat bahwa @Piskvor meninggalkan -zopsi untuk penyalinan lokal karena ini menambah overhead yang tidak perlu. IMHO, Anda hanya boleh menggunakan -zketika menggunakan rsync di tautan jaringan yang lambat. Jika menyalin sejumlah besar data lebih dari 100Base-T, Anda mungkin baik-baik saja tanpa -z. Dengan koneksi jaringan yang cepat, menggunakan kompresi dapat mematok CPU Anda dan membuat proses lainnya kelaparan.
tomlogic
@tomlogic: Poin bagus - dengan kata lain, jangan gunakan -zuntuk menyalin LAN atau menyalin dalam satu mesin; uji dengan dan tanpa -zuntuk menyalin di Internet (satu atau yang lain mungkin lebih cepat, tergantung pada banyak hal).
Piskvor meninggalkan gedung
1
Saya juga akan meninggalkan kompresi jika Anda tahu file Anda sudah dikompresi, seperti menyinkronkan pohon folder yang penuh dengan JPEG karena tidak ada yang dapat diperoleh.
line break
Catatan: -e sshsekarang default untuk host jarak jauh, jadi tidak perlu untuk melewatkan opsi secara eksplisit.
Piskvor meninggalkan gedung
3

Kata lain: scp

scp /path/on/local/computer [email protected]:/path/on/server

Untuk transaksi sekali pakai, scp berguna. Jika banyak file, maka rsync adalah ide yang bagus. Jika koneksi terputus, rsync dapat mengambil dari tempatnya.

Saya tahu bahwa rsync memiliki kompresi ( -z), dan baru saja belajar bahwa scp juga ( -C).

tomlogic
sumber
Yah, IIRC mereka berdua menggunakan algoritma kompresi SSH, setidaknya untuk operasi jaringan.
Piskvor meninggalkan gedung
0

Dalam pengaturan Anda, rsync mungkin sudah cukup ... tetapi sebagai contoh, jika ada banyak file kecil, mungkin lebih cepat untuk menar file terlebih dahulu daripada mentransfer kemudian melalui rsync. Ini karena mentransfer pemilik, cap waktu, izin terkadang lebih berat daripada file itu sendiri jika file tersebut kecil. Tar akan menggabungkan semua info itu dalam satu file dan rsync akan menyalin blok yang lebih besar.

Atau bahkan lebih baik, jika tidak diperlukan keamanan, gunakan tar dan nc:

Di tempat tujuan, siapkan daemon penerima, buka kompres dan untar:

nc -l -p 12345 | pigz -d | tar xvf - 

Pada sumbernya, tar semuanya, kompres paralel dan kirimkan ke tujuan:

tar cvf - ./ | pigz | nc host 12345
higuita
sumber