Mentransfer sekitar 300gb dalam file dari satu server ke yang lain

20

Saya memiliki sekitar 200.000 file yang saya transfer ke server baru hari ini. Saya belum pernah melakukan apapun dalam skala besar seperti ini sebelumnya, dan ingin mendapatkan saran tentang bagaimana saya harus melakukan ini. Saya memindahkan mereka antara dua distro Centos 6, dan mereka berada di lokasi yang berbeda di negara ini. Saya tidak memiliki cukup ruang HDD pada server asli untuk mengumpulkan semua direktori dan file menjadi satu tarball besar, jadi pertanyaan saya adalah bagaimana saya harus mentransfer semua file ini? rsync? beberapa cara khusus menggunakan rsync? Setiap masukan / saran tentang cara melakukannya akan luar biasa.

Terima kasih

EDIT: Bagi mereka yang bertanya-tanya, saya SANGAT menyarankan menggunakan screenketika menjalankan rsyncperintah besar seperti ini. Terutama ketika sesuatu yang konyol dapat terjadi dan Anda kehilangan koneksi ke server A tempat Anda menjalankan rsyncperintah. Kemudian lepaskan layar dan lanjutkan lagi nanti.

MasterGberry
sumber
4
Sudahkah Anda mencoba rsync? Mungkin pada set kecil file atau lebih? Seharusnya menjadi alat yang ideal untuk itu.
slhck
Ini hampir pasti bukan alat terbaik untuk pekerjaan ini, tetapi Anda mungkin tertarik pada kenyataan bahwa Anda dapat mengalirkan tar melalui koneksi ssh daripada harus mengompres ke file sebelum memindahkan file:tar cz | ssh [email protected] tar xz
Aesin
2
itu bisa di luar topik, tetapi (terutama untuk memuat awal, dan kemudian menggunakan rsyncuntuk pembaruan berikutnya): "Jangan pernah meremehkan bandwidth dari station wagon yang penuh dengan kaset" (yaitu: apakah Anda mempertimbangkan untuk menempatkan hd ke-2 (atau memasang usb2 / USB3 disk), backup di atasnya, dan kirim yang itu melalui fedex ke lokasi terpencil? Bisa jadi JAUH lebih cepat dari yang lain, dan menghemat bandwidth untuk keperluan lain
Olivier Dulac
Saya tidak memiliki batas BW pada satu penyedia, dan yang lain saya tidak akan mencapai bulan ini. Jadi saya tidak benar-benar memiliki masalah menyia-nyiakannya: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Bob

Jawaban:

24

Untuk menyempurnakan jawaban Simon , rsyncadalah alat yang sempurna untuk pekerjaan itu:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Dengan asumsi Anda memiliki akses ssh ke mesin jarak jauh, Anda ingin melakukan sesuatu seperti ini:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Ini akan menyalin direktori path/to/local/fooke /path/to/remote/barpada server jauh. Subdirektori baru bernama bar/fooakan dibuat. Jika Anda hanya ingin menyalin konten direktori, tanpa membuat direktori nama itu pada target, tambahkan garis miring:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Ini akan menyalin isi dari foo/ke direktori jauh bar/.

Beberapa opsi yang relevan:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
terdon
sumber
jadi bisakah saya lakukan rsync -hrtplu --progressjika saya ingin melihat kemajuan yang sedang terjadi?
MasterGberry
@MasterGberry ya, tepatnya. Saya memiliki skrip cadangan yang berjalan rsync --progress --stats -hrtl --update source destination.
terdon
Sepertinya saya mengalami masalah untuk menjalankannya. rsync -hrtplu --progress --rsh='ssh -p2202'adalah apa yang saya gunakan dan tidak dapat terhubung. Terus mendapatkan 255 kesalahan. Tapi aku harus melakukannya. Jadi saya tahu ini bukan firewall ... apakah saya perlu memberikan kata sandi melalui cmd juga? atau tidak akan hanya meminta saya setelah itu?
MasterGberry
Derp, nvm. Saya lupa tentang lalu lintas keluar di firewall saya. Terima kasih
MasterGberry
Catatan penting: dengan rsync, berhati-hatilah saat menggunakan "--delete": baca banyak tentangnya, uji pada folder lain (/ tmp / ...), dan berhati-hatilah terhadap perubahan saat menambahkan atau tidak menambahkan "/" di akhir direktori sumber atau direktori tujuan.
Olivier Dulac
14

Itu tergantung pada seberapa cepat itu perlu disalin, dan berapa banyak bandwidth yang tersedia.

Untuk koneksi jaringan yang buruk, pertimbangkan bandwidth truk yang diisi dengan kaset. (Baca: kirim HDD 2,5 inci, atau drive saja di sana sendiri. 300 gigabit drive seharusnya mudah ditemukan).

Jika waktu kurang kritis atau Anda banyak bandwidth maka rsync sangat bagus. Jika ada kesalahan, Anda dapat melanjutkan tanpa menyalin kembali file sebelumnya.

[Sunting] Saya lupa menambahkan bahwa Anda dapat menjalankan rsync beberapa kali jika data Anda digunakan selama penyalinan.

Contoh:
1) Data sedang digunakan. Rsync -> Semua data akan disalin. Ini mungkin memakan waktu.
2) Jalankan rsync lagi, hanya file yang diubah disalin. Ini harus cepat.

Anda dapat melakukan ini beberapa kali hingga tidak ada perubahan, atau Anda dapat melakukannya dengan cerdas / aman dengan membuat data hanya-baca selama penyalinan. (mis. jika berada di set bersama yang digunakan yang hanya dibagikan untuk dibaca. Atau rsync datanya, lalu pada malam hari setel hanya-baca saat Anda menjalankannya untuk kedua kalinya).

Hennes
sumber
1
Tidak ada server yang harus hidup di suatu tempat di mana bandwidth tidak dapat menangani 300G dalam jumlah waktu yang wajar ...
Dan
1
Itu tergantung pada apa yang 'masuk akal'. Katakanlah tautan terlemah adalah 100 mbit (saya tidak peduli apakah itu batas unggah dari kantor atau unduhan di tempat lain). Itu kira-kira memungkinkan untuk 10MB / detik. (div oleh 10 tampaknya masuk akal, saya tahu Anda bisa mendapatkan sedikit lebih banyak jika semuanya berjalan dengan baik. Misalnya tidak ada orang lain yang menggunakan garis untuk apa pun). 10MB / detik ~~ 600MB / min ~~ 36000MB / jam ~~ 36 GB / jam ~~ 300GB adalah 8h20mnt. Itu bisa dilakukan dalam semalam. Itu juga membuat banyak asumsi. Misal jika unggahan hanya 2 mbit (Kami memiliki kantor dengan kecepatan itu) butuh 50 kali lebih lama (415 jam, atau 17,3 hari).
Hennes
Astaga! Ya, 8-10 masuk akal, tetapi saya memang membuat sejumlah asumsi.
Dan
2
@ Dan Jika itu adalah persyaratan bahwa server aktif dan melayani permintaan, menjenuhkan bandwidth upstream mungkin merupakan ide yang buruk. Jadi, Anda harus mempercepat kecepatan transfer untuk memperhitungkan itu.
Bob
6

Saya akan pergi untuk rsync! Saya menggunakannya untuk membuat cadangan server saya ke server luar kantor dan berfungsi dengan baik. Biasanya ada beberapa MB untuk disalin tetapi beberapa hari itu berjalan hingga 20-30GB dan itu semua berfungsi tanpa masalah.

Simon
sumber
0

rsync melalui NFS menggunakan koneksi Gigabit akan memakan waktu hampir 10 jam. Akan lebih baik untuk menyalin data pada HDD dan memindahkannya di antara server. Jika Anda perlu menyalin satu-ke-satu disk sebenarnya, gunakan dd atau semacamnya, untuk membuat gambar mentah disk. Menggunakan ssh (scp) menyebabkan overhead yang sangat besar. Diuji secara empiris pada koneksi Gigabit. rsync baik dalam melakukan sinkronisasi tambahan antara dua server yang digunakan dalam HA atau dalam mode cadangan. Saya kira.

Pawel
sumber
Bahasa dan gaya jawaban ini perlu ditingkatkan.
FSMaxB
Rsync sangat bagus jika file dapat berubah selama salin. Jalankan saja beberapa kali. Pertama kali semua data disalin. Kedua kalinya hanya apa yang berubah selama salinan pertama (panjang). Ketiga kalinya akan dilakukan pada malam hari atau dengan read-only.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.kecuali bahwa itu di seluruh negeri, jadi itu akan lebih lama.
Rob
@ FSMaxB: Saya akan melakukannya nanti, thx.
Pawel
@Rob: Saya telah membaca ini;) Bahwa server berada di dua lokasi yang berbeda. Jadi, Anda perlu menghitung, apa yang akan lebih baik untuk Anda. Melakukan perjalanan melintasi negara (memeriksa biaya bahan bakar, dll.) Atau menggunakan koneksi jaringan. Apa yang akan lebih bermanfaat.
Pawel
0

pertama kali menggunakan NFS dan tar / untar (NFS adalah protokol tercepat dalam hal ini, tar untuk menghemat bandwidth jaringan dengan lebih banyak pemanfaatan CPU)

tar cf - * | ( cd /target; tar xfp -)

lain kali gunakan rsync

jet
sumber
Jika Anda memiliki kekuatan CPU yang cukup, Anda dapat meningkatkan ini dengan menambahkan gzip ke loop. Dan tanpa NFS Anda bisa menggunakan netcat. (Atau bahkan keduanya: tar -cf - * | gzip | nc -p 4567dan nc -l 4567 | gunzip | tar xf -.
Hennes
terima kasih Hennes, itu ide saya, tapi saya lupa gzip di pipa
jet