Czy mogę obserwować postęp operacji synchronizacji?


103

Skopiowałem duży plik na dysk USB zamontowany w systemie Linux za pomocą asynchronizacji. Powraca to do wiersza poleceń stosunkowo szybko, ale kiedy piszę sync, oczywiście wszystko musi przejść na dysk, a to zajmuje dużo czasu.

Rozumiem, że będzie powoli, ale czy jest gdzieś, gdzie mogę zobaczyć, jak licznik spada do zera? Oglądając buffersw topnie pomaga.


Aby uzyskać więcej informacji, patrz: lwn.net/Articles/572911
lanoxx

Odpowiedzi:


162

Spojrzenie na /proc/meminfoto pokazuje, że Dirtyliczba maleje w czasie, gdy wszystkie dane są buforowane; niektóre z nich mogą się również rozlać Writeback. To będzie podsumowanie dla wszystkich urządzeń, ale w przypadkach, gdy jedno urządzenie w systemie jest znacznie wolniejsze niż pozostałe, zwykle kończy się to tym, że wszystko w tej kolejce jest z nim powiązane. Prawdopodobnie znajdziesz Dirtydużą liczbę, gdy zaczniesz, a skończysz syncmniej więcej w tym samym czasie, gdy zbliża się do 0. Spróbuj uzyskać interaktywny wyświetlacz:

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

W przypadku zwykłych dysków zwykle mogę to zignorować Writeback, ale nie jestem pewien, czy jest on częściej zaangażowany w ścieżkę przesyłania USB. Jeśli odbija się w górę i w dół bez wyraźnego trendu, prawdopodobnie możesz po prostu spojrzeć na Dirtyliczbę.


4
W moim systemie zapisywanie utrzymuje się na poziomie kilku megabajtów, aż do samego końca, kiedy Dirty jest pusty, w którym to momencie zaczyna również spadać.
mattdm,

24

Możesz sprawdzić /sys/block/<device>/statplik odpowiedniego urządzenia podczas synchronizacji. W perspektywie 9 th kolumna wskazuje liczbę żądań w locie na urządzeniu, które powinny zejść do zera, gdy synchronizacja jest wykonywana.
Nie znam sposobu na przetłumaczenie tego na kilka bajtów, ale powinno to dać ci ogólne pojęcie o tym, ile „rzeczy” wciąż czeka.

Zobacz plik stat.txt w dokumentacji jądra, aby uzyskać więcej informacji. (W inflightmoim katalogu jest także plik, który wygląda, jakby mógł zawierać żądania odczytu i zapisu w locie, ale nie mogę znaleźć dokumentów na ten temat).


3
Dla watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
wygody

4
W przypadku mojego dysku USB waha się on około 150 podczas operacji kopiowania i syncpóźniej. To idzie do zera, ale tylko na samym końcu. To sprawia, że ​​druga odpowiedź jest bardziej przydatna do niecierpliwego oglądania postępów.
mattdm,

1
(Chociaż teoretycznie lubię patrzeć tylko na odpowiednie urządzenie, a nie na informacje systemowe).
mattdm,

Czy istnieje sposób na zapisanie bajtów (zsynchronizowanych, opróżnionych w locie) lub zapisanych w pamięci podręcznej na dysku? Gdybym miał rozmiar pamięci podręcznej zapisu na dysk, mógłbym go użyć dudo obliczenia rzeczywistych danych synchronizowanych na dysku.
unfa

10

Korzystając z odpowiedzi Grega, możesz po prostu syncbiegać w tle, wyświetlając stan Brudnego bloku w pamięci.

Aby to osiągnąć, po prostu uruchom następujące polecenie:

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

To zadzwoni syncw tle podczas wykonywania watchz przodu. Kiedy syncpolecenie zakończy się (mniej więcej wtedy, gdy rozmiar Brudnego bloku osiągnie 0), otrzymasz wynik, który wygląda następująco:

1]  + 27260 done        sync

Oznacza to, że polecenie zostało zakończone i możesz je zabić za watchpomocą Ctrl+ C.


BTW: Wiem, że to stare pytanie, ale jest to pierwsze, które pojawia się w Google, gdy ktoś go szuka, i chciałem dodać znalezione rozwiązanie.
jflemieux

1
Szkoda, że ​​synchronizacja / umount nie otrzymywała aktualizacji z jądra i mogła wydrukować tego rodzaju rzeczy bezpośrednio, jeśli otrzyma takie polecenie.
mcr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.