Bir senkronizasyon işleminin ilerlemesini izleyebilir miyim?


103

Büyük bir dosyayı, asenkron bir Linux sistemine monte edilmiş bir USB diske kopyaladım. Bu nispeten hızlı bir komut istemine döner, ancak yazdığımda sync, elbette, hepsi diske gitmeli ve bu uzun zaman alıyor.

Yavaş olacağını anlıyorum, ama bir sayacın sıfıra inmesini izleyebileceğim bir yer var mı? İzlemek buffersde topyardımcı olmuyor.


Daha fazla bilgi için bakınız: lwn.net/Articles/572911
lanoxx

Yanıtlar:


162

Baktığımızda /proc/meminfogösterecektir Dirtydışarı tüm veri makaralar gibi zamanla küçülen numarasını; bir kısmı da dökülebilir Writeback. Bu, tüm cihazlara karşı bir özet olacaktır, ancak sistemdeki bir cihazın geri kalanından çok daha yavaş olduğu durumlarda, genellikle bu sıradaki her şeyin kendisiyle ilgili olduğu durumlarda sona erersiniz. Muhtemelen Dirtybaşladığınızda büyük sayıyı bulursunuz ve sync0'a yaklaştığı zaman yaklaşık olarak bitirirsiniz. Etkileşimli bir ekran elde etmek için bunu deneyin:

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

Normal disklerde normalde görmezden gelebilirim Writeback, ancak USB aktarım yolunda daha sık yer alıp almadığından emin değilim. Net bir eğilim olmadan sadece yukarı ve aşağı zıplarsa, muhtemelen sadece Dirtysayıya bakabilirsiniz .


4
Benim sistemimde, geri dönüş, Kirli boşalıncaya kadar sonuna kadar birkaç megada kalıyor, bu noktada da aşağı iniyor.
mattdm

24

/sys/block/<device>/statSenkronize ederken uygun cihazın dosyasına bakabilirsiniz . 9 inci sütun senkronizasyon bittiğinde sıfıra gitmeli cihaz üzerinde uçak içi isteklerinin sayısını gösterir.
Bunu bir kaç bayta çevirmenin bir yolunu bilmiyorum, ama ne kadar "malzeme" nin hala beklediğine dair kabaca bir fikir vermeli.

Biraz daha fazla bilgi için çekirdek belgelerinde stat.txt dosyasına bakın . ( inflightSistemimdeki bu dizinde, uçuş sırasında istekleri okuyan ve yazabilen bir dosya da var , ancak bunun için belge bulamıyorum.)


3
Sadece kullanışlı referans için, başka bir cevabın fikrini birleştirerek:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
Benim usb çubuğum için, bu işlem kopyalama işlemi süresince ve syncsonrasında 150'ye yaklaşıyor. 0'a gidiyor, ancak en sonunda. Bu, diğer cevabı sabırsızlıkla ilerlemeyi izlemek için daha kullanışlı hale getirir.
mattdm

1
(Teoride rağmen, sistem
geneli bilgiden

Yazılan bayt miktarını (senkronize edilmiş, uçuşta boşalmamış) veya önbellekle sürülmek için bir yol var mı? Sürücü başına yazma önbellek boyutuna sahip olsaydım, bunu dusürücüde senkronize edilen gerçek verileri hesaplamak için kullanabilirdim .
unfa

10

Greg'in cevabını kullanarak sync, bellekteki Dirty bloğunun durumunu görüntülerken sadece arka planda çalışabilirsiniz.

Bunu başarmak için bu komutu çalıştırmanız yeterlidir:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

Ön tarafta syncyürütülürken bu arkaplanda arayacaktır watch. Ne zaman synckomutu (Kirli bloğun boyutu 0 ulaştığında civarında) bitmiş olacak, şuna benzer bir çıkışı olacaktır:

1]  + 27260 done        sync

Bu, komutun bittiği anlamına gelir ve watchkomutu Ctrl+ ile öldürebilirsiniz C.


BTW: Bunun eski bir soru olduğunu biliyorum, ancak birileri aradığında Google'da açılan ilk soru ve bulduğum çözümü eklemek istedim.
jflemieux

1
Çok kötü sync / umount çekirdekten güncellemeler alamadı ve söylenirse bu tür şeyleri doğrudan yazdırabilirdi.
mcr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.