容量とクォータ
「ディスクが足りない」と言われて df を打つと使用率は 100%、ところが du で足し算しても合計が全く足りない。この食い違いは故障ではありません。df と du は、そもそも見ているものが違います。
df はファイルシステム、du は名前のあるファイル
df はマウントされているファイルシステムごとに、全体の大きさと使用量と空きと使用率とマウントポイントを出します。
ターミナル
df -h
df -i
df -T
df -h /var| オプション | 意味 |
|---|---|
| -h | 人が読みやすい単位で出す。K や M や G が付く |
| -i | 容量ではなく inode の数で出す |
| -T | ファイルシステムの種類の列を足す |
df に引数としてパスを渡すと、そのパスが属するファイルシステムの1件だけが出ます。/var が独立した区画なのか、ルートと同じ場所なのかは、これで確かめられます。
du は指定したディレクトリから下をたどって、ファイルが占める大きさを足し上げます。
ターミナル
du -sh /var/log
du -h --max-depth=1 /var
du -sh * | sort -h| オプション | 意味 |
|---|---|
| -s | 合計だけを1行で出す。中の内訳は出さない |
| -h | 人が読みやすい単位で出す |
| --max-depth=N | N 階層目までの小計を出す |
| -c | 最後に総計の行を足す |
犯人探しの定石は --max-depth=1 です。まず1段目でどのディレクトリが大きいかを見て、大きい方へ降りて同じことを繰り返します。
消したのに空きが増えない
あるプロセスが開いているファイルを消しても、ディレクトリから名前が消えるだけで実体は残ります。実体が解放されるのは、そのファイルを開いている最後のプロセスが閉じたときです。du は名前をたどって数えるので、名前の消えたファイルは見えません。df はファイルシステムの空きブロックを見るので、まだ解放されていない実体をきっちり数えます。これが食い違いの正体です。
巨大なログを消したのに空きが戻らないのは、ログを書いているプロセスがそのファイルを開いたままだからです。対処はさらに消すことではなく、そのプロセスを再起動するか、設定を再読み込みさせてファイルを開き直させることです。この筋道を説明できるかどうかが問われます。
容量は空いているのに書き込めない
inode は、ファイル1つにつき1つ消費される管理領域です。個数はファイルシステムを作った時点で決まります。小さなファイルを大量に作ると、容量はまだ空いているのに inode を使い切って、新しいファイルが作れなくなります。
df -h では空きがあるのに書けないときは df -i を見ます。IUse% が 100% なら inode の枯渇です。この場合の対処は容量を空けることではなく、不要な小さいファイルを数として減らすことです。
クォータはソフトとハードと猶予期間
クォータは、ユーザーやグループごとにディスクの使用量を制限する仕組みです。この学習環境には関連コマンドが入っていないため、ここは用語と書式を押さえます。
有効にするには、対象のファイルシステムの /etc/fstab のマウントオプションに usrquota か grpquota を足します。
プレーンテキスト
UUID=xxxx /home ext4 defaults,usrquota,grpquota 0 2| コマンド | 役割 |
|---|---|
| quotacheck | 走査して管理ファイルを作る、または整合を取る |
| quotaon / quotaoff | クォータの有効化と無効化 |
| edquota | 制限値を対話で編集する |
| setquota | 制限値を非対話で設定する |
| quota | あるユーザーの使用量と制限を表示する |
| repquota | ファイルシステム全体の使用状況を一覧で出す |
制限値は3語で整理します。ソフトリミットは一時的に超えてよい上限で、超えると警告が出て猶予期間が始まります。ハードリミットは絶対に超えられない上限で、達した時点で書き込みが失敗します。猶予期間はソフトリミットを超えたまま居られる期間で、これを過ぎるとソフトリミットがハードリミットのように働きます。制限は容量 blocks と個数 inodes の両方に掛けられます。
試験で狙われるところ
df はファイルシステムの空きブロック、du は名前のあるファイルの合計です。削除済みでプロセスが開いているファイルがあると、この2つはずれます。容量に空きがあっても inode が尽きれば書けません。そしてソフトリミットを超えただけでは書き込みは止まらず、猶予期間の間は書けます。