Solusi 1:
Saya akan menggunakan rsync karena artinya jika terganggu karena alasan apa pun, Anda dapat memulai ulang dengan mudah dengan biaya yang sangat murah. Dan menjadi rsync, itu bahkan dapat memulai kembali sebagian melalui file besar. Seperti yang disebutkan orang lain, itu dapat mengecualikan file dengan mudah. Cara termudah untuk melestarikan banyak hal adalah dengan menggunakan -a
bendera – ‘arsipkan.’ Jadi:
rsync -a source dest
Meskipun UID/GID dan symlink dipertahankan oleh -a
(lihat -lpgo
), pertanyaan Anda menyiratkan bahwa Anda mungkin menginginkan penuh salinan informasi sistem file; dan -a
tidak menyertakan hard-link, atribut yang diperluas, atau ACL (di Linux) atau di atas atau fork sumber daya (pada OS X.) Jadi, untuk salinan sistem file yang tangguh, Anda harus menyertakan flag tersebut:
rsync -aHAX source dest # Linux
rsync -aHE source dest # OS X
Cp default akan mulai lagi, meskipun -u
flag akan "menyalin hanya ketika file SUMBER lebih baru dari file tujuan atau ketika file tujuan tidak ada" . Dan -a
(arsipkan) akan bersifat rekursif, bukan menyalin ulang file jika Anda harus memulai ulang dan mempertahankan izin. Jadi:
cp -au source dest
Solusi 2:
Saat menyalin ke sistem file lokal, saya cenderung menggunakan rsync dengan opsi 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 -)
Solusi 3:
Ketika saya harus menyalin data dalam jumlah besar, saya biasanya menggunakan kombinasi tar dan rsync. Langkah pertama adalah memasang tar, kira-kira seperti ini:
# (cd /src; tar cf - .) | (cd /dst; tar xpf -)
Biasanya dengan jumlah file yang besar, akan ada beberapa yang tidak dapat ditangani oleh tar karena alasan apa pun. Atau mungkin prosesnya akan terganggu, atau jika itu adalah migrasi sistem file, Anda mungkin ingin melakukan penyalinan 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 garis miring pada /src/
itu penting.
Solusi 4:
rsync
Inilah rsync yang saya gunakan, saya lebih suka cp untuk perintah sederhana, bukan ini.
$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/
cpio
Ini cara yang lebih aman lagi, cpio. Ini secepat tar, mungkin sedikit lebih cepat.
$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null
tar
Ini juga bagus, dan melanjutkan kegagalan baca.
$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -
Perhatikan itu semua hanya untuk salinan lokal.
Solusi 5:
Utas ini sangat berguna dan karena ada begitu banyak opsi untuk mencapai hasil, saya memutuskan untuk membandingkan beberapa di antaranya. Saya yakin hasil saya dapat membantu orang lain untuk mengetahui apa yang bekerja lebih cepat.
Untuk memindahkan 532Gb data yang didistribusikan di antara 1.753.200 file kami mengalami saat-saat itu:
rsync
butuh 232 menittar
butuh 206 menitcpio
butuh 225 menitrsync + parallel
butuh 209 menit
Dalam kasus saya, saya lebih suka menggunakan rsync + parallel
. Saya harap informasi ini membantu lebih banyak orang untuk memutuskan di antara alternatif ini.
Tolok ukur lengkap dipublikasikan di sini