Bei Ihrer Bearbeitung Nr. 2 muss die Usage%-Berechnung so aktualisiert werden, dass sie mit der df-Ausgabe übereinstimmt:
100.0 * (double) (vfs.f_blocks - vfs.f_bfree) / (double) (vfs.f_blocks - vfs.f_bfree + vfs.f_bavail)
Argumentation:
Verwendet =f_blocks - f_bfree
Verfügbarkeit =f_bavail
df % =Benutzt / (Benutzt + Verfügbar)
df
Die Daten von können auf f_bavail
basieren , nicht f_bfree
. Möglicherweise finden Sie es hilfreich, sich den Quellcode von df anzusehen, um zu sehen, wie es funktioniert. Es muss mit einer Reihe von Randfällen fertig werden (zB wenn der belegte Platz den Platz übersteigt, der Nicht-Root-Benutzern zur Verfügung steht), aber der relevante Code für den Normalfall ist hier:
uintmax_t u100 = used * 100;
uintmax_t nonroot_total = used + available;
pct = u100 / nonroot_total + (u100 % nonroot_total != 0);
Mit anderen Worten, 100 * used / (used + available)
, aufgerundet. Das Einfügen der Werte aus Ihrer df-Ausgabe ergibt 100 * 14159676 / (14159676 + 25837672) = 35.4015371
, was aufgerundet 36 % ergibt, ebenso wie df
berechnet.