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