Czy istnieje sposób pomiaru postępu ext4lazyinit?

17

Zadałem tutaj pytanie dotyczące ext4lazyinit . Z tego, co przeczytałem i zrozumiałem, po prostu pozwala rozpocząć korzystanie z dysku twardego bez tworzenia wszystkich i-węzłów dla systemu plików.

Jedynym sposobem, aby wiedzieć, czy środek może monitoruje ext4lazyinitsię iotop. Czy istnieje sposób na uzyskanie postępu w procentach?

shirish
źródło
2
sprawdzić ten plaster dyskusji
Krzysztof Stasiak
Czy wypróbowałeś narzędzia bar [1] lub pv [2]? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89
@ mattia.b89 ext4lazyinit nie jest programem przestrzeni użytkownika, to proces jądra w tle. Aby uzyskać informacje, sprawdź link w pytaniu wskazującym na oryginalne pytanie Shirisha na ten temat.
Austin Hemmelgarn,
Chciałbym również zgodzić się z oceną Teda T'so w dyskusji o łatce, którą @KrzysztofStasiak powiązał, jeśli jesteś w sytuacji, w której musisz poczekać, aż to się skończy, prawdopodobnie nie powinieneś jej używać.
Austin Hemmelgarn
@KrzysztofStasiak, czy możesz udzielić odpowiedzi, myślę, że jest to najbliższa odpowiedź, FWIW Ted Tso jest synonimem ext *, więc niezależnie od jego przekonań, są one ważne.
shirish

Odpowiedzi:

1

Sprawdź tę dyskusję o łatce . Możesz zainicjalizować system bez lazyinit, ale nie możesz go zmierzyć. Jeśli masz czas czekać, po prostu poczekaj. Możesz wypróbować łatkę z dyskusji, ale według Patchwork ma ona stan „odrzucony”.

Krzysztof Stasiak
źródło
1

Wydaje mi się, że znalazłem sposób na przybliżenie postępu ext4lazyinit.

TL; DR: patrz Skrypt poniżej.

Ta metoda zakłada, że ​​dysk nigdy nie został odłączony (ani system nie został ponownie uruchomiony) od pierwszego podłączenia partycji i że zapisałeś dokładnie tyle danych na partycji, ile jest na niej użytych (więc nie ma możliwości usunięcia lub modyfikacja plików).

Krok 1 : Porównaj rozmiar partycji w fdisk (przekonwertowany na kiB) z liczbą bloków 1K pokazanych w df. Odejmij (liczbę bloków 1K) od (rozmiar partycji w kiB), aby uzyskać (przybliżony rozmiar tabeli i-węzłów).

EDYCJA: Przykład, fdisk:

Sector size (logical/physical): 512 bytes / 4096 bytes
(...omitted...)
Device     Start         End     Sectors  Size Type
/dev/sdd1   2048 11720978398 11720976351  5.5T Linux filesystem

df:

Filesystem              1K-blocks       Used  Available Use% Mounted on
/dev/mapper/workbackup 5813233164 1217095176 4596121604  21% /mnt/backup_work

11720976351 sektorów * 512 bajtów / sektor / 1024 = 5860488175,5 kiB (prawie 5,5 TiB, jak mówi fdisk). 5813233164 firmy Minus df równa się 47255011,5 kiB (około 45 GiB) dla przybliżonego rozmiaru tabeli i-węzłów.

Krok 2 : Pobierz (całkowita kiB zapisana na partycję):

awk '{ print $3"\t"$10 }' /proc/diskstats

Wybierz odpowiednią linię dla swojej partycji i przekonwertuj ją na kiB.

EDYCJA: przykład:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

Używając sdd1 w moim przypadku, całkowita liczba zapisanych kiB = 2530108940 sektorów * 512 bajtów / sektor / 1024 = 1265054470 kiB (prawie 1,2 TiB).

Krok 3 : Potrzebny tylko, jeśli już zapisałeś jakiekolwiek dane w systemie plików. Odejmij (liczba WYKORZYSTYWANYCH bloków 1K, pokazane w df) od (całkowite kiB zapisane do partycji), aby uzyskać (przybliżone kiB zapisane do tabeli i-węzłów).

EDYCJA: przykład: przybliżone kiB zapisane do tabeli i-węzłów = 1265054470 (z kroku 2) - 1217095176 (patrz wyjście df w kroku 1) = 47959294 kiB (45,7 GiB)

Krok 4 : Podziel (przybliżone kiB zapisane do tabeli i-węzłów) przez (przybliżony rozmiar tabeli i-węzłów w kiB) i pomnóż przez 100, aby uzyskać postęp jako procent.

EDYCJA: przykład: przybliżony postęp = 47959294 / 47255011,5 * 100% = 101,5%

Scenariusz

Lub napisać to jako skrypt częściowy (ze względów bezpieczeństwa odmawiam skryptu wywołania fdisk):

let sectorsize=$(cat /sys/block/sda/queue/hw_sector_size)
let partsize=$2*$sectorsize/1024
let fssize=$(df -- "$3" | tail -n -1 | awk '{print $2}')
let approxinodetablesize=$partsize-$fssize
let tkw=$(awk "/$1/"' {print $10}' /proc/diskstats | head -n 1)*$sectorsize/1024
let used=$(df -- "$3" | tail -n -1 | awk '{print $3}')
let tkw_inodetable=$tkw-$used
echo "Approximate progress: $(bc -l <<< "$tkw_inodetable*100.0/$approxinodetablesize") %"

Wywołaj za pomocą $ 1 = „nazwa partycji” (np. Sdd1), $ 2 = „sektory partycji według fdisk”, $ 3 = „punkt montowania bez końcowego ukośnika”

Wyniki testu

Metodę przetestowałem tylko raz. Ustawiać:

  • Partycja 6 TB

  • szyfrowanie przy użyciu cryptsetup

  • system plików utworzony z domyślnymi parametrami oprócz -m 0

  • 279 GiB plików zapisanych na partycji przed zakończeniem ext4lazyinit.

Wynik : odczyt 99,7% w momencie ukończenia :-)

EDYCJA: ten sam dysk, po zapisaniu prawie innego TiB danych, daje teraz szacunkową wartość 101,5%. Myślę, że jest wystarczająco dokładny, aby był użyteczny.

theaviatrix
źródło
lepiej byłoby podać przykład, więc mamy pojęcie, na co dokładnie będziemy patrzeć.
shirish
@shirish Dziękujemy za sugestię.
theaviatrix