「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- これは「ライブ」システムなので、コマンド間で使用可能なディスク容量がわずかに変更されます(704 GB対705 GB)。 - アイドルシステムで実行して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〜300 MBの大容量ビデオクリップがあり、他の(より小さい)ファイルはほとんどありません。

ベストアンサー1

df(1)マニュアルページから次の内容を読むことができます。

値はブロックあたり512バイトの数で表されます。

したがって、1つの結論は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違いを説明します。

おすすめ記事