Mi sembra di aver trovato un modo per approssimare l'avanzamento di ext4lazyinit.
TL; DR: vedi Script sotto.
Questo metodo presuppone che il disco non sia mai stato disconnesso (né che il sistema sia stato riavviato) dalla prima volta in cui è stata montata la partizione e che hai scritto esattamente tutti i dati sulla partizione che sono in uso su di essa (quindi nessuna cancellazione o modifica dei file).
Passaggio 1 : confrontare la dimensione della partizione in fdisk (convertita in kiB) con il numero di blocchi 1K mostrati in df. Sottrai (numero di blocchi da 1K) da (dimensione della partizione in kiB) per ottenere (dimensione approssimativa della tabella degli inode).
EDIT: Esempio, 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 settori * 512 byte / settore / 1024 = 5860488175,5 kiB (quasi 5,5 TiB, come dice fdisk). 5813233164 di meno df equivale a 47255011,5 kiB (circa 45 GiB) per la dimensione approssimativa della tabella degli inode.
Passaggio 2 : Ottieni (kiB totale scritto nella partizione):
awk '{ print $3"\t"$10 }' /proc/diskstats
Scegli la linea giusta per la tua partizione e convertila in kiB.
EDIT: esempio:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
Usando sdd1 nel mio caso, kiB totale scritto = 2530108940 settori * 512 byte / settore / 1024 = 1265054470 kiB (quasi 1,2 TiB).
Step 3 : Necessario solo se hai già scritto dei dati nel filesystem. Sottrai (numero di blocchi 1K USATI, mostrato in df) da (kiB totale scritto nella partizione) per ottenere (circa kiB scritto nella tabella degli inode).
EDIT: esempio: kiB approssimativo scritto nella tabella di inode = 1265054470 (dal passaggio 2) - 1217095176 (vedere output df nel passaggio 1) = 47959294 kiB (45,7 GiB)
Passaggio 4 : dividere (approssimativamente kiB scritto nella tabella di inode) per (dimensione approssimativa della tabella di inode in kiB) e moltiplicare per 100 per ottenere l'avanzamento in percentuale.
EDIT: esempio: progresso approssimativo = 47959294 / 47255011.5 * 100% = 101.5%
copione
O per scriverlo come uno script parziale (dove rifiuto di scrivere una chiamata a fdisk, per motivi di sicurezza):
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") %"
Chiama con $ 1 = "nome della partizione" (es. Sdd1), $ 2 = "settori della partizione secondo fdisk", $ 3 = "punto di montaggio senza barra finale"
Risultati del test
Ho testato il mio metodo solo una volta. Impostare:
Partizione da 6 TB
crittografia tramite cryptsetup
filesystem creato con parametri predefiniti tranne -m 0
279 GiB di file scritti nella partizione prima del completamento di ext4lazyinit.
Risultato : una lettura del 99,7% al momento del completamento :-)
EDIT: lo stesso disco, dopo aver scritto quasi un altro TiB di dati su di esso, ora fornisce una stima del 101,5%. Penso che sia abbastanza accurato per essere utile.