Soru Rsync'de toplam ilerleme gösteriliyor: bu mümkün mü?


Bu seçeneği zaten araştırdım, ancak yalnızca ilgili çözümleri buldum özel yama. --Help'te gösterilmemesi ve daha fazla bilgi bulunmaması, muhtemelen cevapların 'hayır' olduğunu gösterir, ancak bunu doğrulamak isterim.

Göstermek mümkün mü toplam dosya aktarımı ilerlemesi rsync ile?


195
2018-01-05 15:26


Menşei


Rsync 3.1.0'dan beri temel bir toplam dosya aktarımı ilerlemesi var. Cevap gör serverfault.com/a/441724/107793 detaylar için. - Florian Feldhaus
Lütfen kabul edilen cevabı değiştirin. David'in cevabı tamamen işe yaramaz. - Navin


Cevaplar:


danakim doğrudur. Toplam ilerleme göstergesi eklemek için önemli bir yol yoktur.

Bunun nedeni, rsync'nin senkronize edilecek dosyaların bir listesine baktığı zaman, hangi dosyaların değişmesi gerektiğini önceden bilmemesidir. Delta transferleri yapıyorsanız, deltasların kendileri, yapılması gereken işin toplam bir resmini vermek için önceden hesaplanmalıdır.

Diğer bir deyişle, ne kadar iş yapıldığını hesaplamanın en kolay yolu, aslında bunu yapmaktır.


33
2018-01-06 04:10



Hala (veri aktarılmış + veri atlandı) / (kaynağında toplam veri) veya (aktarılan veya atlanan # dosya) gibi basit bir göstergeye (/ kaynağında # dosya) sahip olabilirsiniz. Özellikle doğru olmayacak, ama bir fikir verecekti. Günün sonunda büyük bir transfer yaptığınız zamana iyi gelir ve etrafta bekleyip bilgisayarı kapatıp bırakmayacağınızı mı yoksa geceyi geçmesine mi izin vereceğinizi merak ediyorsunuz. - naught101
Bu sonucun doğru olduğuna inanmıyorum. @ Naught101'in soru için daha adil olduğunu düşünüyorum ve kullanmama konusunda bir cevabı tahmin ediyorum. --size-only ya da benzerleri de yanlıştır. - Evan Carroll
Cevabı yazdığım zaman, bu doğruydu - rsync'in toplam ilerleme göstergesi için bir mekanizması yoktu. Ve evet, kendi yazabilirsin, ama çok az insan yapardı. - David Mackintosh
Yeni gelenler için yorum yapın: Artık mümkün: serverfault.com/a/441724/422003 - imposeren


Bunu şimdi rsync'de (sürüm 3.1.0 protokolü sürüm 31, Ubuntu Trusty 14.04 ile test edilmiştir) yapmak için resmi bir yol var.

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

İle denedim /usr klasör, tüm dosya sistemlerini tranferring için bu özelliği istedim ve /usr iyi bir örnek örnek gibi görünüyordu.

--info=progress2 sadece kısmi bir değer olsa bile güzel bir genel yüzde verir. Aslında benim /usr klasör 6'dan fazla konser var:

#> du -sh /usr
6,6G    /usr/

ve rsync hepsini taramak için çok zaman harcadı. Yani neredeyse her zaman gördüğüm yüzde yaklaşık% 90 tamamlandı, ama yine de bir şey kopyalanıyor görmek rahatlatıcıdır :)

Referanslar:


313
2017-10-24 11:13



Bunun 3.1.0'a indiğini unutmayın. Bu durumun zaman açısından mutlaka doğru olmadığının da belirtilmesi önemlidir. Esasen uzak uçta var olduğu doğrulanmış olan veri miktarını göstermektedir. Ve oran, verilerin uzak uçta doğru olarak öğrenildiği hızdır (zaten bu şekilde mi, yoksa yeni verinin aktarılıp doğru yapılmadığı). Bu yüzden çok yararlı olsa da, uyarıları anlamalısınız. - Kevin Cox
Bunu homebrew ile OSX'de kullanmak için "homebrew / dupes demlemek; demlemek rsync" demlemek - Matt Carrier
Buna dikkat --info=progress2 ile çalışmıyor -v - sanmai
Ekle --no-i-r aswell rsync kopyalamadan önce aşamalı olarak ama tamamen tarama yapmaz ve bilir + ne kadar iş kaldığını gösterir. - Alex
Kullanabileceğinizi unutmayın --human-readable (veya -h) MB / GB olarak toplam boyutu görmek için .. devam ediyor. - Nux


'Pv' ile yapabilirsiniz (apt-get install pv Debian ve ubuntu ile). Aktarılan veri miktarının, dosyaların boyutuyla değil kaynak ile hedef arasındaki delta ile ilişkili olmaması nedeniyle aktarılan dosya sayısını izlemenizi öneririm. Ve sayım dosyaları bir büyük delta ve diğeri de küçük delta için aynı ilerlemeyi sayacaktır. Bu, her halükarda ETA tahmininin uzak olabileceği anlamına gelir. Boyut tabanlı ETA yalnızca hedefiniz boşsa çalışır, bu durumda delta == kaynak boyutu.

Genel fikir, rsync'den 'transfer edilen' dosya başına bir satır yaymak ve bu satırları 'pv' ile saymak:

rsync -ai / kaynak uzaktan: / dest | pv -les [dosya sayısı]> / dev / null

Tüm dosya sistemlerini yedeklemeyi tercih ederim (birçok nedenden dolayı), bu durumda çok daha ucuz kullanabilirsiniz df dosya sayısını (yerine du veya find rsync'den sonra başka bir zaman kaynak hiyerarşinizle hareket edecektir. -X seçeneği, rsync'in aynı kaynak dosya sisteminde kaldığından emin olmak için görünür (ve diğer iç bağlamaları izlemez):

rsync -aix / kaynak uzak: / dest | pv -les $ (df -i / kaynak | perl -ane 'print $ F [2] $ F ise [5] = ~ m: ^ /:')> / dev / null

Dosyaları genel olarak / kaynak olarak saymak isterseniz find /source|wc -l (Uyarı: G / Ç'de yavaş ve ağır olabilir).


42
2018-06-10 10:22



Sıfırdauz belirtildiği gibi, yalnızca tüm bölümü rsyncing olduğunda, "df" kullanın df -i /source / kaynağının bulunduğu tüm bölümlerden gelen inode sayısını (dosyaları) alır. Aksi halde kullanın Bir dizindeki dosyaları saymak için 'bul' "$ ()" ifadesinin içinde. - lepe
Bir alternatif du veya find - Diyelim ki tamamlanmamış bir kopyasını bitiriyorsunuz ya da siler ile yerinde bir güncelleme yapıyorsunuz - kullanmak rsync -ai --dry-run aynı dosya listesini almak için ana koşağa geçecek pv - Izkata


Uzun transferler için koşarken mutluyum du -s iki tarafta da. Üstelik watch -n1 du -seğer gerçekten endişeli hissedersem.

watch bir komutu yürütür (du -s burada) periyodik olarak (her 1 saniyede bir) ve çıktı tam ekranını gösterir.


28
2018-01-05 16:30



Örnek için teşekkürler watch Komut! - Cam
// Zeki! Linfo.org'a göre: "du (yani, disk kullanımı) komutu, tüm içeriklerini ve tek tek dosyaların boyutlarını içeren dizin ağaçlarının boyutlarını bildirir. Bu, alan yığınlarının, yani dizinlerin ve dosyaların izlenmesi için yararlıdır. Sabit disk sürücüsünde (HDD) veya diğer depolama ortamlarında büyük veya aşırı miktarda alan tüketir. - Nathan Basanese
Ne kadar uzun transferler yaptığınızı bilmiyorum. sonuç TBC ve M dosyalarında olduğunda cehennem kadar yavaştır. - Nobody
Benim "uzun transferler" için bir du operasyonu, rsync'in çok daha yavaş çalıştığı, tamamlanması için yaklaşık bir saat sürüyor, çünkü diske erişim üzerinden kavga ediyorlar. - Abhi Beckert


İle birlikte --info = progress2 Sen de yapabilirsin artan yinelemeyi devre dışı bırak. Bu, başlangıçta tüm dosya listesini oluşturacak ve böylece genel ilerleme hakkında daha iyi bir fikir verecektir (en azından dosya sayısı, dosya boyutunu tarar sanmıyorum). Bir ticaret var. Bu daha fazla bellek maliyetlidir ve gerçek aktarımın başlangıcını geciktirir. Muhtemelen en iyi şekilde daha yavaş bağlantılarda kullanılır ve kesinlikle gajillion dosyaları için büyük değildir.

Aşağıdaki rsync man sayfasından -r - iyelik

Artan özyineleme no-inc-yinelemeli seçenek veya daha kısa no-ı-r takma.

(kaynak: http://rsync.samba.org/ftp/rsync/rsync.html )

Ayrıca, eğer --delete-belirtirseniz, başlangıçta tam özyinelemeyi zorlarsanız, yetim dosyaları silmek için ihtiyaç duyar (kaynakta bulunmayan, ancak kaynakta bulunmayan dosyalar).


20
2017-10-16 19:56



Bunun için teşekkürler, diğer cevaplar yukarı ve aşağı devam ediyor% bir yaş ile sonuçlanır! - artfulrobot


Temelde hayır. Yalnızca dosya başına ilerleme durumunu --progress flag ile gösterebilirsiniz, ancak bu konuyla ilgili.

Etrafında bir sarıcı yazabileceğinizi veya zaten bulduğunuz yamaları kullanabileceğinizi tahmin ediyorum ama gerçekten buna değip değmediğini kendinize sormalısınız, rsync için tam bir ilerlemeye ihtiyacınız var mı?


11
2018-01-05 15:50



İşte, tam ilerleme ve dosya ilerlemesini güzel bir ilerleme çubuğu olarak gösteren bir sarmalayıcı komut dosyası: gist.github.com/JohannesBuchner/4d61eb5a42aeaad6ce90 - j13r
Yolu değiştirebilirsiniz --progress kullanarak çalışmak --info=progress2size küresel ilerlemeyi gösterir. Kullanışlı olması için artımlı özyinelemeli algoritmayı devre dışı bırakmanız gerekir. --info=progress2 --no-inc-recursive - mat
@ j13r bu vurguyu bir cevap olarak da paylaşabilirsiniz! mükemmel seçenek! - skywinder


Ayrıca, toplam ilerlemeyi rsync ile nasıl göstereceğimi araştırdım ve bu gönderiden yararlı bir yanıt buldum: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

Temelde, kullanabilirsiniz --info = progress2 rsync'in dev sürümünde 3.1.0. İşte ne doktor dedi ki:

Ayrıca, tek tek dosyaları değil, tüm aktarımı temel alan istatistikleri çıkaran bir --info = progress2 seçeneği vardır. Bir dosya adı vermeden bu bayrağı kullanın (örn. -V'yi önlemek veya --info = name0, aktarımın çok sayıda isimle ekranı kaydırmadan nasıl yapılacağını görmek isterseniz.) --info = progress2. kullanmak için ilerleme seçeneği.)


7
2017-07-04 14:30



--info=name0 altın - ipatch


Cevabı zerodeux'dan kullandım ve kendi küçük bash senaryosunu yazdım:

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

echo "Executing dry-run to see how many files must be transferred..."
TODO=$(${RSYNC} --dry-run ${RSYNC_ARGS} ${SOURCES} ${TARGET}|grep "^Number of files transferred"|awk '{print $5}')

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

7
2018-02-07 23:44





Cevabı zerodeux'dan kullandım ve kendi küçük BASH betiğimi yazdım:

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

#echo "Executing dry-run to see how many files must be transferred..."
TODO=$(find ${SOURCES} | wc -l)

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

TODO'nun kuru çalışmasını değiştirdim

TODO=$(find ${SOURCES} | wc -l)

Çok hızlı dosya sayısını bulur!


6
2018-01-03 12:00



eserler bulmak yani rsync --dry-run'dan çok daha iyi! - hopeseekr
find sadece eğer çalışıyorsan rsyncYerel olarak. rsync --dry-run uzak kaynaklarla da çalışıyor ... - voretaq7


En son rsync’e sahip değilseniz (ör. OS X’in 2.6.9’u var) ve kullanamazsınız. --info=progress2ilerledikçe kaydırma metin sayfalarından kendinizi kaydetmek için başka bir alternatif:

rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"

Bu, bir satırda, aktarılan en son dosyanın adını yazdıracaktır:

Transferring: the-latest.file


6
2018-05-02 09:18





kullanım

lsof -ad3-999 -c rsync

Rsync'in hangi dosyaların açık olduğunu görmek için (dosyaları gösterecek) rsync yerel olarak gizli bir dosyaya kopyalar


4
2018-03-20 10:20