Saya perlu mentransfer sejumlah besar mp3 antara dua serve (Ubuntu). Maksud saya sekitar satu juta file yang rata-rata 300 ribu. Saya sudah mencoba scp
tetapi 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?
linux
performance
file-transfer
nicudotro
sumber
sumber
Jawaban:
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.
Sesuai komentar Mackintosh di bawah ini adalah perintah yang akan Anda gunakan untuk rsync
sumber
~
Karakter melarikan diri hanya diaktifkan jika SSH menggunakan terminal. Ini tidak terjadi ketika Anda menentukan perintah jarak jauh (kecuali jika Anda melewati-t
opsi). Jadi kekhawatiran Anda tidak valid.Hard drive eksternal dan pengiriman kurir pada hari yang sama.
sumber
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/
sumber
--include
dan--exclude
untuk mendapatkan lebih banyak nuansa.Tanpa banyak diskusi, gunakan netcat, pisau swissarmy jaringan. Tidak ada overhead protokol, Anda langsung menyalin ke soket jaringan. Contoh
sumber
pv
) dan pengecekan integritas viasha512sum
, 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.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 .
sumber
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
sumber
Dalam memindahkan 80 TB data (jutaan file kecil) kemarin, beralih dari
rsync
menjaditar
terbukti lebih cepat , ketika kami berhenti mencobadan beralih ke
tar
sebaliknya ...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
atime
file: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 . :)
sumber
tar cf - directory | ttcp -t dest_machine
dari ftp.arl.mil/mike/ttcp.htmlKetika 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.
Untuk mentransfer file antar server, Anda dapat menggunakan pengarsip cepat dengan ssh, seperti ini:
sumber
Saya menggunakan tar melalui
netcat
pendekatan juga, kecuali saya lebih suka menggunakansocat
- lebih banyak kekuatan untuk mengoptimalkan situasi Anda - misalnya, dengan mengutak-atik mss. (Juga, tertawa jika Anda mau, tetapi saya menemukansocat
argumen yang lebih mudah diingat karena konsisten). Jadi bagi saya, ini sangat umum akhir-akhir ini karena saya telah memindahkan beberapa hal ke server baru:Alias adalah opsional.
sumber
Alternatif lain adalah Unison . Mungkin sedikit lebih efisien daripada Rsync dalam kasus ini, dan agak lebih mudah untuk mengatur pendengar.
sumber
Sepertinya mungkin ada beberapa kesalahan ketik di jawaban atas. Ini mungkin bekerja lebih baik:
sumber
wget --mirror
seperti 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.Saya perhatikan bahwa orang lain merekomendasikan menggunakan netcat . Berdasarkan pengalaman saya dengannya, saya dapat mengatakan bahwa ini lambat dibandingkan dengan solusi lain.
sumber
Berkat jawaban luar biasa Scott Pack (saya tidak tahu bagaimana melakukan ini dengan ssh sebelumnya), saya dapat menawarkan peningkatan ini (jika
bash
ada shell Anda). Ini akan menambah kompresi paralel, indikator kemajuan dan memeriksa integritas di seluruh tautan jaringan:pv
adalah program penampil progres yang bagus untuk pipa Anda danpigz
merupakan 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 denganpxz -9e
danpxz -d
jika 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:
Untuk perangkat blok:
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 /thefs
ke nol sebagian besar ruang yang tidak digunakan, yang mempercepat xfer.sumber
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.
sumber
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:
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.
sumber
Saya pernah mengalami ini, kecuali bahwa saya mentransfer log Oracle.
Inilah gangguannya
scp
rsync
FTP / HTTP
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.
sumber
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:
Kemudian di sisi pengirim:
Ini memiliki keuntungan sebagai berikut:
gzip -1
memberikan 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.)misalnya,
Catatan:
tar
alih-alihcpio
jika Anda mau.gzip -1
diri Anda sendiri untuk menghindari saturasi CPU. (Atau setidaknya mengatur CompressionLevel ke 1.)sumber
Scp sederhana dengan opsi yang tepat akan dengan mudah mencapai 9-10 MB / s melalui LAN:
Dengan opsi-opsi itu, kemungkinan throughput menjadi 4x atau 5x lebih cepat daripada tidak ada opsi (default)
sumber
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)
sumber
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
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:
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.
sumber
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:
atau
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).
sumber
Untuk @scottpack jawaban opsi rSync
Untuk menampilkan kemajuan unggahan, gunakan '--progess' sebagai opsi setelah -avW pada perintah seperti yang ditunjukkan di bawah ini.
sumber
Berikut ini adalah patokan cepat untuk membandingkan beberapa teknik,
Jumlah file: 9632, Ukuran total: 814 MiB, Ukuran rata-rata: 84 KiB
Perintah untuk tar / netcat adalah:
sumber
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.
sumber
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.)
sumber
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
sumber
Saya harus menyalin disk BackupPC ke komputer lain.
Saya menggunakan rsync.
Mesin memiliki 256 MB memori.
Prosedur yang saya ikuti adalah yang ini:
rsync
tanpa-H
(butuh 9 jam)cpool
direktori dan mulai denganpc
direktori; Saya memotong transfer.rsync
dengan-H
flag, dan semua file yang ditautkan dalampc
direktori ditransfer dengan benar (prosedur menemukan semua file aslicpool
dan kemudian ditautkan kepc
direktori) (butuh 3 jam).Pada akhirnya saya bisa memverifikasi dengan
df -m
tidak 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.
sumber