Cara menyalin sejumlah besar file dengan cepat antara dua server

90

Saya perlu mentransfer sejumlah besar mp3 antara dua serve (Ubuntu). Maksud saya sekitar satu juta file yang rata-rata 300 ribu. Saya sudah mencoba scptetapi itu akan memakan waktu sekitar satu minggu. (sekitar 500 KB / s) Jika saya mentransfer satu file dengan HTTP, saya mendapatkan 9-10 MB / s, tapi saya tidak tahu cara mentransfer semuanya.

Apakah ada cara untuk mentransfer semuanya dengan cepat?

nicudotro
sumber
1
Apa jenis jaringan yang Anda miliki di antara server. Saya telah menggunakan crossover GB Ethernet antara 1 NIC di setiap mesin. Aku sangat baik melalui dimasukkan ke dalam konfigurasi yang menggunakan SCP
Jim Blizard
Anda mungkin ingin menyelidiki mengapa scp sangat lambat. Ini mungkin lebih lambat maka hal-hal seperti ftp karena enkripsi tetapi seharusnya tidak lebih lambat.
Zoredache
Saya memiliki 100 mbps di antara mereka. scp lebih lambat pada file kecil (kebanyakan mereka adalah kecil)
nicudotro

Jawaban:

115

Saya akan merekomendasikan tar. Ketika pohon file sudah serupa, rsync berkinerja sangat baik. Namun, karena rsync akan melakukan beberapa analisis lewati pada setiap file, dan kemudian menyalin perubahan, itu jauh lebih lambat daripada tar untuk salinan awal. Perintah ini kemungkinan akan melakukan apa yang Anda inginkan. Ini akan menyalin file-file di antara mesin-mesin, serta menjaga baik izin dan kepemilikan pengguna / grup.

tar -c /path/to/dir | ssh remote_server 'tar -xvf - -C /absolute/path/to/remotedir'

Sesuai komentar Mackintosh di bawah ini adalah perintah yang akan Anda gunakan untuk rsync

rsync -avW -e ssh /path/to/dir/ remote_server:/path/to/remotedir
Scott Pack
sumber
2
+1 Opsi tar jauh lebih efisien untuk sejumlah besar file kecil karena scp dan rsync akan memiliki lebih banyak round trip per file di seluruh jaringan.
Sekenre
3
rsync bekerja lebih baik untuk saya daripada tar
nicudotro
4
Juga, jika Anda memiliki banyak CPU yang tersedia (di kedua ujungnya), tetapi (setidaknya) tautan lambat antara host, mungkin ada baiknya mengaktifkan kompresi (gzip atau bzip) dalam perintah tar.
Vatine
1
@ Jamie: Jika Anda menggunakan ssh-agent, maka itu harus digunakan. Atau gunakan saja opsi '-i' untuk menentukan di mana menemukan kunci privat. Lihat halaman manual untuk detailnya.
Scott Pack
3
@niXar ~Karakter melarikan diri hanya diaktifkan jika SSH menggunakan terminal. Ini tidak terjadi ketika Anda menentukan perintah jarak jauh (kecuali jika Anda melewati -topsi). Jadi kekhawatiran Anda tidak valid.
Gilles
36

Hard drive eksternal dan pengiriman kurir pada hari yang sama.

Adam
sumber
10
Heh heh ... tidak ada teknologi jaringan yang mengalahkan bandwidth sebuah station wagon yang sarat dengan rekaman yang melakukan 90 MPH, eh? (Snicker) Saya berasumsi dia menggunakan LAN karena dia bilang dia mendapatkan 9-10MB / detik dengan HTTP.
Evan Anderson
2
Saya mendapatkan kecepatan semacam itu melalui internet, tetapi saya hanya beruntung di tempat tinggal saya! Jika di LAN, maka lebih murah lagi!
Adam
2
Ahh - tidak melihat lokasi Anda. Ya - Saya mendengar bahwa konektivitas Internet di Korea cukup spektakuler. Terjebak di sini di AS, saya senang mendapatkan 900KB / detik di atas 'net ...
Evan Anderson
1
Ya, tetapi Anda bisa mendapatkan burrito lezat sambil menunggu unduhannya selesai dan hanya ada sekitar tiga restoran Meksiko yang cukup layak bahkan di Seoul ...
Adam
17

Saya akan menggunakan rsync.

Jika Anda mendapatkannya diekspor melalui HTTP dengan daftar direktori yang tersedia, Anda bisa menggunakan argumen wget dan --mirror.

Anda sudah melihat bahwa HTTP lebih cepat daripada SCP karena SCP mengenkripsi semuanya (dan karenanya menghambat CPU). HTTP dan rsync akan bergerak lebih cepat karena mereka tidak mengenkripsi.

Berikut ini beberapa dokumen tentang pengaturan rsync di Ubuntu: https://help.ubuntu.com/community/rsync

Dokumen-dokumen itu berbicara tentang tunneling rsync melalui SSH, tetapi jika Anda hanya memindahkan data di LAN pribadi Anda tidak perlu SSH. (Saya berasumsi Anda menggunakan LAN pribadi. Jika Anda mendapatkan 9-10MB / detik melalui Internet, maka saya ingin tahu koneksi apa yang Anda miliki!)

Berikut adalah beberapa dokumen yang sangat mendasar yang akan memungkinkan Anda untuk mengatur server rsync relatif tidak aman (tanpa ketergantungan pada SSH): http://transamrit.net/docs/rsync/

Evan Anderson
sumber
Walaupun SCP memang menggunakan beberapa CPU untuk mengenkripsi data, saya tidak berpikir bahwa ia memiliki 100% penggunaan CPU, jadi CPU bukanlah hambatan. Saya perhatikan terlalu sering SCP tidak efisien dalam hal transfer cepat.
Cristian Ciupitu
Mengingat bahwa ia melihat 300K untuk SCP dan 9MB untuk HTTP, saya berasumsi bahwa bottleneck terkait SCP (biasanya CPU) mulai berlaku. Tapi tentu saja itu bisa menjadi sesuatu yang lain. W / o mengetahui spesifikasi perangkat keras dari mesin yang bersangkutan sulit untuk dikatakan.
Evan Anderson
1
rsync hampir pasti akan menggunakan ssh untuk transportasi, karena ini adalah perilaku default, sehingga setiap overhead yang disebabkan oleh enkripsi di scp juga akan hadir di rsync
Daniel Lawson
3
"Anda sudah melihat bahwa HTTP lebih cepat dari SCP karena SCP mengenkripsi semuanya" → SALAH. Kecuali dia memiliki server berumur 10 tahun, dia tidak terikat dengan CPU pada tugas ini.
niXar
1
@RamazanPOLAT - Anda memiliki baris perintah yang terlalu panjang. Tentukan pilihan file secara berbeda dan itu akan berfungsi dengan baik untuk Anda. Biasanya Anda bisa menentukan direktori sumber tanpa wildcard di akhir. Anda juga dapat menggunakan argumen --includedan --excludeuntuk mendapatkan lebih banyak nuansa.
Evan Anderson
15

Tanpa banyak diskusi, gunakan netcat, pisau swissarmy jaringan. Tidak ada overhead protokol, Anda langsung menyalin ke soket jaringan. Contoh

srv1$ tar cfv - *mp3 | nc -w1 remote.server.net 4321

srv2$ nc -l -p 4321 |tar xfv -
Icapan
sumber
2
Sayangnya, dari apa yang saya perhatikan netcat sangat tidak efisien bahkan jika tidak seharusnya.
Cristian Ciupitu
Saya tidak mendukung Anda karena ini saran yang sangat, sangat mengerikan. Ada satu jawaban yang benar: rsync. Saya bisa membuat daftar semua alasan mengapa ini lebih baik tetapi tidak cocok di halaman ini, apalagi kotak komentar kecil ini.
niXar
2
@niXar: Jika semua yang Anda ingin lakukan adalah transfer file tunggal (tidak perlu untuk sinkronisasi lebih lanjut), maka tarpipe benar-benar yang Anda butuhkan.
Witiko
2
@niXar netcat baik-baik saja jika Anda melakukan ini di lingkungan yang aman seperti vlan pribadi dan / atau melalui VPN.
Lester Cheung
netcat sangat bagus untuk lingkungan yang aman sampai Anda mendapatkan sedikit membalik dan seluruh aliran 1TB buruk. Saya memiliki skrip yang rumit seperti ini dengan kompresi paralel, progres output (via pv) dan pengecekan integritas via sha512sum, tapi begitu sedikit dibalik, seluruh aliran buruk karena tidak ada cara untuk memulihkannya. Yang benar-benar kita butuhkan adalah protokol ringan seperti torrent streaming untuk lingkungan aman ini ketika kita membutuhkan overhead rendah - sesuatu yang akan memeriksa integritas di tingkat chunk (misalnya, 4MB) dan dapat mengirim ulang chunk ketika salah satu gagal. TCP crc tidak cukup kuat.
Daniel Santos
8

Dengan banyak file jika Anda menggunakan rsync, saya akan mencoba untuk mendapatkan versi 3 atau lebih di kedua ujungnya . Alasannya adalah bahwa versi yang lebih rendah akan menghitung setiap file sebelum memulai transfer. Fitur baru ini disebut rekursi tambahan .

Algoritma incremental-recursion baru sekarang digunakan ketika rsync sedang berbicara dengan versi 3.x lainnya. Ini memulai transfer menjadi lebih cepat (sebelum semua file ditemukan), dan membutuhkan lebih sedikit memori. Lihat opsi --recursive di halaman manual untuk beberapa batasan.

Kyle Brandt
sumber
7

rsync, seperti yang sudah direkomendasikan orang lain. Jika overhead CPU dari enkripsi adalah hambatan, gunakan algoritma CPU yang kurang intensif lainnya, seperti blowfish. Misalnya sesuatu

rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path

janneb
sumber
+1 untuk poin tentang mengubah sandi
Daniel Lawson
CPU tidak akan menjadi hambatan, kecuali Anda memiliki ethernet 10G dan CPU berusia 10 tahun.
niXar
1
komentar saja: cipher "-c arcfour" lebih cepat.
Arman
@niXar: Tetapi jika Anda sudah memiliki tugas mengkonsumsi CPU pada mesin Anda, itu adalah masalah.
Isaac
6

Dalam memindahkan 80 TB data (jutaan file kecil) kemarin, beralih dari rsyncmenjadi tar terbukti lebih cepat , ketika kami berhenti mencoba

# slow
rsync -av --progress /mnt/backups/section01/ /mnt/destination01/section01

dan beralih ke tarsebaliknya ...

# fast
cd /mnt/backups/
tar -cf - section01 | tar -xf - -C /mnt/destination01/ 

Karena server ini berada di LAN yang sama, tujuannya adalah NFS-mount pada sistem sumber, yang melakukan push. Tidak membuatnya lebih cepat, kami memutuskan untuk tidak melestarikan atimefile:

mount -o remount,noatime /mnt/backups
mount -o remount,noatime /mnt/destination01

Grafik di bawah ini menggambarkan perbedaan perubahan dari rsync ke tar yang dibuat. Itu adalah ide bos saya dan kolega saya yang menjalankannya dan membuat artikel yang bagus di blognya . Saya hanya suka gambar-gambar cantik . :)

rsync_vs_tar

Philip Durbin
sumber
Seorang hacker yang saya percaya memberitahu saya "tar over tc bukannya nfs bahkan mungkin lebih cepat". yaitu tar cf - directory | ttcp -t dest_machinedari ftp.arl.mil/mike/ttcp.html
Philip Durbin
Pertanyaan yang tidak terkait, tetapi dari mana grafik itu?
CyberJacob
4

Ketika menyalin sejumlah besar file, saya menemukan bahwa alat-alat seperti tar dan rsync lebih tidak efisien daripada yang seharusnya karena overhead membuka dan menutup banyak file. Saya menulis alat open source yang disebut fast-archiver yang lebih cepat daripada tar untuk skenario ini: https://github.com/replicon/fast-archiver ; ini bekerja lebih cepat dengan melakukan beberapa operasi file bersamaan.

Berikut adalah contoh pengarsip cepat vs. tar pada cadangan lebih dari dua juta file; pengarsip cepat membutuhkan 27 menit untuk mengarsipkan, vs tar mengambil 1 jam 23 menit.

$ time fast-archiver -c -o /dev/null /db/data
skipping symbolic link /db/data/pg_xlog
1008.92user 663.00system 27:38.27elapsed 100%CPU (0avgtext+0avgdata 24352maxresident)k
0inputs+0outputs (0major+1732minor)pagefaults 0swaps

$ time tar -cf - /db/data | cat > /dev/null
tar: Removing leading `/' from member names
tar: /db/data/base/16408/12445.2: file changed as we read it
tar: /db/data/base/16408/12464: file changed as we read it
32.68user 375.19system 1:23:23elapsed 8%CPU (0avgtext+0avgdata 81744maxresident)k
0inputs+0outputs (0major+5163minor)pagefaults 0swaps

Untuk mentransfer file antar server, Anda dapat menggunakan pengarsip cepat dengan ssh, seperti ini:

ssh [email protected] "cd /db; fast-archive -c data --exclude=data/\*.pid" | fast-archiver -x
mfenniak
sumber
3

Saya menggunakan tar melalui netcatpendekatan juga, kecuali saya lebih suka menggunakan socat- lebih banyak kekuatan untuk mengoptimalkan situasi Anda - misalnya, dengan mengutak-atik mss. (Juga, tertawa jika Anda mau, tetapi saya menemukan socatargumen yang lebih mudah diingat karena konsisten). Jadi bagi saya, ini sangat umum akhir-akhir ini karena saya telah memindahkan beberapa hal ke server baru:

host1$ tar cvf - filespec | socat stdin tcp4:host2:portnum

host2$ socat tcp4-listen:portnum stdout | tar xvpf -

Alias ​​adalah opsional.

kenorb
sumber
2

Alternatif lain adalah Unison . Mungkin sedikit lebih efisien daripada Rsync dalam kasus ini, dan agak lebih mudah untuk mengatur pendengar.

Adam D'Amico
sumber
2

Sepertinya mungkin ada beberapa kesalahan ketik di jawaban atas. Ini mungkin bekerja lebih baik:

tar -cf - /path/to/dir | ssh remote_server 'tar -xvf - -C /path/to/remotedir'
retracile
sumber
Saya menemukan bahwa perintah gagal ketika saya menggunakan opsi -f.
user11749
@ user11749: Ada dua opsi -f dalam perintah itu, yang keduanya diperlukan. Apakah Anda berbicara tentang meneruskan -f ke ssh untuk membawanya ke latar belakang?
retracile
2
  • Network File System (NFS) lalu salin dengan apa pun yang Anda suka, mis. Midnight Commander (mc), Nautilus (dari gnome). Saya telah menggunakan NFS v3 dengan hasil yang baik.
  • Samba (CIFS) dan kemudian salin file dengan apa pun yang Anda mau, tapi saya tidak tahu seberapa efisien itu.
  • HTTP dengan wget --mirrorseperti yang disarankan Evan Anderson atau klien http lainnya. Berhati-hatilah untuk tidak memiliki symlink jahat atau file indeks yang menyesatkan. Jika yang Anda miliki hanyalah MP3, Anda harus aman.
  • rsync . Saya telah menggunakannya dengan hasil yang cukup bagus dan salah satu fitur bagusnya adalah Anda dapat menyela dan melanjutkan transfer nanti.

Saya perhatikan bahwa orang lain merekomendasikan menggunakan netcat . Berdasarkan pengalaman saya dengannya, saya dapat mengatakan bahwa ini lambat dibandingkan dengan solusi lain.

Cristian Ciupitu
sumber
2

Berkat jawaban luar biasa Scott Pack (saya tidak tahu bagaimana melakukan ini dengan ssh sebelumnya), saya dapat menawarkan peningkatan ini (jika bashada shell Anda). Ini akan menambah kompresi paralel, indikator kemajuan dan memeriksa integritas di seluruh tautan jaringan:

tar c file_list |
    tee >(sha512sum >&2) |
    pv -prab |
    pigz -9 |
    ssh [user@]remote_host '
        gunzip |
        tee >(sha512sum >&2) |
        tar xC /directory/to/extract/to
    '

pvadalah program penampil progres yang bagus untuk pipa Anda dan pigzmerupakan program gzip paralel yang menggunakan sebanyak mungkin utas CPU Anda secara default (saya percaya hingga 8 maks). Anda dapat mengatur tingkat kompresi agar lebih sesuai dengan rasio CPU dengan bandwidth jaringan dan menukar dengan pxz -9edan pxz -djika Anda memiliki lebih banyak CPU daripada bandwidth. Anda hanya perlu memverifikasi bahwa kedua jumlah cocok setelah selesai.

Opsi ini berguna untuk jumlah data yang sangat besar serta jaringan latensi tinggi, tetapi tidak sangat membantu jika tautannya tidak stabil dan turun. Dalam kasus tersebut, rsync mungkin merupakan pilihan terbaik karena dapat dilanjutkan.

Output sampel:

6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e  -                     ]
 176MiB [9.36MiB/s] [9.36MiB/s] [                                            <=>                                                                        ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e  -

Untuk perangkat blok:

dd if=/dev/src_device bs=1024k |
    tee >(sha512sum >&2) |
    pv -prab |
    pigz -9 |
    ssh [user@]remote_host '
        gunzip |
        tee >(sha512sum >&2) |
        dd of=/dev/src_device bs=1024k
    '

Jelas, pastikan ukuran atau batasnya sama dengan count =, skip =, seek =, dll.

Ketika saya menyalin filesystems dengan cara ini, saya akan sering pertama dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefske nol sebagian besar ruang yang tidak digunakan, yang mempercepat xfer.

Daniel Santos
sumber
1

Saya tidak berpikir Anda akan melakukan yang lebih baik daripada scp kecuali Anda memasang kartu jaringan yang lebih cepat. Jika Anda melakukan ini melalui internet, itu tidak akan membantu.

Saya akan merekomendasikan menggunakan rsync . Mungkin tidak lebih cepat, tetapi setidaknya jika gagal (atau Anda mematikannya karena terlalu lama), Anda dapat melanjutkan di mana Anda tinggalkan di waktu berikutnya.

Jika Anda dapat menghubungkan 2 mesin secara langsung menggunakan gigabit ethernet, itu mungkin yang tercepat.

Brent
sumber
Saya memiliki 100Mbps tidak terpakai link langsung antara mereka
nicudotro
1
Tidak akan melakukan yang lebih baik daripada SCP? SCP mendorong semua data itu melalui langkah enkripsi. SCP akan menjadi salah satu cara paling lambat untuk menyalinnya!
Evan Anderson
Benar tentang SCP mengenkripsi data, tetapi kecepatan enkripsi adalah urutan besarnya lebih cepat dari koneksi jaringan, dan dengan demikian diabaikan.
Brent
1

Untuk 100Mb / s, throughput teoretis adalah 12,5 MB / s, jadi pada 10MB / s Anda melakukannya dengan cukup baik.

Saya juga akan mengulangi saran untuk melakukan rsync, mungkin melalui ssh. Sesuatu seperti:

rsync -avW -e ssh $SOURCE $USER@$REMOTE:$DEST

Pada 100Mb / s CPU Anda harus dapat menangani enkripsi / dekripsi tanpa berdampak besar pada kecepatan data. Dan jika Anda mengganggu aliran data, Anda harus dapat melanjutkan dari tempat Anda tinggalkan. Hati-hati, dengan "jutaan" file, startup akan membutuhkan waktu sebelum benar-benar mentransfer apa pun.

David Mackintosh
sumber
1

Saya pernah mengalami ini, kecuali bahwa saya mentransfer log Oracle.

Inilah gangguannya

  • scp

    inefficient and encrypted (encrypted = slower than unencrypted 
    depending on the link and your processor) 
    
  • rsync

    efficient but typically encrypted (though not necessarily)
    
  • FTP / HTTP

    both seem to be efficient, and both are plaintext. 
    

Saya menggunakan FTP dengan sukses besar (di mana kesuksesan besar setara dengan ~ 700Mb / s pada jaringan Gb). Jika Anda mendapatkan 10MB (yang setara dengan 80MB / s), mungkin ada sesuatu yang salah.

Apa yang bisa Anda ceritakan tentang sumber dan tujuan data? Apakah itu drive tunggal ke drive tunggal? RAID ke USB?

Saya tahu pertanyaan ini sudah memiliki jawaban, tetapi jika jaringan Anda berjalan lambat pada kabel crossover Gb / s, sesuatu yang benar-benar perlu diperbaiki.

Matt Simmons
sumber
1

Anda tidak menyebutkan apakah kedua mesin berada di LAN yang sama, atau jika saluran aman (yaitu menggunakan SSH) adalah wajib, tetapi alat lain yang bisa Anda gunakan adalah netcat .

Saya akan menggunakan yang berikut ini di mesin penerima:

cd <destdir>
netcat -l -p <port> | gunzip | cpio -i -d -m

Kemudian di sisi pengirim:

cd <srcdir>
find . -type f | cpio -o | gzip -1 | netcat <desthost> <port>

Ini memiliki keuntungan sebagai berikut:

  • Tidak ada overhead CPU untuk enkripsi yang dimiliki ssh.
  • Yang gzip -1memberikan kompresi ringan tanpa jenuh CPU sehingga membuat trade-off yang baik, memberikan sedikit kompresi sambil mempertahankan throughput maksimum. (Mungkin tidak menguntungkan untuk data MP3, tetapi tidak ada salahnya.)
  • Jika Anda dapat mempartisi file menjadi kelompok-kelompok, Anda dapat menjalankan dua atau lebih pipa secara paralel dan benar-benar memastikan Anda menjenuhkan bandwidth jaringan Anda.

misalnya,

find <dir1> <dir2> -type f | cpio -o | gzip -1 | netcat <desthost> <portone>
find <dir3> <dir4> -type f | cpio -o | gzip -1 | netcat <desthost> <porttwo>

Catatan:

  • Apa pun cara Anda mentransfer, saya mungkin akan menjalankan rsync atau serentak setelah itu untuk memastikan Anda mendapatkan segalanya.
  • Anda bisa menggunakan taralih-alih cpiojika Anda mau.
  • Bahkan jika Anda akhirnya menggunakan ssh, saya akan memastikan itu tidak menggunakan kompresi itu sendiri, dan pipa melalui gzip -1diri Anda sendiri untuk menghindari saturasi CPU. (Atau setidaknya mengatur CompressionLevel ke 1.)
Evan
sumber
1

Scp sederhana dengan opsi yang tepat akan dengan mudah mencapai 9-10 MB / s melalui LAN:

scp -C -c arcfour256 ./local/files.mp3 remoteuser@remoteserver:/opt/remote

Dengan opsi-opsi itu, kemungkinan throughput menjadi 4x atau 5x lebih cepat daripada tidak ada opsi (default)


sumber
tetapi tidak untuk sejuta file kecil. Apakah Anda mencoba solusi Anda sendiri?
Sajuuk
1

Jika Anda memiliki server ftp di sisi src, Anda dapat menggunakan ncftpget dari situs ncftp . Ini berfungsi prefek dengan file kecil karena menggunakan tar secara internal.

Satu perbandingan menunjukkan ini: memindahkan 1.9GB file kecil (33926 file)

  1. Menggunakan scp membutuhkan waktu 11m59s
  2. Menggunakan rsync membutuhkan waktu 7m10s
  3. Menggunakan ncftpget membutuhkan waktu 1m20s
Ali Nikneshan
sumber
1

Anda juga dapat mencoba menggunakan perintah BBCP untuk melakukan transfer Anda. Ini adalah ssh paralel buffered yang benar-benar menjerit. Kami biasanya bisa mendapatkan 90% + line-rate asalkan kita bisa terus makan pipa

$ bbcp -s 8 -w 64M -N io 'tar -cO srcdirectory' desthostname:'tar -x -C destdir'

Biasanya, kami berusaha sangat keras untuk menghindari keharusan bergerak. Kami menggunakan kumpulan ZFS yang kami selalu bisa "menambahkan" lebih banyak ruang disk. Tapi kadang-kadang ... Anda hanya perlu memindahkan barang. Jika kita memiliki sistem file "live" yang mungkin membutuhkan waktu berjam-jam (atau berhari-hari) untuk menyalin bahkan ketika akan full-blast .. kita melakukan dua langkah zfs mengirim rutin:

  1. Buat snapshot ZFS, dan transfer ke kumpulan baru pada mesin baru. Biarkan selama yang dibutuhkan.
  2. Buat snapshot kedua, dan kirimkan sebagai tambahan. Snapshot tambahan hanya mencakup set-perubahan (jauh lebih kecil) sejak yang pertama, sehingga melalui relatif cepat.
  3. Setelah snapshot tambahan selesai, Anda dapat mengubah aslinya dan memotong ke salinan baru dan "downtime offline" Anda dijaga agar tetap minimum.

Kami juga mengirim dump zfs kami ke BBCP juga ... ini memaksimalkan pemanfaatan jaringan kami dan meminimalkan waktu transfer.

BBCP tersedia secara gratis, Anda dapat mencarinya di Google, dan kompilasi langsung-foward. Cukup salin ke / usr / local / bin Anda di kedua src dan mesin tujuan dan itu hanya akan berfungsi.

C. Shamis
sumber
1

Saya kira jawaban saya agak terlambat di sini, tapi saya membuat pengalaman yang baik dengan menggunakan mc (Midnight Commander) pada satu server untuk terhubung melalui SFTP ke server lain.

Opsi untuk terhubung melalui FTP ada di menu "Kiri" dan "Kanan", dengan memasukkan alamat seperti ini:

/#ftp:[email protected]/

atau

/#ftp:[email protected]/

Anda dapat menavigasi dan melakukan operasi file hampir seperti pada sistem file lokal.

Ini memiliki opsi bawaan untuk melakukan penyalinan di latar belakang, tapi saya lebih suka menggunakan perintah layar dan melepaskan dari layar saat mc menyalin (saya pikir itu berjalan lebih cepat juga).

a-langit
sumber
1

Untuk @scottpack jawaban opsi rSync

Untuk menampilkan kemajuan unggahan, gunakan '--progess' sebagai opsi setelah -avW pada perintah seperti yang ditunjukkan di bawah ini.

rsync -avW --progress -e ssh /path/to/dir/ remote_server:/path/to/remotedir

masukkan deskripsi gambar di sini

Dinesh Sunny
sumber
1

Berikut ini adalah patokan cepat untuk membandingkan beberapa teknik,

  • Source adalah CPU 4-core Intel (R) Xeon (R) E5-1620 @ 3.60GHz dengan 250 Mbps dan drive SATA
  • Destination adalah CPU 6-core Intel (R) Xeon (R) E-2136 @ 3.30GHz dengan bandwidth 1 Gbps dan drive SSD

Jumlah file: 9632, Ukuran total: 814 MiB, Ukuran rata-rata: 84 KiB

  • RSYNC: 1m40.570s
  • RSYNC + KOMPRESI: 0m26.519s
  • TAR + NETCAT: 1m58.763s
  • TAR + KOMPRESI + NETCAT: 0m28.009s

Perintah untuk tar / netcat adalah:

Source : tar -cf - /sourcedir/ | nc -v 11.22.33.44 5000
Dest : nc -v -l 5000 | tar -xf -
Antares
sumber
0

rsync atau Anda mungkin ingin menaruhnya jadi itu semua dalam satu file dan kemudian scp. Jika Anda tidak memiliki ruang disk, Anda dapat memasang tar secara langsung di atas ssh saat sedang dibuat.

Adam Gibbins
sumber
0

Jika Anda mengirim lebih dari MP3 dan file terkompresi lainnya, Anda tidak akan mendapat banyak manfaat dari solusi apa pun yang mencoba untuk mengompres file-file tersebut lebih lanjut. Solusinya akan menjadi sesuatu yang dapat membuat beberapa koneksi antara kedua server dan dengan demikian lebih menekankan pada bandwidth antara kedua sistem. Setelah ini maksimal, tidak banyak yang bisa diperoleh tanpa meningkatkan perangkat keras Anda. (Kartu jaringan yang lebih cepat antara server-server itu, misalnya.)

Wim sepuluh Brink
sumber
0

Saya mencoba beberapa alat untuk menyalin file 1GB. Hasilnya adalah di bawah ini: HTTP tercepat, dengan wget -c nc dalam baris scp paling lambat, dan gagal beberapa kali. Tidak ada cara untuk melanjutkan rsync menggunakan ssh sebagai backend, dengan demikian hasilnya sama. Kesimpulannya, saya akan menggunakan http dengan wget -bqc dan beri waktu. Semoga ini bisa membantu

Mijo
sumber
apakah Anda memberikan wawasan mengapa http adalah yang tercepat?
Sajuuk
0

Saya harus menyalin disk BackupPC ke komputer lain.

Saya menggunakan rsync.

Mesin memiliki 256 MB memori.

Prosedur yang saya ikuti adalah yang ini:

  • dieksekusi rsynctanpa -H(butuh 9 jam)
  • ketika rsync selesai, saya menyinkronkan cpooldirektori dan mulai dengan pcdirektori; Saya memotong transfer.
  • kemudian dimulai kembali rsyncdengan -Hflag, dan semua file yang ditautkan dalam pcdirektori ditransfer dengan benar (prosedur menemukan semua file asli cpooldan kemudian ditautkan ke pcdirektori) (butuh 3 jam).

Pada akhirnya saya bisa memverifikasi dengan df -mtidak ada ruang ekstra yang dihabiskan.

Dengan cara ini saya menghindari masalah dengan memori dan rsync. Sepanjang waktu saya dapat memverifikasi kinerja menggunakan atas dan atas dan akhirnya saya mentransfer data 165GB.

Menggertak
sumber