Il me semble avoir trouvé un moyen d'approcher les progrès de ext4lazyinit.
TL; DR: voir Script ci-dessous.
Cette méthode suppose que le disque n'a jamais été déconnecté (ni redémarré le système) depuis la toute première fois que la partition a été montée, et que vous avez écrit exactement autant de données sur la partition que celles qui y sont utilisées (donc pas de suppression ou modification de fichiers).
Étape 1 : Comparez la taille de la partition dans fdisk (convertie en kiB) au nombre de blocs 1K indiqué dans df. Soustrayez (nombre de blocs 1K) de (taille de la partition en kio) pour obtenir (taille approximative de la table des inodes).
EDIT: Exemple, 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 secteurs * 512 octets / secteur / 1024 = 5860488175,5 kiB (près de 5,5 TiB, comme le dit fdisk). Le moins 5813233164 de df est égal à 47255011,5 kio (environ 45 Gio) pour la taille approximative de la table des inodes.
Étape 2 : obtenir (kio total écrit sur la partition):
awk '{ print $3"\t"$10 }' /proc/diskstats
Choisissez la bonne ligne pour votre partition et convertissez-la en kiB.
EDIT: exemple:
sdb 260040
sdb1 260040
sdd 2530109116
sdd1 2530108940
En utilisant sdd1 dans mon cas, le kio total écrit = 2530108940 secteurs * 512 octets / secteur / 1024 = 1265054470 kiB (près de 1,2 TiB).
Étape 3 : nécessaire uniquement si vous avez déjà écrit des données dans le système de fichiers. Soustrayez (nombre de blocs 1K UTILISÉS, indiqué en df) de (kio total écrit sur la partition) pour obtenir (kio approximatif écrit dans la table d'inode).
EDIT: exemple: kio approximatif écrit dans la table des inodes = 1265054470 (de l'étape 2) - 1217095176 (voir sortie df à l'étape 1) = 47959294 kiB (45,7 Gio)
Étape 4 : Divisez (environ kiB écrit dans la table des inodes) par (taille approximative de la table des inodes en kiB) et multipliez par 100 pour obtenir la progression en pourcentage.
EDIT: exemple: progrès approximatif = 47959294 / 47255011,5 * 100% = 101,5%
Scénario
Ou d'écrire cela comme un script partiel (où je refuse de scripter un appel à fdisk, pour des raisons de sécurité):
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") %"
Appel avec $ 1 = "nom de la partition" (par exemple sdd1), $ 2 = "secteurs de partition selon fdisk", $ 3 = "point de montage sans barre oblique"
Résultats de test
Je n'ai testé ma méthode qu'une seule fois. Installer:
Partition de 6 To
chiffrement à l'aide de cryptsetup
système de fichiers créé avec des paramètres par défaut sauf -m 0
279 Gio de fichiers écrits sur la partition avant la fin d'ext4lazyinit.
Résultat : une lecture de 99,7% au moment de l'achèvement :-)
EDIT: le même disque, après y avoir écrit presque un autre TiB de données, donne maintenant une estimation de 101,5%. Assez précis pour être utile, je pense.