Si le disque est complètement plein, ce sera un festival ultérieur, donc je reconnais qu'il est affiché avec un petit tampon, mais comment est-ce en fait? Quand je le calcule, ça ne va pas.
$ df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 30909700 14577164 16332536 48% /
L'affichage de df est de 48%, mais `` (use * 100) / (Used + Available) '' Ce calcul donne 47%.
echo "(14577164 * 100) / (14577164 + 16332536)" | bc
47
Essayons les core-utils.
df.c
case PCENT_FIELD:
case IPCENT_FIELD:
{
double pct = -1;
if (! known_value (v->used) || ! known_value (v->available))
;
else if (!v->negate_used
&& v->used <= TYPE_MAXIMUM (uintmax_t) / 100
&& v->used + v->available != 0
&& (v->used + v->available < v->used)
== v->negate_available)
{
uintmax_t u100 = v->used * 100;
uintmax_t nonroot_total = v->used + v->available;
pct = u100 / nonroot_total + (u100 % nonroot_total != 0);
}
Est-ce un sentiment que c'est généralement +1? En premier lieu, ceci `` (u100% nonroot_total! = 0) '' renvoie 0 ou 1.
$ cat x.c
#include <stdio.h>
int main(void)
{
printf("%d\n", (0 != 0));
printf("%d\n", (1 != 0));
}
$ gcc x.c
$ ./a.out
0
1
Recommended Posts