it-swarm-eu.dev

Mohu sledovat postup operace „synchronizace“?

Zkopíroval jsem velký soubor na disk USB připojený k systému Linux s asynchronním připojením. To se vrací k příkazu Prompt relativně rychle, ale když napíšu sync, samozřejmě, vše musí jít na disk, a to trvá dlouho.

Chápu, že to bude pomalé, ale je tam někde, kde mohu sledovat, jak počitadlo klesá na nulu? Sledování buffers in top nepomůže.

110
mattdm

Při pohledu na /proc/meminfo ukáže číslo Dirty zmenšující se v průběhu času, jak se všechna data zařazují; něco z toho se může také dostat do Writeback. Bude to shrnutí všech zařízení, ale v případech, kdy je jedno zařízení v systému mnohem pomalejší než ostatní, obvykle skončíte tam, kde s tím souvisí vše v dané frontě. Na začátku pravděpodobně najdete číslo Dirty velké a sync končí přibližně ve stejnou dobu, kdy se přiblíží 0. Zkuste toto získat interaktivní zobrazení:

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

U běžných disků mohu normálně ignorovat Writeback, ale nejsem si jistý, jestli je do přenosové cesty USB zapojen častěji. Pokud se prostě odrazí nahoru a dolů bez jasného trendu, pravděpodobně se stačí podívat na číslo Dirty.

178
Greg Smith

Můžete se podívat na /sys/block/<device>/stat soubor pro příslušné zařízení během synchronizace. 9tis sloupec udává počet žádostí za letu na zařízení, které by se mělo po dokončení synchronizace snížit na nulu.
Nevím o způsobu, jak to přeložit do několika bytů, ale mělo by vám poskytnout hrubou představu o tom, kolik „věcí“ stále čeká.

Další informace najdete v souboru stat.txt v dokumentaci k jádru. (V tomto adresáři v mém systému je také soubor inflight, který vypadá, že by mohl obsahovat požadavky na čtení a zápis během letu, ale k tomu nemůžu najít dokumenty.)

24
Mat

Pomocí Gregovy odpovědi můžete jednoduše nechat běžet sync na pozadí a zobrazovat stav špinavého bloku v paměti.

Chcete-li toho dosáhnout, jednoduše spusťte tento příkaz:

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

Toto zavolá sync na pozadí, zatímco provede watch vpředu. Až bude příkaz sync dokončen (přibližně když velikost bloku Dirty dosáhne 0), budete mít výstup, který vypadá takto:

1]  + 27260 done        sync

To znamená, že příkaz byl dokončen a můžete příkazem watch zabít Ctrl+C.

12
jflemieux