Parece que he encontrado una manera de aproximar el progreso de ext4lazyinit.
TL; DR: vea la secuencia de comandos a continuación.
Este método supone que el disco nunca se ha desconectado (ni se ha reiniciado el sistema) desde la primera vez que se montó la partición, y que ha escrito exactamente la misma cantidad de datos que la que está en uso en la partición (por lo tanto, no hay eliminación) o modificación de archivos).
Paso 1 : Compare el tamaño de la partición en fdisk (convertido a kiB) con el número de bloques 1K que se muestran en df. Reste (número de bloques 1K) de (tamaño de partición en kiB) para obtener (tamaño aproximado de la tabla de inodo).
EDITAR: Ejemplo, 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 sectores * 512 bytes / sector / 1024 = 5860488175.5 kiB (casi 5.5 TiB, como dice fdisk). Menos 5813233164 de df es igual a 47255011.5 kiB (unos 45 GiB) para el tamaño aproximado de la tabla de inodo.
Paso 2 : Obtener (kiB total escrito en la partición):
awk '{ print $3"\t"$10 }' /proc/diskstats
Elija la línea correcta para su partición y conviértala a kiB.
EDITAR: ejemplo:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
Usando sdd1 en mi caso, kiB total escrito = 2530108940 sectores * 512 bytes / sector / 1024 = 1265054470 kiB (casi 1.2 TiB).
Paso 3 : solo es necesario si ya ha escrito datos en el sistema de archivos. Reste (número de bloques 1K UTILIZADOS, que se muestran en df) de (kiB total escrito en la partición) para obtener (kiB aproximado escrito en la tabla de inodo).
EDITAR: ejemplo: kiB aproximado escrito en la tabla de inodo = 1265054470 (desde el paso 2) - 1217095176 (ver salida de df en el paso 1) = 47959294 kiB (45.7 GiB)
Paso 4 : Divida (aproximadamente kiB escrito en la tabla de inodo) por (tamaño aproximado de la tabla de inodo en kiB) y multiplique por 100 para obtener el progreso como un porcentaje.
EDITAR: ejemplo: progreso aproximado = 47959294 / 47255011.5 * 100% = 101.5%
Guión
O para escribir eso como una secuencia de comandos parcial (donde me niego a escribir una llamada a fdisk, por razones de seguridad):
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") %"
Llame con $ 1 = "nombre de partición" (por ejemplo, sdd1), $ 2 = "sectores de partición de acuerdo con fdisk", $ 3 = "punto de montaje sin barra inclinada"
Resultados de la prueba
Solo he probado mi método una vez. Preparar:
Partición de 6 TB
cifrado usando cryptsetup
sistema de archivos creado con parámetros predeterminados excepto -m 0
279 GiB de archivos escritos en la partición antes de que ext4lazyinit se complete.
Resultado : una lectura del 99,7% en el momento de la finalización :-)
EDITAR: el mismo disco, después de escribirle casi otro TiB de datos, ahora produce una estimación del 101.5%. Lo suficientemente preciso como para ser útil, creo.