it-swarm.asia

Büyük bir dizin ağacını yerel olarak mı kopyalıyorsunuz? cp veya rsync?

Yaklaşık 1.8 TB büyük bir dizin ağacı kopyalamam gerekiyor. Hepsi yerel. Alışkanlık dışında rsync kullanırım, ancak çok fazla nokta olup olmadığını merak ediyorum ve cp kullanmayı tercih edersem.

İzinleri ve uid/gid konusunda endişeliyim, çünkü kopyada korunmaları gerekiyor (rsync'in bunu yaptığını biliyorum). Yanı sıra semboller gibi şeyler.

Hedef boş, bu yüzden bazı dosyaları koşullu güncelleme hakkında endişelenmenize gerek yok. Hepsi yerel disk, bu yüzden ssh veya ağ hakkında endişelenmem gerekmiyor.

Ben rsync uzak cazip olurdu nedeni, çünkü rsync ihtiyacımdan daha fazlasını yapabilir. rsync sağlama toplamı dosyaları. Buna ihtiyacım yok ve cp'den daha uzun sürebileceğinden endişeliyim.

Ne düşünüyorsunuz, rsync veya cp?

244
Rory

Herhangi bir nedenle kesintiye uğrarsa, çok az maliyetle kolayca yeniden başlatabileceğiniz anlamına gelen rsync'i kullanırım. Ve rsync olarak, büyük bir dosya aracılığıyla kısmen yeniden başlatabilir. Diğerlerinin de belirttiği gibi, dosyaları kolayca hariç tutabilir. Çoğu şeyi korumanın en basit yolu -a bayrağı - "arşiv".

rsync -a source dest

UID/GID ve semboller -a (görmek -lpgo), sorunuz dosya sistemi bilgilerinin tam bir kopyasını isteyebileceğiniz anlamına gelir; ve -a sabit bağlantıları, genişletilmiş öznitelikleri veya ACL'leri (Linux'ta) veya daha fazlasını içermez nor kaynak çatalları (OS X'te) Bu nedenle, bir dosya sisteminin sağlam bir kopyası için, Bu bayrakları dahil etmeniz gerekir:

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

Varsayılan cp tekrar başlar, ancak -u bayrağı "yalnızca SOURCE dosyası hedef dosyadan daha yeni olduğunda veya hedef dosya eksik olduğunda kopyalanır". Ve -a (arşiv) bayrağı özyinelemeli, izinleri yeniden başlatmanız ve korumanız gerekiyorsa dosyaları yeniden kopyalamayın. Yani:

cp -au source dest
214
Hamish Downer

Yerel dosya sistemine kopyalarken rsync'i aşağıdaki seçeneklerle kullanma eğilimindeyim:

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

İşte benim akıl yürütmem:

-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)

Başka bir cevap tarafından önerilen aşağıdaki tar komutu üzerinde yukarıdaki rsync ayarlarını kullanarak% 17 daha hızlı transferler gördüm:

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

Büyük miktarda veri kopyalamak zorunda kaldığımda, genellikle tar ve rsync kombinasyonunu kullanıyorum. İlk geçiş, bunun gibi bir şey katlamaktır:

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

Genellikle büyük miktarda dosyada, katranın herhangi bir nedenle işleyemeyeceği bazı dosyalar olacaktır. Veya işlem kesintiye uğrayabilir veya bir dosya sistemi geçişiyse, ilk geçiş adımından önce ilk kopyayı yapmak isteyebilirsiniz. Her halükarda, ilk kopyadan sonra, hepsini eşitlemek için bir rsync adımı yaparım:

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

Sondaki /src/ önemli.

79
Chad Huneycutt

rsync

İşte kullandığım rsync, basit komutlar için cp'yi tercih ederim, bu değil.

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

cpio

İşte daha güvenli bir yol, cpio. Katran kadar hızlı, belki biraz daha hızlı.

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

tar

Bu da iyidir ve okuma hatalarıyla devam eder.

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

Bunların yalnızca yerel kopyalar için olduğunu unutmayın.

14
AskApache

Sen neyi tercih edersen. Sadece -acp kullanmaya karar verdiğinizde değiştirin.

Gerçekten bir cevaba ihtiyacınız varsa: rsync kullanırım çünkü çok daha esnektir. Kopyalama işlemi tamamlanmadan önce kapatmanız mı gerekiyor? Sadece ctrl-c ve en kısa sürede geri dön. Bazı dosyaları hariç tutmanız mı gerekiyor? Sadece kullan --exclude-from. Sahipliği veya izinleri değiştirmeniz mi gerekiyor? rsync bunu sizin için yapacak.

7
innaM

rsync komutu her zaman aktardığı her bayt için sağlama toplamlarını hesaplar.

Komut satırı seçeneği --checksum, Yalnızca hangi dosyaların aktarılacağını aktarmak için dosyaların sağlama toplamlarının kullanılıp kullanılmadığıyla ilgilidir, yani:

-c, --checksum Mod zamanı ve boyutuna göre değil, sağlama toplamına göre atla "

Manpage ayrıca şunları söylüyor:

Rsync'in her aktarılan dosyanın her zaman tam dosya sağlama toplamını kontrol ederek alıcı tarafında doğru bir şekilde yeniden oluşturulduğunu doğruladığını, ancak otomatik aktarım sonrası doğrulamanın bu seçeneğin aktarımdan önce hiçbir ilgisi olmadığını "unutmayın. güncellenecek? " Kontrol.

Yani rsync da, her zaman, -c/ --checksum Seçeneği "kapalı" olsa bile alıcı taraftaki tüm dosyanın bir sağlama toplamını hesaplar.

7
John

rsync -aPhW --protocol=28, RSYNC ile bu büyük kopyaların hızlanmasına yardımcı olur. Her zaman rsync'e giderim çünkü 90GiB'nin ortasında olma düşüncesi ve kırılma beni CP'den korkutuyor

6
oneguynick

Bu konu çok faydalı oldu ve sonuca ulaşmak için çok fazla seçenek olduğundan, bunlardan birkaçını karşılaştırmaya karar verdim. Sonuçlarımın başkalarına yardımcı olabileceğine inanıyorum.

532Gb 1.753.200 dosya arasında dağıtılan verilerin taşınması için şu zamanlar vardı:

  • rsync 232 dakika sürdü
  • tar 206 dakika sürdü
  • cpio 225 dakika sürdü
  • rsync + parallel 209 dakika sürdü

Benim durumumda rsync + parallel. Umarım bu bilgiler daha fazla insanın bu alternatifler arasında karar vermesine yardımcı olur.

Karşılaştırma ölçütünün tamamı yayınlandı burada

6
arjones

rsync harika, ama ağaçları büyük bellekte sakladığından gerçekten büyük dizin ağaçlarıyla ilgili sorunları var. Ben sadece bu iş parçacığı bulduğunda onlar bu sorunu düzeltmek olmadığını görmek için bakıyordu.

Ben de buldum:

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

Ayrıca ağacı el ile parçalayabilir ve birden fazla rsync çalıştırabilirsiniz.

5
n3bulous

Yerel bir yerel dizin kopyası yaparken, benim deneyim "cp -van src dest" rsync% 20 daha hızlı olmasıdır. Yeniden başlatılabilirlik ile ilgili olarak, "-n" bunu yapar. Kısmen kopyalanan dosyayı rm yapmanız yeterlidir. ISO ya da böyle bir şey olmadığı sürece acı verici değil.

3
Ron

ARJ IS SO ESKİ OKUL !! ARJ ve/veya rsync'in performans vereceğinden şüpheliyim.

Kesinlikle her zaman yaptığım cpio kullanmaktır:

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

Bu neredeyse CP'den hızlıdır, katrandan kesinlikle daha hızlıdır ve hiçbir şey borulamaz.

2

Kesinlikle rclone denemek istiyorsunuz. Bu şey çok hızlı:

Sudo rclone sync /usr /home/fred/temp -P -L --transfers 64

Transferred:       17.929G / 17.929 GBytes, 100%, 165.692 MBytes/s, ETA 0s
Errors:                75 (retrying may help)
Checks:            691078 / 691078, 100%
Transferred:       345539 / 345539, 100%
Elapsed time:     1m50.8s

Bu, LITEONIT LCS-256 (256GB) SSD'ye ait ve yerel bir kopyadır.

Ekleyebilirsin --ignore-checksum daha hızlı hale getirmek için ilk çalıştırmada.

1
Frédéric N.

Her ikisi de gayet iyi çalışacaktır.

0
pauska

rsync için uygulanabilecek bazı hızlandırmalar var:

Önlemek

  • -z/--compress: sıkıştırma yalnızca bir ağ üzerinden değil, RAM üzerinden gerçekleştiğinden CPU'yu yükler.
  • --append-verify: kesintiye uğramış bir aktarımı sürdürür. Bu iyi bir fikir gibi gelebilir, ancak tehlikeli hata durumu vardır: kaynakla aynı boyutta (veya daha büyük) herhangi bir hedef dosya IGNORED olacaktır. Ayrıca, sonunda tüm dosyayı kontrol eder, yani --no-whole-file tehlikeli bir arıza durumu eklerken.

Kullanım

  • -S/--sparse: null dizilerini seyrek bloklara çevirin
  • --partial veya -P hangisi --partial --progress: kısmen aktarılmış dosyaları ileride sürdürmek üzere kaydedin. Not: dosyaların geçici bir adı olmayacaktır, bu nedenle tüm kopya tamamlanana kadar başka hiçbir şeyin hedefi kullanmayı beklemediğinden emin olun.
  • --no-whole-file Böylece yeniden gönderilmesi gereken her şey delta aktarımı kullanır. Kısmen aktarılmış bir dosyanın yarısını okumak genellikle tekrar yazmaktan çok daha hızlıdır.
  • --inplace dosya kopyalamasını önlemek için (ancak tüm aktarım tamamlanana kadar hedefi hiçbir şey okumuyorsa)
0
Tom Hale

tar da işi yapar, ancak rsync gibi kesintiye uğramaya devam etmez.

0
pgs

ARJ kullanırsanız ne olur?

arj a -jm -m1 -r -je filepack /source

nerede -jm -m1 sıkıştırma seviyeleridir ve -je onu yürütülebilir yapar. Artık kapsüllenmiş bir dosyalarınız var.

Ardından hedef haritaya çıkartmak için

filepack -y  

kaynak haritanın nerede yapılacağı (nerede -y her zaman kabul, üzerine yaz, atla vb.)

Daha sonra dosya paketini hedef alana scp ftp yapabilir ve mümkünse yürütebilirsiniz.

0
herauthon