"pydf"와 "df"가 서로 다른 디스크 사용량 비율을 표시하는 이유는 무엇입니까?

"pydf"와 "df"가 서로 다른 디스크 사용량 비율을 표시하는 이유는 무엇입니까?

몇 가지 다른 디스크 사용량 값을 pydf사용하여 이 현상을 여러 번 확인했습니다 . df예를 들어:

$ df -h | grep sdb1
/dev/sdb1        11T  9.6T  705G  94% /mnt/disk
$ pydf | grep sdb1
/dev/sdb1   11T  10T  704G 88.6 [############.] /mnt/disk

pydf10TB/88.6% 사용된 것으로 표시되고 df -h9.6TB/94% 사용된 것으로 표시됩니다.

인덱스 노드를 추가하더라도 다음이 pydf -i표시됩니다.

$ pydf -i | grep sdb1
/dev/sdb1   349M 205k  349M  0.1 [.............] /mnt/disk

아무래도 0.4TB라는 디스크 공간을 감당하기에는 디스크 공간이 너무 작은 것 같습니다.

참고 - 차이점사용 가능한 디스크 공간이 없습니다.pydf- 이것은 "라이브" 시스템이므로 명령 간에 사용 가능한 디스크 공간이 약간 변경됩니다(704GB 대 705GB). - 유휴 시스템에서 실행하고 KB를 사용하면 와 같은 숫자 입니다 df.

누구든지 차이점을 설명할 수 있나요?

이 예는 Debian Linux 10의 것이지만 다른 시스템에서도 본 적이 있습니다.

추가 정보:

블록 크기는 4096바이트이며 블록 크기를 강제로 적용할 때 비교는 다음과 같습니다("열"과 일치하도록 편집됨).

$ (df --block-size=4096 && pydf --blocks) | grep sdb1
/dev/sdb1  2906334056 2568838216 191006112  94% /mnt/disk
/dev/sdb1  2906334056 2568838332 191005996  88.4 [#######.] /mnt/disk

또, "라이브 시스템"이기 때문에 값이 조금 다르지만, 그러기 위해서는 값(백분율 제외)을 동일하게 불러도 괜찮다고 생각합니다.

해당 파일 시스템에 있는 내용은 기본적으로 DVR(Digital Video Recorder) 데이터 디스크이므로 대부분 50-300MB의 대용량 비디오 클립이 있고 다른 (더 작은) 파일은 거의 없습니다.

답변1

df(1)매뉴얼 페이지 에서 다음과 같은 내용을 읽을 수 있습니다.

값은 블록당 512바이트 개수로 표시됩니다.

따라서 한 가지 결론은 df덩어리로 측정하는 것이고 다른 도구는 다른 것으로 측정하는 것입니다. 두 도구 모두 파일 크기에 대한 정보를 얻기 위해 어떤 형태의 stat 호출( 아마도)을 사용할 수 있습니다 .lstatstat(2)

struct stat {
    ...
    off_t           st_size;    /* file size, in bytes */
    blkcnt_t        st_blocks;  /* blocks allocated for file */

파일 크기는 바이트 단위로 측정되며 파일에 할당된 블록 수입니다. 이것은 테스트를 제안할 수 있습니다. 1바이트를 포함하는 파일의 st_size 및 st_blocks는 무엇입니까?

#include <sys/stat.h>
#include <stdio.h>

int main(void) {
        struct stat buf;
        stat("file", &buf);
        printf("size\t%lld\nblocks\t%lld\n", buf.st_size, buf.st_blocks);
        return 0;
}

스크립트는 blocksize적합한 테스트 파일로 컴파일됩니다.

$ make blocksize
cc -O2 -pipe    -o blocksize blocksize.c
$ printf 1 > file
$ ./blocksize
size    1
blocks  4

1바이트 파일의 크기는 1이지만 이 시스템에서는 4블록의 공간을 소비한다는 것을 보여줍니다. 블록 수와 블록 크기는 다를 수 있지만 이는 파일 크기별로 계산하는 도구( st_size)와 사용된 파일 시스템 블록 수를 계산하는 도구 ( ) st_blocks간의 차이점을 설명합니다 .

관련 정보