¿Hay alguna manera de medir el progreso de ext4lazyinit?

17

Había hecho una pregunta sobre ext4lazyinit aquí . Por todo lo que he leído y entendido, simplemente le permite comenzar a usar el disco duro sin crear todos los inodos para su sistema de archivos.

La única manera que sabe o medida lata está monitoreando ext4lazyiniten iotop. ¿Hay alguna forma de obtener su progreso como porcentaje?

shirish
fuente
2
revise este parche de discusión
Krzysztof Stasiak
¿Probaste las utilidades bar [1] o pv [2]? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89
@ mattia.b89 ext4lazyinit no es un programa de espacio de usuario, es un proceso de kernel en segundo plano. Verifique el enlace en la pregunta que apunta a la pregunta original de Shirish sobre esto para obtener información.
Austin Hemmelgarn
Además, tendería a estar de acuerdo con la evaluación de Ted T'so en la discusión del parche que @KrzysztofStasiak vincula, si está en una situación en la que tiene que esperar a que esto termine, probablemente no debería estar usándolo.
Austin Hemmelgarn
@KrzysztofStasiak, ¿podría responder? Creo que es lo más cerca que puedo llegar a la respuesta, FWIW Ted Tso es sinónimo de ext *, por lo que, sean cuales sean sus creencias, son importantes.
Shirish

Respuestas:

1

Verifique esta discusión del parche . Puede inicializar el sistema sin lazyinit, pero no puede medirlo. Si tienes tiempo para esperar, solo espera. Puede probar el parche de la discusión, pero según Patchwork tiene el estado "rechazado".

Krzysztof Stasiak
fuente
1

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.

theaviatrix
fuente
hubiera sido mejor tener un ejemplo dado, así que tenemos una idea de lo que estaríamos viendo exactamente.
Shirish
@shirish Gracias por tu sugerencia.
theaviatrix