
KB, MB 및 GB에 대한 df 출력을 나열하면 일치하지 않습니다.
$ df -k |grep xvdb
/dev/xvdb1 12796048 732812 11413172 7% /xxx
$ df -m |grep xvdb
/dev/xvdb1 12497 716 11146 7% /xxx
$ df -h |grep xvdb
/dev/xvdb1 13G 716M 11G 7% /xxx
- 12796048 KB = 12496.14 MB이므로 약간 부족하지만 괜찮습니다.
- 12796048KB = 12.2GB, 12407MB도 12.2GB입니다.
그렇다면 df가 13GB로 표시되는 이유는 무엇입니까?아니면 내가 뭔가를 놓치고 있는 걸까?
전체 DF 목록은 다음과 같습니다.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.5G 1.7G 5.5G 24% /
none 5.8G 128K 5.8G 1% /dev
none 5.8G 0 5.8G 0% /dev/shm
none 5.8G 44K 5.8G 1% /var/run
none 5.8G 0 5.8G 0% /var/lock
none 5.8G 0 5.8G 0% /lib/init/rw
/dev/xvdb1 13G 716M 11G 6% /xxx
Coreutils 버전은 info coreutils
다음 과 같이 7.4인 것 같습니다.
이 매뉴얼은 GNU 핵심 유틸리티 버전 7.4를 문서화하고 있습니다.
답변1
df
-h
항상 사람이 읽을 수 있는 출력( 및 ) 을 반올림합니다 -H
.
coreutils 패키지의 소스 코드에서 반올림, 단위 변환 등을 제공하는 함수 lib/human.h
에 대한 옵션 열거형 :human_readable
/* Options for human_readable. */
enum
{
/* Unless otherwise specified these options may be ORed together. */
/* The following three options are mutually exclusive. */
/* Round to plus infinity (default). */
human_ceiling = 0,
/* Round to nearest, ties to even. */
human_round_to_nearest = 1,
/* Round to minus infinity. */
human_floor = 2,
...
댓글을 참고하세요.Round to plus infinity (default).
실제 반올림은 위에 표시된 다른 반올림 옵션이 설정되지 않은 경우 (예: )를 human.c
추가하는 다음 함수에서 발생할 가능성이 높습니다( 설정 되지 않고 1024를 단위 증분으로 사용하고 SI 스타일 접미사를 인쇄하는 자동 크기 조정이 발생함). 즉 ) 값이 정수가 아닙니다.true
1
-h
human_autoscale | human_SI | human_base_1024
G
static long double
adjust_value (int inexact_style, long double value)
{
/* Do not use the floorl or ceill functions, as that would mean
checking for their presence and possibly linking with the
standard math library, which is a porting pain. So leave the
value alone if it is too large to easily round. */
if (inexact_style != human_round_to_nearest && value < UINTMAX_MAX)
{
uintmax_t u = value;
value = u + (inexact_style == human_ceiling && u != value);
}
return value;
}
답변2
일반적으로 이는 서식 지정 시스템의 비효율성과 관련이 있습니다. 예를 들어, 파일의 크기는 12.2g(정확함)일 수 있지만 실제 디스크에서는 13GB의 공간을 차지할 수 있습니다. 그 이유는 "블로킹"는 조각화의 결과입니다.
위키피디아: 파일 길이가 블록 크기의 정수 배수가 아닌 경우가 많아 파일의 마지막 블록이 부분적으로 비어 있기 때문에 내부 조각화로 인해 공간 비효율성이 발생합니다.이렇게 하면 파일당 평균 블록 절반에 해당하는 여유 공간이 생성됩니다.일부 최신 파일 시스템에서는 블록 하위 할당 및 테일 병합이라는 기술을 통해 이 문제를 해결하려고 시도합니다.
편집하다:
매뉴얼 페이지에는 다음과 같이 나와 있습니다.
SIZE는 다음 중 하나일 수 있습니다(또는 선택적으로 뒤에 오는 정수일 수 있음). G, T, P, E, Z, Y의 경우 kB 1000, K 1024, MB 1000*1000, M 1024*1024 등 .
이로 인해 M 대신 MB를 사용하고 있을 수 있으므로 12.796이 표시되며 아마도 13으로 반올림됩니다.
답변3
멀티 테라바이트 파일 시스템에 대한 최근 경험에 따르면 'df -h'의 크기 조정은 혼란스러울 수 있습니다. '전체 크기' 열은 정수로 반올림되고 항상 증가하는 반면 'used' 및 'available' 열은 증가하기 때문입니다. 소수점 이하 1자리까지 스케일링되어 반올림됩니다. 이렇게 하면 전체 크기가 실제보다 거의 전체 '단위'로 표시될 수 있습니다. 그 효과는 MB, GB, TB 등 크기가 작을 때 가장 분명하게 나타납니다.