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.