Pertanyaan Menyalin direktori direktori besar secara lokal? cp atau rsync?


Saya harus menyalin pohon direktori besar, sekitar 1,8 TB. Semuanya lokal. Kebiasaan yang akan saya gunakan rsyncNamun saya bertanya-tanya apakah ada gunanya, dan jika saya lebih suka menggunakannya cp.

Saya khawatir tentang perizinan dan uid / gid, karena harus diawetkan dalam salinan (saya tahu rsync melakukan ini). Serta hal-hal seperti symlink.

Tujuannya kosong, jadi saya tidak perlu khawatir untuk memperbarui beberapa file secara kondisional. Ini semua disk lokal, jadi saya tidak perlu khawatir tentang ssh atau jaringan.

Alasan saya tergoda jauh dari rsync, adalah karena rsync mungkin melakukan lebih dari yang saya butuhkan. file checksum rsync. Saya tidak membutuhkan itu, dan saya khawatir bahwa itu mungkin memakan waktu lebih lama dari cp.

Jadi apa yang Anda rasakan, rsync atau cp?


217
2017-07-20 14:36




Jika rsync melakukan persis apa yang ingin Anda lakukan, jika Anda cukup akrab dengan penggunaannya untuk aplikasi khusus ini, dan jika berfungsi cukup cepat untuk menyesuaikan dengan selera Anda, lalu mengapa Anda ingin berganti? - eleven81
Karena saya khawatir bahwa rsync akan memakan waktu lebih lama dari cp, karena rsync melakukan banyak checksumming yang tidak akan dilakukan cp - Rory
Overhead cpu dari checksum kecil dibandingkan dengan disk / jaringan i / o. Kecuali disk berada di sistem yang sama dan OS dapat melakukan beberapa salinan drive-drive pintar di pengendali bus. - Martin Beckett
Pemeriksaan ulang dilakukan pada file yang berbeda pada ukuran dan pencatatan waktu. Jika Anda paranoid (seperti setelah pemadaman listrik selama menyalin), Anda dapat memaksa checksum pada semua file, tetapi pada transfer lokal, itu biasanya lebih lambat daripada memulai dari awal. - korkman
Mungkin dia ingin tahu tentang meningkatkan alur kerjanya, dan tidak mengubur kepalanya di pasir berpikir dia tahu segalanya. Komentar ini benar-benar menggangguku. - Martin Konecny


Jawaban:


Saya akan menggunakan rsync karena itu berarti jika terganggu karena alasan apa pun, maka Anda dapat memulai ulang dengan mudah dengan biaya yang sangat sedikit. Dan menjadi rsync, ia bahkan bisa restart sebagian jalan melalui file besar. Seperti yang disebutkan orang lain, itu dapat mengecualikan file dengan mudah. Cara paling sederhana untuk melestarikan banyak hal adalah menggunakan -a bendera - ‘arsip.’ Jadi:

rsync -a source dest

Meskipun UID / GID dan symlink diawetkan oleh -a (Lihat -lpgo), pertanyaan Anda berarti Anda mungkin menginginkan penuh salinan informasi filesystem; dan -a tidak menyertakan tautan keras, atribut diperluas, atau ACL (di Linux) atau di atas maupun garpu sumber daya (pada OS X.) Jadi, untuk salinan sistem file yang kuat, Anda harus menyertakan bendera-bendera tersebut:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

Cp default akan mulai lagi, meskipun -u akan bendera "salin hanya ketika file SOURCE lebih baru daripada file tujuan atau ketika file tujuan hilang". Dan itu -a (archive) flag akan bersifat rekursif, bukan menyalin file jika Anda harus me-restart dan mempertahankan izin. Begitu:

cp -au source dest

188
2017-07-20 14:40



Flag -u dari cp mungkin bukan solusi terbaik, karena tidak akan mendeteksi file yang sebagian disalin / rusak. Yang menyenangkan tentang rsync adalah Anda dapat memilikinya, md5 menjumlahkan file untuk mendeteksi perbedaan. - Chad Huneycutt
Menambah opsi -w (--whole-file) akan mempercepat rsync yang terganggu, karena hanya akan menyalin file alih-alih checksumming. - hayalci
sebenarnya, rsync mendeteksi transfer lokal dan memungkinkan salinan file utuh tanpa checksumming secara otomatis. - korkman
dan - kemajuan yang sangat berguna! - Matt
-P atau --proses menunjukkan kemajuan untuk setiap file secara individual. Ini berguna untuk menyalin file besar, tidak untuk banyak (ribuan) file kecil karena itu berarti lebih banyak output yang tidak dapat Anda baca. Itu tidak menunjukkan kemajuan keseluruhan dari semua file yang digabungkan. - SPRBRN


Ketika menyalin ke sistem file lokal saya selalu menggunakan opsi rsync berikut:

# rsync -avhW --no-compress --progress /src/ /dst/

Inilah alasan saya:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

Saya telah melihat transfer 17% lebih cepat menggunakan pengaturan rsync di atas melalui perintah tar berikut seperti yang disarankan oleh jawaban lain:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

89
2018-05-07 19:09



Saya mengalami kesalahan berikut: rsync: --no-compress: unknown option @Ellis Percival. - alper
Ini cepat keringanan. Lebih cepat melakukan ini daripada rm -rf /src/. - dgo
Seperti @alper, --no-compress bukanlah pilihan untuk versi rsync saya (di CentOS 7); Saya menggunakan --kompresi tingkat = 0 gantinya. - Paul


Ketika saya harus menyalin sejumlah besar data, saya biasanya menggunakan kombinasi tar dan rsync. Lulus pertama adalah dengan menaruhnya, sesuatu seperti ini:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

Biasanya dengan sejumlah besar file, akan ada beberapa yang tidak bisa ditangani oleh tar karena alasan apa pun. Atau mungkin prosesnya akan terganggu, atau jika itu adalah migrasi filesystem, Anda mungkin ingin melakukan salinan awal sebelum langkah migrasi yang sebenarnya. Bagaimanapun, setelah salinan awal, saya melakukan langkah rsync untuk menyinkronkan semuanya:

# cd /dst; rsync -avPHSx --delete /src/ .

Perhatikan bahwa trailing slash di /src/ penting.


78
2017-07-20 15:15



+1 Saya menemukan tar pada umumnya lebih cepat untuk salinan besar daripada rsync. Saya suka ide finishing dengan rsync final juga. - Geoff Fritz
tar adalah pilihan yang baik jika dir dest kosong. Meskipun cara saya akan: cd $ DSTDIR; tar c -C $ SRCDIR. | ter - asdmin
Itulah keindahan metode ini. Anda tidak perlu menggandakan ruang karena Anda tidak pernah benar-benar membuat file tar menengah. Tar sebelum pipa mengemas data dan mengalirkannya ke stdout, dan tar setelah pipa mengambilnya dari stdin dan membongkarnya. - Chad Huneycutt
Saya melakukan cp -a untuk transfer 12gb, dan metode ini untuk transfer 42gb. Metode tar memakan waktu sekitar 1/4 kali. - NGaida
Saya juga menaruh pv di tengah untuk dapat melihat kemajuan, memperkirakan ukuran semua data yang digunakan df. Saya juga digunakan --numeric-owner, karena disk sumber berasal dari sistem lain dan saya tidak mau tar untuk mengacaukan pemilik: tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

Berikut adalah rsync yang saya gunakan, saya lebih memilih cp untuk perintah sederhana, bukan ini.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

cpio

Inilah cara yang lebih aman, cpio. Ini tentang secepat tar, mungkin sedikit lebih cepat.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

ter

Ini juga bagus, dan berlanjut pada read-failures.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

Perhatikan bahwa semuanya hanya untuk salinan lokal.


13
2018-02-26 17:06



Mengapa Anda menggunakan tanda-tanda S dan -D untuk rsync? - miyalys


rsync -aPhW --protocol=28 membantu mempercepat salinan besar dengan RSYNC. Saya selalu pergi rsync karena pikiran sedang di tengah 90GiB dan itu membuat saya takut menjauh dari CP


6
2017-07-20 16:24



Berapa nilai menggunakan protokol yang lebih tua dalam string perintah itu? - ewwhite
Pada mesin mac, Rsync versi lama dikirimkan pada beberapa rsync protocol revs yang lebih baru seperti 29. Mengatakannya untuk pindah ke protokol yang lebih tua membuatnya TIDAK memeriksa berulang kali. - oneguynick
Saya kira nomor 28 itu tidak berlaku lagi? - SPRBRN


Itu rsync perintah selalu menghitung checksum pada setiap byte yang ditransfernya.

Opsi baris perintah --checksum hanya berhubungan dengan apakah checksum file digunakan untuk menentukan file mana yang ditransfer atau tidak, yaitu:

-c, --checksum  lewati berdasarkan checksum, bukan mod-time & ukuran "

Halaman manual juga mengatakan ini:

Perhatikan bahwa rsync selalu memverifikasi bahwa setiap file yang ditransfer direkonstruksi dengan benar di sisi penerima dengan memeriksa seluruh file checksum, tetapi verifikasi setelah-transfer otomatis tidak ada hubungannya dengan opsi ini sebelum-transfer "Apakah file ini perlu diperbarui? " memeriksa.

Begitu rsync juga, selalu, menghitung checksum dari seluruh file di sisi penerima, bahkan ketika -c/ --checksum pilihannya adalah "off".


6
2017-11-28 01:20



Sementara posting Anda menambahkan beberapa informasi menarik di sini, rants, dan penghinaan menurunkan nilai posting Anda. Situs ini bukan forum untuk rants yang tidak konstruktif. Jika Anda dapat memodifikasi sumber, apakah Anda telah mengirimkan modifikasi Anda sebagai patch? Sudahkah Anda memposting versi Anda di github atau sesuatu? Jika Anda merasa begitu kuat tentang ini, mungkin lebih baik jika Anda mencoba melakukan sesuatu yang sedikit lebih konstruktif daripada menghina yang tidak perlu. - Zoredache
Ya, paragraf terakhir tidak terlalu penting. - Sherwin Flight


Apapun yang Anda inginkan. Hanya jangan lupa -a beralih ketika Anda memutuskan untuk menggunakan cp.

Jika Anda benar-benar membutuhkan jawaban: Saya akan menggunakan rsync karena jauh lebih fleksibel. Perlu mematikan sebelum menyalin selesai? Cukup ctrl-c dan lanjutkan segera setelah Anda kembali. Perlu mengecualikan beberapa file? Cukup gunakan --exclude-from. Perlu mengubah kepemilikan atau izin? rsync akan melakukannya untuk Anda.


5
2017-07-20 14:40



Apa yang dilakukan lagi dengan -p? - Rory
Ini akan menjaga kepemilikan, cap waktu dan perizinan. - innaM
cp -a akan lebih baik. - David Pashley
Memang. Jawaban berubah sesuai. - innaM


rsync hebat, tetapi memiliki masalah dengan pohon direktori yang sangat besar karena menyimpan pohon di memori. Saya hanya ingin melihat apakah mereka akan memperbaiki masalah ini ketika saya menemukan utas ini.

Saya juga menemukan:

http://matthew.mceachen.us/geek/gigasync/

Anda juga bisa memecah pohon secara manual dan menjalankan beberapa rsyncs.


5
2017-07-20 16:14



Jika Anda menggunakan versi 3, ia tidak menyimpan seluruh pohon dalam memori jika besar, ia menggunakan algoritme rekursif-inkremental: samba.org/ftp/rsync/src/rsync-3.0.0-NEWS - Kyle Brandt♦


Thread ini sangat berguna dan karena ada begitu banyak pilihan untuk mencapai hasil, saya memutuskan untuk menandainya dengan beberapa di antaranya. Saya percaya hasil saya dapat bermanfaat bagi orang lain memiliki rasa apa yang bekerja lebih cepat.

Untuk pindah 532Gb data didistribusikan di antara 1,753,200 file kami memiliki waktu-waktu itu:

  • rsync mengambil 232 menit
  • tar butuh 206 menit
  • cpio waktu 225 menit
  • rsync + parallel butuh 209 menit

Pada kasus saya, saya lebih suka menggunakan rsync + parallel. Saya harap informasi ini membantu lebih banyak orang untuk memutuskan di antara berbagai alternatif ini.

Patokan lengkap diterbitkan sini


5
2018-05-11 19:14



404 halaman tidak ditemukan - Amedee Van Gasse
Terima kasih @AmedeeVanGasse URL telah diperbaiki sebentar setelah Anda melaporkan :) - arjones
Mengapa tidak melakukan pembandingan cp? Ini adalah judul pertanyaannya! - calandoa
@calandoa saya pikir cp tidak aman, yaitu: ketika rusak Anda harus memulai kembali, itulah cara saya mendukung opsi yang dapat dilanjutkan, ergo rsync adalah favoritku :) - arjones


Ketika melakukan lokal salinan direktori lokal, pengalaman saya adalah bahwa "cp -van src dest" adalah 20% lebih cepat daripada rsync. Sejauh kemampuan restart, itulah yang "-n" lakukan. Anda hanya perlu rm file yang sebagian disalin. Tidak menyakitkan kecuali itu ISO atau semacamnya.


2
2017-09-07 07:26





ARJ SEKARANG JAUH LAMA !! Saya benar-benar ragu bahwa ARJ dan / atau rsync akan memberikan kinerja.

Yang pasti saya selalu lakukan adalah menggunakan cpio:

find . -print | cpio -pdm /target/folder

Ini hampir cepat daripada CP, pasti lebih cepat dari tar dan tanpa mem-pipe apa pun.


2
2017-09-09 04:09



"The original cpio dan menemukan utilitas ditulis oleh Dick Haight saat bekerja di AT & T Unix Support Group. Mereka pertama kali muncul pada 1977 di PWB / UNIX 1.0" - FreeBSD cpio halaman manual. - Chris S
cpio sayangnya memiliki batas atas 8GB untuk file.
"tanpa pipa apa pun"[sic]. Kecuali find perintah, seperti yang Anda cantumkan, memiliki pipa di dalamnya: find . -print | cpio -pdm /target/folder - warren