Pada Edit #2 Anda, penghitungan % Penggunaan perlu diperbarui menjadi ini agar cocok dengan keluaran df:
100.0 * (double) (vfs.f_blocks - vfs.f_bfree) / (double) (vfs.f_blocks - vfs.f_bfree + vfs.f_bavail)
Pemikiran:
Digunakan =f_blocks - f_bfree
Tersedia =f_bavail
df % =Digunakan / (Digunakan + Tersedia)
df
data mungkin didasarkan pada f_bavail
, bukan f_bfree
. Anda mungkin merasa terbantu untuk melihat kode sumber ke df untuk melihat cara kerjanya. Ini memiliki sejumlah kasus tepi yang perlu ditangani (misalnya, ketika ruang yang digunakan melebihi jumlah ruang yang tersedia untuk pengguna non-root), tetapi kode yang relevan untuk kasus normal ada di sini:
uintmax_t u100 = used * 100;
uintmax_t nonroot_total = used + available;
pct = u100 / nonroot_total + (u100 % nonroot_total != 0);
Dengan kata lain, 100 * used / (used + available)
, tercakup. Memasukkan nilai dari output df Anda memberikan 100 * 14159676 / (14159676 + 25837672) = 35.4015371
, yang dibulatkan menjadi 36%, sama seperti df
dihitung.