2020-10-14に投稿

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

Qrunch から引っ越し

計算方法

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

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 コマンドの結果とは異なる場合がある。

ツイッターでシェア
みんなに共有、忘れないようにメモ

albatross0

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント