Saya memiliki sekitar 5 juta file kecil (5-30k) dalam satu direktori yang ingin saya salin ke komputer lain di jaringan gigabit yang sama. Saya mencoba menggunakan rsync, tetapi akan memperlambat hingga merangkak setelah beberapa jam berjalan, saya berasumsi karena rsync harus memeriksa file sumber & tujuan setiap kali?
Pikiran kedua saya adalah menggunakan scp, tetapi ingin mendapatkan pendapat dari luar untuk melihat apakah ada cara yang lebih baik. Terima kasih!
Jawaban:
Sesuatu seperti ini seharusnya bekerja dengan baik:
Mungkin juga hilangkan gzip dan bendera "z" untuk ekstraksi, karena Anda berada di jaringan gigabit.
sumber
gzip
hanya akan pernah dijalankan pada satu inti. Anda dapat memperkirakan sekitar 30 MB / s dengan tingkat kompresi default 6 - tetapi ini tidak akan memaksimalkan Gigabit Ethernet.Saya yakin fakta bahwa Anda memiliki semua LIMA JUTAAN file dalam satu direktori akan membuang banyak alat ke dalam kegelisahan. Saya tidak terkejut bahwa rsync tidak menangani ini dengan anggun - ini situasi yang "unik". Jika Anda bisa mencari cara untuk menyusun file menjadi semacam struktur direktori, saya yakin alat sinkronisasi standar seperti rsync akan jauh lebih responsif.
Namun, hanya untuk memberikan saran aktual - mungkin salah satu solusinya adalah memindahkan drive secara fisik ke mesin tujuan sementara sehingga Anda dapat melakukan salinan file di server yang sebenarnya (bukan melalui jaringan). Kemudian, gerakkan drive kembali dan gunakan rsync untuk menjaga keadaan.
sumber
Untuk menyalin jutaan file melalui sakelar gigabit (di lingkungan tepercaya) Anda juga dapat menggunakan kombinasi
netcat (or nc)
dantar
, seperti yang telah disarankan oleh user55286. Ini akan mengalirkan semua file sebagai satu file besar (lihat Fast File Copy - Linux! (39 GBs) ).sumber
Kami memiliki sekitar 1 juta file dalam suatu direktori (nilai file sekitar 4 tahun).
Dan kami menggunakan robocopy untuk memindahkan file ke direktori YYYY / MM (sekitar 35-45.000 file per bulan) .. kami menempatkan skrip robocopy dalam file .bat seperti ini:
catatan singkat ..
/ns /nc /nfl /np
adalah untuk menghindari kembung file log dengan info tambahan/log+...
untuk menulis informasi ringkasan ke file log.jadi misalnya file diubah> = 01 / Nov / 2008 (inklusif) ke file yang dimodifikasi <01 / Des / 2008 (tidak inklusif)
/mov
untuk memindahkan filekemudian muncul direktori sumber
kemudian datang direktori tujuan (direktori akan dibuat dengan cepat saat dan ketika diperlukan).
Butuh waktu sekitar 40 - 60 menit untuk transfer 1 bulan (sekitar 35-45.000 file). Menurut kami, dibutuhkan sekitar 12 jam atau kurang untuk transfer 1 tahun.
Menggunakan Windows Server 2003.
Semua barang dicatat dalam file log ... Mulai Waktu, Waktu Berakhir dan Jumlah file Disalin.
Robocopy menyelamatkan hari itu.
sumber
Anda tahu, saya plus-1 solusi tar, tetapi - tergantung pada lingkungan - ada satu ide lain yang terjadi. Anda mungkin berpikir tentang menggunakan dd (1) . Masalah kecepatan dengan sesuatu seperti ini adalah dibutuhkan banyak gerakan kepala untuk membuka dan menutup file, yang akan Anda lakukan lima juta kali. Di Anda dapat memastikan bahwa ini ditugaskan secara bersamaan, Anda bisa melakukannya, yang akan memotong jumlah gerakan kepala dengan faktor 5 atau lebih.
sumber
Saya lebih suka menggunakan lz4 sebagai alat kompresi tercepat saat ini. Opsi SSH -c arcfour128 menggunakan algoritma enkripsi yang lebih cepat dari standar. [1]
Jadi transfer direktori terlihat seperti:
Harap dicatat bahwa pada perintah Debian lz4 adalah lz4c dan pada CentOS adalah lz4.
sumber
Robocopy sangat bagus untuk hal-hal seperti ini. Ini akan mencoba lagi setelah waktu jaringan habis dan itu juga memungkinkan Anda mengatur penundaan celah antar paket untuk sekarang membanjiri pipa.
[Sunting]
Perhatikan bahwa ini adalah aplikasi khusus Windows.
sumber
Saya tahu ini mungkin bodoh - tetapi apakah Anda berpikir untuk menyalinnya ke disk eksternal dan membawanya ke server lain? Ini sebenarnya mungkin solusi yang paling efisien dan sederhana.
sumber
Kami sedang menyelidiki masalah ini saat ini. Kita perlu mentransfer sekitar 18 juta file kecil - total sekitar 200GB. Kami mencapai kinerja terbaik menggunakan XCopy tua biasa, tetapi masih membutuhkan waktu yang lama. Sekitar 3 Hari dari 1 server ke yang lain, sekitar 2 Minggu ke drive eksternal!
Melalui proses lain, kami perlu menduplikasi server. Ini dilakukan dengan Acronis. Butuh sekitar 3 jam !!!
Kami akan menyelidiki ini lagi. Saran dd di atas mungkin akan memberikan hasil yang serupa.
sumber
Sudah banyak saran bagus, tapi ingin dilempar ke Beyond Compare . Saya baru-baru ini mentransfer sekitar 750.000 file antara 5KB dan 20MB dari satu server ke server lain melalui switch gigabit. Itu bahkan tidak cegukan sama sekali. Memang butuh beberapa saat, tapi saya harapkan dengan begitu banyak data.
sumber
Saya akan melihat bagaimana kinerja zip-> copy-> unzip
atau apa pun sistem kompresi / arsip favorit Anda.
sumber
Masukkan mereka ke dalam satu file sebelum Anda menyalinnya, lalu bongkar lagi setelah disalin.
sumber
Dalam situasi yang sama, saya mencoba menggunakan tar untuk mengumpulkan file. Saya menulis sebuah skrip kecil untuk menyalurkan output dari perintah tar menyeberang ke mesin target langsung ke proses tar penerima yang unbundled file.
Pendekatan tar hampir dua kali lipat tingkat transfer dibandingkan dengan scp atau rsync (YMMV).
Berikut adalah perintah tar. Perhatikan bahwa Anda harus mengaktifkan r-perintah dengan membuat file .rhosts di direktori home masing-masing mesin (hapus ini setelah mereka menyalin selesai - mereka terkenal masalah keamanan). Perhatikan juga bahwa, seperti biasa, HP-UX canggung - sedangkan bagian dunia lainnya menggunakan 'rsh' untuk perintah shell-jauh, HP-UX menggunakan 'remsh'. 'rsh' adalah sejenis shell terbatas dalam bahasa HP.
Perintah tar pertama membuat file yang disebut '-', yang merupakan token khusus yang berarti 'output standar' dalam kasus ini. Arsip yang dibuat berisi semua file di direktori saat ini (.) Ditambah semua subdirektori (tar bersifat rekursif secara default). File arsip ini disalurkan ke perintah remsh yang mengirimkannya ke mesin box2. Pada kotak 2 saya pertama-tama mengubah ke direktori penerima yang tepat, kemudian saya mengekstrak dari '-', atau 'input standar' file yang masuk.
Saya memiliki 6 perintah tar ini yang berjalan secara bersamaan untuk memastikan tautan jaringan dipenuhi dengan data, meskipun saya menduga bahwa akses disk mungkin menjadi faktor pembatas.
sumber
Lewati sistem file.
Apakah Anda dapat meng-unmount partisi ini sehingga file-file itu hidup, atau me-mountnya hanya baca? Lakukan itu, lalu sesuatu seperti:
dd if=/dev/PARTITION | ssh username@host "dd of=diskimage.bin"
Anda kemudian dapat memasang
diskimage.bin
sebagai perangkat loopback di sisi tujuan, dan menyalin file dari itu ke sistem file tujuan Anda yang sebenarnya, atau mungkin menggunakan alat yang tepat untuk menjahitnya kembali ke partisi kosong di sisi tujuan (berbahaya, tetapi mungkin mungkin , meskipun saya belum pernah melakukannya.)Jika Anda benar-benar berani, Anda bisa
dd
langsung kembali ke partisi di sisi tujuan. Saya tidak merekomendasikan itu.sumber
Anda dapat mencoba yang berikut ini (mungkin dalam batch file)
sumber
Seperti yang disarankan oleh sth Anda dapat mencoba tar di atas ssh.
Jika Anda tidak memerlukan enkripsi (awalnya Anda menggunakan rsync, tetapi tidak menyebutkan itu rsync + ssh), Anda dapat mencoba tar di netcat untuk menghindari overhead ssh.
Tentu saja Anda juga dapat mempersingkat waktu yang dibutuhkan dengan menggunakan gzip atau metode kompresi lainnya.
sumber
Ada hal lain yang perlu dipertimbangkan. Coba ini:
Dengan melakukan ini, TIDAK ada overhead untuk iterasi atau kompresi direktori, karena itu dilakukan pada saat file ditulis. Hanya ada satu file untuk dipindahkan - VHD.
Pada Windows, saya mengatur ukuran paket TCP default menjadi lebih besar, seperti 16348. Ini berarti lebih sedikit overhead header IP.
Satu hal yang saya temui adalah, yang terbaik adalah menjaga ukuran file di bawah 100 Mb untuk jaringan atau transfer USB. Saya menggunakan Rar.exe untuk itu - untuk membagi file.
Bekerja seperti jagoan. Ini sama dengan 'dd' di Linux .. Konsep pemasangan filesystem terkompresi ke direktori juga normal untuk Linux, jadi logika yang sama berlaku. Anda harus memastikan semua file ditutup sebelum operasi dimulai, seperti pada metode lainnya.
Ini memiliki manfaat tambahan sehingga memungkinkan untuk menempatkan kuota ukuran pada folder. Jika VHD adalah ukuran tetap, melampaui batas itu tidak akan menurunkan server, itu hanya akan menyebabkan kesalahan membuat atau menulis file.
VHD yang diformat sebagai NTFS dapat menangani jutaan file dalam folder juga.
sumber