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


Büyük bir dizin ağacını, yaklaşık 1,8 TB kopyalamalıyım. Hepsi yerel. Kullanmam gereken alışkanlık rsyncAncak, çok fazla nokta olup olmadığını merak ediyorum ve kullanmam gerekirse cp.

İzinleri ve uid / gid hakkında endişeleniyorum çünkü kopyada saklanmaları gerekiyor (rsync bunu biliyor). Symlinks gibi şeylerin yanı sıra.

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

Rsync'ten uzak durmamın nedeni, rsync'in ihtiyacım olandan fazlasını yapabileceğidir. rsync checksums dosyaları. Buna ihtiyacım yok ve cp'den daha uzun sürebilir.

Peki ne düşünüyorsun rsync veya cp?


217
2017-07-20 14:36


Menşei


Eğer rsync tam olarak ne yapmak istediğinizi yaparsa, bu özel uygulama için halihazırda kullanılmaya alışkınsanız ve zevkinize uyacak kadar hızlı bir şekilde çalışıyorsa, o zaman neden dünya üzerinde geçiş yapmak istersiniz? - eleven81
Çünkü rsync'in cp'den daha uzun süreceğinden endişeleniyorum, çünkü rsync cp'nin yapamayacağı bir çok - Rory
Checksumun cpu ek yükü disk / ağ i / o ile karşılaştırıldığında küçüktür. Disk aynı sistemde değilse ve işletim sistemi veri yol denetleyicide akıllı sürücü-sürücü kopyası yapabilir. - Martin Beckett
Checksumming, boyuta ve zaman damgası kontrolüne göre farklılık gösteren dosyalarda yapılır. Paranoyaksanız (kopyalama sırasında elektrik kesintisi gibi), tüm dosyalarda checksumming'i zorlayabilirsiniz, ancak yerel bir aktarımda, genellikle sıfırdan başlamaktan daha yavaştır. - korkman
Belki de iş akışını geliştirmeyi merak ediyor ve kafasını herşeyi bildiği sandığına gömemiyor. Bu yorum beni gerçekten rahatsız ediyor. - Martin Konecny


Cevaplar:


Rsync'i, herhangi bir nedenden dolayı kesintiye uğradığında, çok az maliyetle kolayca yeniden başlatabileceğiniz anlamına gelir. Ve rsync olarak, büyük bir dosyada kısmen yolunu yeniden başlatabilir. Diğerleri de belirtildiği gibi, dosyaları kolayca hariç tutabilir. Çoğu şeyi korumanın en basit yolu -a bayrak - ‘arşiv.’ Yani:

rsync -a source dest

UID / GID ve symlinks korunmasına rağmen -a (görmek -lpgo), senin sorununun isteyebileceğini ima ediyor tam dosya sistemi bilgilerinin kopyası; ve -a Sabit bağlantılar, genişletilmiş özellikler veya ACL'ler (Linux'ta) veya yukarıdakileri içermez ne de kaynak çatalları (OS X'te) Bu nedenle, bir dosya sisteminin sağlam bir kopyası için, şu bayrakları eklemeniz gerekir:

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

Varsayılan cp yine başlayacak, ancak -u bayrak olacak "yalnızca SOURCE dosyası hedef dosyadan daha yeni olduğunda veya hedef dosya eksik olduğunda kopyala". Ve -a (arşiv) bayrağı, yeniden başlatmanız ve izinlerinizi saklamak zorunda olmanız durumunda, recopy dosyaları değil, özyinelemeli olacaktır. Yani:

cp -au source dest

188
2017-07-20 14:40



Kısmen kopyalanmış / bozulmuş bir dosyayı algılayamayacağı için, cp'nin -u bayrağı muhtemelen en iyi çözüm değildir. Rsync hakkında güzel bir şey, farklılıkları tespit etmek için md5 dosyalarını toplayabilmenizdir. - Chad Huneycutt
-W (--whole-file) seçeneğinin eklenmesi, kesintili bir rsync'i hızlandıracaktır, çünkü sadece sağlama toplamı yerine dosyayı kopyalayacaktır. - hayalci
Aslında, rsync yerel transferleri algılar ve otomatik dosya sağlama olmadan tam dosya kopyasına olanak tanır. - korkman
ve - gerçekten kullanışlı olan bir gelişme! - Matt
-P veya --progress her dosya için ayrı ayrı ilerleme gösterir. Pek çok (binlerce) küçük dosya için değil, büyük dosyaları kopyalamak için yararlıdır, çünkü okuyamayacağınız çok daha fazla çıktı demektir. Tüm dosyaların birleştirilmiş ilerleyişini göstermez. - SPRBRN


Yerel dosya sistemine kopyalama yaparken her zaman aşağıdaki rsync seçeneklerini kullanırım:

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

İşte benim mantığım:

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

Yukarıdaki rsync ayarlarını kullanarak başka bir yanıtın önerdiği gibi aşağıdaki tar komutunu kullanarak% 17 daha hızlı aktarım gördüm:

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

89
2018-05-07 19:09



Aşağıdaki hatayı yaşıyorum: rsync: --no-compress: unknown option @ Tüm Percival. - alper
Bu hızlı bir şekilde aydınlatıyor. Bunu yapmak için daha hızlı rm -rf /src/. - dgo
@Alper gibi, --no-compress rsync sürümüm için bir seçenek değildi (CentOS 7'de); Bunun yerine --compress-level = 0 kullandım. - Paul


Çok miktarda veri kopyalamam gerektiğinde, genellikle katran ve rsync kombinasyonunu kullanırım. İlk geçiş, bunun gibi bir şey, bunun gibi bir şey:

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

Genellikle büyük miktarda dosya ile, katranın herhangi bir nedenden dolayı işleyemeyeceği bazı olacaktır. Ya da süreç kesintiye uğrayabilir veya bir dosya sistemi geçişi ise, ilk geçiş işlemini gerçek geçiş adımından önce yapmak isteyebilirsiniz. Herhangi bir oranda, ilk kopyadan sonra, hepsini senkronize etmek için bir rsync adımı yapıyorum:

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

Sondaki eğik çizgi /src/ önemli.


78
2017-07-20 15:15



+1 Genelde rsync'den büyük kopyalarda daha hızlı olması için katran buldum. Son bir rsync ile bitirme fikrini de seviyorum. - Geoff Fritz
dest dir boşsa katran iyi bir seçimdir. Benim yolum olsa da: cd $ DSTDIR; tar c -C $ SRCDIR. | katran - asdmin
Bu yöntemin güzelliği. Alanı iki katına almanıza gerek yoktur çünkü aslında bir ara tar dosyası oluşturmazsınız. Borudan önceki katran, verileri paketler ve stdout'a akar ve borudan sonraki katran, stdin'den alır ve paketinden çıkarır. - Chad Huneycutt
Bir 12gb transfer için bir cp -a yaptım ve bu yöntem 42gb transfer için. Tar yöntemi yaklaşık 1/4 sürdü. - NGaida
Ben de koyuyorum pv ilerlemeyi izleyebilmek için ortadaki tüm verileri kullanarak df. Ben de kullandım --numeric-ownerkaynak disk başka bir sistemden olduğu için istemedim tar sahiplerini dağıtmak için: tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

İşte kullandığım rsync, basit komutlar için cp'yi tercih ederim, buna 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

katran

Bu da iyi ve okuma başarısızlıklarına devam ediyor.

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

Bunların hepsi sadece yerel kopyalar içindir.


13
2018-02-26 17:06



Rsync için neden -S ve -D işaretlerini kullanıyorsunuz? - miyalys


rsync -aPhW --protocol=28 RSYNC ile bu büyük kopyaları hızlandırmaya yardımcı olur. Ben her zaman rsync'e gidiyorum çünkü 90GiB ile ortada olma düşüncesi ve beni kırmak beni korkutuyor


6
2017-07-20 16:24



Bu komut dizesinde eski protokolü kullanmanın değeri nedir? - ewwhite
Bir Mac makinesinde, Rsync'in eski sürümü, 29 gibi bazı yeni rsync protokol devirlerinde askıda kalıyor. Eski protokole geçmek için bunu tekrar tekrar kontrol ETMEZ. - oneguynick
Sanırım 28 numara artık geçerli değil mi? - SPRBRN


rsync Komut her zaman transferleri her byte checksums hesaplar.

Komut satırı seçeneği --checksum yalnızca hangi dosyaların transfer edilip edilmeyeceğini belirlemek için dosyaların toplamı olup olmadığını, yani:

-c, --checksum  mod-time & size değil, sağlama toplamına dayalı olarak atla "

Manpage de şunu söylüyor:

Rsync'in her aktarılan dosyanın tüm dosya sağlama toplamını denetleyerek alıcı tarafında doğru şekilde yeniden oluşturulduğunu doğruladığını, ancak aktarımdan sonra otomatik olarak aktarım onayının bu seçeneğin aktarımdan önce yapacağı bir şey olmadığını doğruladığını unutmayın. güncellenecek? " Kontrol.

Yani rsync Ayrıca, her zaman, alıcı tarafındaki tüm dosyanın bir sağlama toplamını hesaplar. -c/ --checksum seçenek "kapalı".


6
2017-11-28 01:20



Gönderiniz burada bazı ilginç bilgiler eklerken, bağışlar ve hakaretler yayınınızın değerini azaltıyor. Bu site, yapıcı olmayan bağışlar için bir forum değildir. Kaynağı değiştirebildiyseniz, değişikliklerinizi bir yama olarak gönderdiniz mi? Sürümünüzü github'a mı yüklediniz? Bu konuda çok güçlü hissediyorsanız, gereksiz yere aşağılayıcı olmak yerine biraz daha yapıcı bir şey yapmaya çalışsanız daha iyi olabilir. - Zoredache
Evet, son paragraf gerçekten gerekli değildi. - Sherwin Flight


Sen neyi tercih edersen. Sadece unutma -a kullanmaya karar verdiğinizde geçin cp.

Gerçekten bir cevaba ihtiyacınız varsa: rsync kullanayım çünkü daha esnek. Kopyalama tamamlanmadan önce kapatılması gerekiyor mu? Sadece ctrl-c ve arkana dönünce devam et. 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.


5
2017-07-20 14:40



-P bayrağı tekrar ne yapar? - Rory
Bu sahipliğini, zaman damgalarını ve izinlerini koruyacaktır. - innaM
cp -a daha iyi olurdu. - David Pashley
Aslında. Cevap buna göre değişti. - innaM


rsync harika, ancak gerçekten büyük dizin ağaçları ile ilgili sorunları var, çünkü ağaçları hafızada saklıyor. Bu ipliği bulduğumda bu sorunu çözüp çözmeyeceklerini görmek istedim.

Ben de buldum:

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

Ayrıca ağacı el ile ayırabilir ve birden çok rsync'i çalıştırabilirsiniz.


5
2017-07-20 16:14



Eğer sürüm 3'ü kullanırsanız, eğer büyükse, tüm ağacı bellekte tutmaz, artımlı-yineleme algoritması kullanır: samba.org/ftp/rsync/src/rsync-3.0.0-NEWS - Kyle Brandt♦


Bu iş parçacığı çok kullanışlıdır ve sonuca ulaşmak için pek çok seçenek olduğundan, bunlardan birkaçını ölçmeye karar verdim. Sonuçların başkalarına yardımcı olabileceğine inanıyorum, daha hızlı çalışmanın bir hissi var.

Taşımak 532Gb arasında dağıtılan veri 1,753,200 dosya o 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 kullanmayı tercih ettim rsync + parallel. Umarım bu bilgi, bu alternatifler arasından daha fazla insanın karar vermesine yardımcı olur.

Tüm kriter yayınlandı İşte


5
2018-05-11 19:14



404 Sayfa Bulunamadı - Amedee Van Gasse
Teşekkürler @AmedeeVanGasse URL bildirdikten sonra kısa bir süre sonra giderildi :) - arjones
Neden kıyaslama yapmıyoruz? cp? Bu sorunun adı! - calandoa
@calandoa bence cp güvensizdir, yani: kırılınca baştan başlamanız gerektiğinde, bu şekilde devam edebilecek seçenekleri tercih ederim, ergo rsync favorim :) - arjones


Yerel bir yerel dizin kopyası yapılırken, benim deneyimim "cp -van src dest" rsync'den% 20 daha hızlıdır. Yeniden başlatılabilirlik açısından, "-n" nin yaptığı şey budur. Sadece kısmen kopyalanmış dosyayı çalıştırmanız gerekiyor. ISO ya da bunun gibi bir şey olmadıkça acı vermez.


2
2017-09-07 07:26





ARJ SO OLD SCHOOL IS! ARJ ve / veya rsync'in performans göstereceğinden şüpheliyim.

Kesinlikle her zaman yaptığım cpio kullanmak:

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

Bu CP'den neredeyse hızlı, kesinlikle katrandan daha hızlı ve herhangi bir şey borulamadan.


2
2017-09-09 04:09



"Orijinal cpio ve bulma programları, AT & T'nin Unix Destek Grubunda çalışırken, Dick Haight tarafından yazılmıştır. İlk olarak 1977'de PWB / UNIX 1.0'da yayınlanmıştır" - FreeBSD'ler cpio adam sayfası. - Chris S
cpio maalesef dosyalar için 8GB'lık bir üst sınır var.
"hiçbir şey boru olmadan"[sic]. find komutu, listelediğiniz gibi, içinde bir boru var: find . -print | cpio -pdm /target/folder - warren