GNU/Linux >> Belajar Linux >  >> Linux

Menyalin pohon direktori besar secara lokal? cp atau rsync?

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 menit
  • tar butuh 206 menit
  • cpio butuh 225 menit
  • rsync + 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


Linux
  1. Filter Rsync:Menyalin Satu Pola Saja?

  2. Linux – Hapus Direktori Besar yang Berisi Ribuan File Secara Efisien?

  3. Memisahkan Pohon Direktori Besar Menjadi Potongan Ukuran Tertentu?

  1. Rsync Apakah Mengubah Izin Direktori?

  2. Cara gzip Direktori di Linux

  3. Mengecualikan direktori saat membuat file .tar.gz

  1. Struktur direktori CentOS sebagai pohon?

  2. Menyalin file jarang 1TB

  3. Garis miring dan perintah rsync