Existe-t-il un moyen de mesurer les progrès de ext4lazyinit?

17

J'avais posé une question sur ext4lazyinit ici . D'après tout ce que j'ai lu et compris, cela vous permet simplement de commencer à utiliser le disque dur sans créer tous les inodes pour votre système de fichiers.

La seule façon que vous savez ou mesure peut surveille ext4lazyiniten iotop. Existe-t-il un moyen d'obtenir ses progrès en pourcentage?

shirish
la source
2
consultez cette discussion sur les correctifs
Krzysztof Stasiak
Avez-vous essayé les utilitaires bar [1] ou pv [2]? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89
@ mattia.b89 ext4lazyinit n'est pas un programme en espace utilisateur, c'est un processus de noyau en arrière-plan. Vérifiez le lien dans la question pointant vers la question originale de shirish à ce sujet pour plus d'informations.
Austin Hemmelgarn
En outre, j'aurais tendance à être d'accord avec l'évaluation de Ted T'so dans la discussion sur les correctifs que @KrzysztofStasiak a liée, si vous êtes dans une situation où vous devez attendre que cela se termine, vous ne devriez probablement pas l'utiliser.
Austin Hemmelgarn
@KrzysztofStasiak pourriez-vous en faire une réponse, je pense que c'est le plus proche que je peux obtenir de la réponse, FWIW Ted Tso est synonyme d'ext * donc quelles que soient ses croyances, elles sont importantes.
shirish

Réponses:

1

Consultez cette discussion sur les correctifs . Vous pouvez initialiser le système sans lazyinit, mais vous ne pouvez pas le mesurer. Si vous avez le temps d'attendre, attendez simplement. Vous pouvez essayer le patch à partir de la discussion, mais selon Patchwork il a l'état "rejeté".

Krzysztof Stasiak
la source
1

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.

theaviatrix
la source
il aurait été plus agréable d'avoir un exemple donné, nous avons donc une idée de ce que nous examinerions exactement.
shirish
@shirish Merci pour votre suggestion.
theaviatrix