BETA

df によるディスク使用率計算

投稿日:2018-11-29
最終更新:2018-11-29

計算方法

使用率はおおよそ以下のようになる。

ceil(100 * used / (used + avail))

size フィールドではなく used + avail になっているのは、ファイルシステムによる予約領域を考慮したためと思われる。

メモ

statfs(2) , statvfs(3)

これらを呼び出してファイルシステムの使用状況を取得する。

例えば statvfs(3) の manpage を見るとどのようなデータがあるのか書いてある。

struct statvfs {
    unsigned long  f_bsize;    /* file system block size */
    unsigned long  f_frsize;   /* fragment size */
    fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
    fsblkcnt_t     f_bfree;    /* # free blocks */
    fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
    fsfilcnt_t     f_files;    /* # inodes */
    fsfilcnt_t     f_ffree;    /* # free inodes */
    fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
    unsigned long  f_fsid;     /* file system ID */
    unsigned long  f_flag;     /* mount flags */
    unsigned long  f_namemax;  /* maximum filename length */
};

ファイルシステムの予約領域

ext4 はデフォルトで 5% が root ユーザ用に予約されているため、 f_bfreef_bavail が一致しないことが多いだろう。

xfs は ext4 とはアプローチが異なり、ファイルを保存する領域に予約はなく f_bfreef_bavail が一致するようだ。

参考:Does XFS have reserved space for the root user ?

df と snmpdf (Net-SNMP)

df は statvfs(3) などで取得した値を元に計算し、小数点以下は切り上げが行われる。

snmpdf は snmpd が statvfs(3) などで取得した値を受け取って計算し、小数点以下は切り捨てが行われるため、df コマンドの結果とは異なる場合がある。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@albatross0の技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう