Mentransfer jutaan file dari satu server ke server lain

15

Saya punya dua server. Salah satunya memiliki 15 juta file teks (sekitar 40 GB). Saya mencoba mentransfernya ke server lain. Saya mempertimbangkan untuk zip mereka dan mentransfer arsip, tetapi saya menyadari bahwa ini bukan ide yang baik.

Jadi saya menggunakan perintah berikut:

scp -r usrname@ip-address:/var/www/html/txt /var/www/html/txt

Tetapi saya perhatikan bahwa perintah ini hanya mentransfer sekitar 50.000 file dan kemudian koneksi terputus.

Apakah ada solusi yang lebih baik yang memungkinkan saya untuk mentransfer seluruh koleksi file? Maksud saya menggunakan sesuatu seperti rsyncuntuk mentransfer file yang tidak dapat ditransfer ketika koneksi terputus. Ketika interupsi koneksi lain akan terjadi, saya akan mengetik perintah lagi untuk mentransfer file, mengabaikan yang sudah berhasil ditransfer.

Ini tidak mungkin dengan scp, karena selalu dimulai dari file pertama.

yuli chika
sumber

Jawaban:

33

Seperti yang Anda katakan, gunakan rsync:

rsync -azP /var/www/html/txt/ username@ip-address:/var/www/html/txt

Opsinya adalah:

-a : enables archive mode, which preserves symbolic links and works recursively
-z : compress the data transfer to minimise network usage
-P : to display a progress bar and enables you to resume partial transfers

Seperti yang dikatakan @aim dalam jawabannya, pastikan Anda memiliki jejak di /direktori sumber (keduanya juga baik-baik saja).

Info lebih lanjut dari halaman manual

garethTheRed
sumber
1
Saya sarankan menambahkan -hbendera untuk menggunakan unit yang dapat dibaca manusia. Dan jika Anda ingin lebih banyak kata, Anda memiliki beberapa opsi: -idan / atau -v/ -vv.
nyuszika7h
2
Secara umum sangat sedikit alasan untuk tidak selalu menggunakan rsync alih-alih scp. Penggunaan dasarnya sama dan ia menawarkan banyak fitur praktis tambahan.
pimlottc
jika sshbukan pilihan untuk Anda dan Anda tidak membutuhkan atau menginginkan enkripsi, Anda dapat mencoba skrip saya s3.amazonaws.com/skaperen/rsend
Skaperen
7

Cukup gunakan rsync di atas ssh!

rsync -av username@ip:/var/www/html/txt /var/www/html/

Dari halaman manual:

-a , - arsip : Ini sama dengan -rlptgoD. Ini adalah cara cepat untuk mengatakan bahwa Anda ingin rekursi dan ingin mempertahankan hampir semua hal (dengan -H merupakan kelalaian yang menonjol). Satu-satunya pengecualian untuk kesetaraan di atas adalah ketika --files-from ditentukan, di mana case -r tidak tersirat.

-v , - verbose : Opsi ini meningkatkan jumlah informasi yang Anda berikan selama transfer. Secara default, rsync bekerja secara diam-diam. Satu -v akan memberi Anda informasi tentang file apa yang sedang ditransfer dan ringkasan singkat di bagian akhir. Opsi dua -v akan memberi Anda informasi tentang file apa yang dilewati dan sedikit lebih banyak informasi di bagian akhir. Lebih dari dua opsi -v seharusnya hanya digunakan jika Anda men-debug rsync.

Perhatikan bagaimana saya menggunakan garis miring di akhir folder - ini penting .

tujuan
sumber
Anda mungkin harus menambahkan lebih banyak informasi tentang pentingnya garis miring. Dari rsynchalaman manual: "Garis miring pada sumber mengubah perilaku ini untuk menghindari membuat tingkat direktori tambahan di tujuan. Anda dapat menganggap jejak / pada sumber sebagai makna" salin isi direktori ini "sebagai lawan dari" salin direktori dengan nama ", tetapi dalam kedua kasus atribut dari direktori yang berisi dipindahkan ke direktori yang berisi di tujuan."
nyuszika7h
... dan arti dari bendera -av?
MrWhite
0

Gunakan lftp, ini jauh lebih cepat daripada rsync dan yang terbaik untuk mirroring situs web (banyak file kecil). Itu juga dapat mentransfer secara paralel menggunakan beberapa koneksi:

lftp -u username,password sftp://ip-address -e 'mirror --only-newer --no-dereference --parallel=5 /remote/path/ /destination/;quit'

Jika satu koneksi terputus akan terhubung kembali dan melanjutkan. Jika Anda memutuskan transfer, ia akan melewati file yang ada dan melanjutkan.

http://lftp.yar.ru/

Mihajlo
sumber
0

Cara lain adalah dengan memipip file tar (opsional dikompresi) melalui ssh:

tar -czf - ./* | ssh other.host.foo "cd /tmp; tar -xzf-"
selamat tinggal
sumber