Gibt es eine Möglichkeit, den Fortschritt von ext4lazyinit zu messen?

17

Ich hatte eine Frage zu ext4lazyinit frage hier . Nach allem, was ich gelesen und verstanden habe, können Sie einfach mit der Verwendung der Festplatte beginnen, ohne alle Inodes für Ihr Dateisystem zu erstellen.

Die einzige Möglichkeit, die Sie kennen oder messen können, ist die Überwachung ext4lazyinitin iotop. Gibt es eine Möglichkeit, den Fortschritt in Prozent zu berechnen?

shirish
quelle
2
check this patch discussion
Krzysztof Stasiak
Haben Sie die Dienstprogramme bar [1] oder pv [2] ausprobiert? [1]: [ archlinux.org/packages/community/any/bar/] [2]: [ archlinux.org/packages/community/x86_64/pv/]
mattia.b89
@ mattia.b89 ext4lazyinit ist kein Userspace-Programm, sondern ein Hintergrund-Kernel-Prozess. Überprüfen Sie den Link in der Frage, der auf shirishs ursprüngliche Frage dazu verweist, um Informationen zu erhalten.
Austin Hemmelgarn
Außerdem würde ich Ted T'sos Einschätzung in der Patch-Diskussion, die mit @KrzysztofStasiak verknüpft ist, eher zustimmen. Wenn Sie in einer Situation sind, in der Sie darauf warten müssen, dass dies abgeschlossen ist, sollten Sie es wahrscheinlich nicht verwenden.
Austin Hemmelgarn
@KrzysztofStasiak könntest du eine Antwort daraus machen, ich denke das ist der nächste Punkt, den ich auf die Antwort bekommen kann. FWIW Ted Tso ist synonym mit ext *, was auch immer seine Überzeugungen sind, sie sind wichtig.
Shirish

Antworten:

1

Überprüfen Sie diese Patch- Diskussion. Sie können das System ohne Lazyinit initialisieren, aber nicht messen. Wenn Sie Zeit zum Warten haben, warten Sie einfach. Sie können versuchen, Patches aus der Diskussion zu entfernen, laut Patchwork lautet der Status jedoch "Abgelehnt".

Krzysztof Stasiak
quelle
1

Ich habe anscheinend einen Weg gefunden, um den Fortschritt von ext4lazyinit abzuschätzen.

TL; DR: siehe Skript unten.

Bei dieser Methode wird davon ausgegangen, dass der Datenträger seit dem ersten Mounten der Partition weder getrennt noch das System neu gestartet wurde und dass Sie genau so viele Daten auf die Partition geschrieben haben, wie gerade verwendet werden (also keine Löschung) oder Änderung von Dateien).

Schritt 1 : Vergleichen Sie die Partitionsgröße in fdisk (konvertiert in kiB) mit der Anzahl der 1K-Blöcke in df. Subtrahieren Sie (Anzahl der 1K-Blöcke) von (Partitionsgröße in kiB), um (ungefähre Größe der Inode-Tabelle) zu erhalten.

EDIT: Beispiel, 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 Sektoren * 512 Bytes / Sektor / 1024 = 5860488175,5 kiB (fast 5,5 TiB, wie fdisk sagt). Minus dfs 5813233164 entspricht 47255011,5 kiB (ungefähr 45 GiB) für die ungefähre Größe der Inode-Tabelle.

Schritt 2 : Holen Sie sich (Gesamt-KB in Partition geschrieben):

awk '{ print $3"\t"$10 }' /proc/diskstats

Wählen Sie die richtige Zeile für Ihre Partition und konvertieren Sie sie in KB.

EDIT: Beispiel:

sdb     260040
sdb1    260040
sdd     2530109116
sdd1    2530108940

Bei Verwendung von sdd1 sind in meinem Fall insgesamt geschriebene kiB = 2530108940 Sektoren * 512 Bytes / Sektor / 1024 = 1265054470 kiB (fast 1,2 TiB).

Schritt 3 : Nur erforderlich, wenn Sie bereits Daten in das Dateisystem geschrieben haben. Subtrahieren Sie (Anzahl der 1K-Blöcke USED, in df) von (Gesamtzahl der in die Partition geschriebenen kiB), um (ca. kiB in die Inode-Tabelle geschrieben) zu erhalten.

BEARBEITEN: Beispiel: ungefähre in die Inode-Tabelle geschriebene kiB = 1265054470 (ab Schritt 2) - 1217095176 (siehe df-Ausgabe in Schritt 1) ​​= 47959294 kiB (45,7 GiB)

Schritt 4 : Dividieren Sie (ca. kiB, geschrieben in die Inode-Tabelle) durch (ungefähre Größe der Inode-Tabelle in kiB) und multiplizieren Sie mit 100, um den Fortschritt als Prozentsatz zu erhalten.

BEARBEITEN: Beispiel: ungefährer Fortschritt = 47959294 / 47255011.5 * 100% = 101.5%

Skript

Oder um das als partielles Skript zu schreiben (wobei ich mich aus Sicherheitsgründen weigere, einen Aufruf von fdisk zu schreiben):

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") %"

Aufruf mit $ 1 = "Name der Partition" (zB sdd1), $ 2 = "Sektoren der Partition nach fdisk", $ 3 = "Einhängepunkt ohne abschließenden Schrägstrich"

Testergebnisse

Ich habe meine Methode nur einmal getestet. Installieren:

  • 6 TB Partition

  • Verschlüsselung mit Cryptsetup

  • Dateisystem erstellt mit Standardparametern außer -m 0

  • 279 GiB Dateien, die auf die Partition geschrieben wurden, bevor ext4lazyinit abgeschlossen wurde.

Ergebnis : ein Messwert von 99,7% zum Zeitpunkt der Fertigstellung :-)

BEARBEITEN: Dieselbe Festplatte ergibt nach dem Schreiben von fast einem weiteren TiB Daten eine Schätzung von 101,5%. Genau genug, um nützlich zu sein, denke ich.

die Matrix
quelle
Es wäre schöner gewesen, ein Beispiel zu geben, damit wir eine Vorstellung davon haben, was genau wir uns ansehen würden.
Shirish
@ shirish Vielen Dank für Ihren Vorschlag.
Matrix