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.