Linuxのディスククォータの管理|quotacheck / edquota / repquota の実務とXFS prjquota対応

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxのディスククォータの管理|quotacheck / edquota / repquota の実務とXFS prjquota対応
「Linuxサーバーで特定のユーザーがディスクを使いすぎている」
「homeディレクトリが共用なので、ユーザー単位で容量を制限したい」
共用サーバーや開発環境で必ず一度は直面する課題です。

この記事では、Linuxのディスククォータ(quota)の管理方法を、quotacheck・edquota・repquota・quotaonの実コマンド付きで解説します。RHEL9/Ubuntu 24.04 LTS時代に合わせて、ext4だけでなくXFS(プロジェクトクォータ)の運用ポイントもカバーします。

この記事のポイント

・Linuxのディスククォータはユーザー単位/グループ単位で容量制限を設けられる
・ハードリミット=書込み禁止、ソフトリミット=警告(猶予期間付き)の2段階制限
・edquotaで設定し、repquotaで利用状況を確認するのが管理の基本サイクル
・現代のXFSはquotaonでなくmount時オプションprjquotaで有効化する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

Linuxのディスククォータとは:ユーザー/グループ単位の容量制限の仕組み

Linuxでクォータを利用すると、ユーザーごと、もしくはグループごとにディスク容量の制限を設けることができます。

ディスク容量の制限は、サイズ(バイト数)、もしくはiノード数(ファイル数)で指定できます。

共用サーバーや開発環境で誰か1人がディスクを食い潰してサーバー全体が止まる、という事故を防ぐための古典的かつ確実な手段です。20年以上Linuxサーバーを運用してきた経験から言うと、現代のクラウド時代でもオンプレ共用環境ではクォータは現役で使われています。

クォータの4つの制限パラメータ:ハードリミット/ソフトリミット/猶予期間

クォータは、以下のパラメータで制限を設定します。

・ユーザーごとのハードリミット
 1ユーザーが利用できる最大のディスク容量がハードリミットです。
 ハードリミットに達すると、それ以上ファイルを書き込むことができなくなります。

・ユーザーごとのソフトリミット
 容量制限の警告を発するタイミングがソフトリミットです。
 ソフトリミットに達すると、ユーザーに対して警告が発せられますが、ファイルを書き込むことはできます。
 ただし、ソフトリミットを超えたまま一定期間が過ぎると、書込みできなくなります。

・グループごとのハードリミット
 グループ単位でハードリミットを設けることも可能です。
 ハードリミットに達すると、そのグループに属するユーザーは、それ以上ファイルを書き込むことができなくなります。

・グループごとのソフトリミット
 ソフトリミットに達すると、そのグループに属しているユーザーに対して警告が発せられますが、ファイルを書き込むことはできます。
 ただし、ソフトリミットを超えたまま一定期間が過ぎると、書込みできなくなります。

・猶予期間
 ソフトリミットを超えた場合、猶予期間に入ります。
 猶予期間が経過すると、ソフトリミットがハードリミットと見なされ、それ以上のファイルの書込みはできなくなります。
 解除するには、ソフトリミット以下までファイルを削除するなりして容量を空ける必要があります。
 デフォルトでは、7日間が指定されていますが、変更することも可能です。

quotaパッケージのインストール:RHEL系/Debian系の導入手順

クォータコマンド群(quotacheck・edquota・repquota・quotaon)はLinuxの最小インストールには含まれていません。最初にパッケージを導入します。

# RHEL/Rocky Linux/AlmaLinux [root@web01 ~]# dnf install quota # Ubuntu/Debian root@web01:~# apt install quota

導入が終わったらバージョンを確認します。

[root@web01 ~]# quota --version Quota utilities version 4.06.

ext4ファイルシステムでクォータを有効化する:fstabとquotacheckの基本手順

クォータを使用するためには、これから紹介する手順を実施します。今回の例として、/homeディレクトリとしてマウントしている/dev/sda5のファイルシステム(ext4)に対して、ユーザークォータを適用します。

1./etc/fstab の編集
 マウントオプションの指定に「usrquota」を追加します。

# vi /etc/fstab /dev/sda5 /home ext4 defaults,usrquota 1 2

※グループクォータの場合は、「grpquota」を追加します。

2.マウントオプションを有効にするために、一時的にファイルシステムをアンマウントし、再びマウントします。

# umount /home # mount /home # アンマウントできない場合(プロセスがopen中)はリマウントで代替 # mount -o remount /home

3.ユーザーごとのクォータ情報は、クォータ制限をかけるファイルシステムの最上位に保存される aquota.user ファイルに記録されます。最初にこのファイルを作成し、rootのみが読み書き可能なアクセス権を付与します。

# touch /home/aquota.user # chmod 600 /home/aquota.user

4.初期化します。quotacheckはファイルシステム全体を走査して、各ユーザーの現在の利用量を測定し、aquota.userへ書き込みます。

# quotacheck -cum /home # または明示的に # quotacheck -avug

5.クォータを有効にします。

# quotaon /home # 状態確認 # quotaon -p /home

6.edquotaコマンドでユーザーごとのクォータを設定し、repquotaコマンドで確認します。

# edquota pakira # repquota /home

edquotaの実行画面の見方:blocks・soft・hardの設定方法

edquotaを実行すると、viエディタが立ち上がってユーザーごとの設定画面が開きます。

Disk quotas for user pakira (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sda5 12480 0 0 128 0 0

各列の意味は以下のとおりです。

blocks:現在使用中のブロック数(1ブロック=1KB単位)。直接編集してはいけない
soft(左側):ソフトリミット(KB単位)。0は無制限
hard(左側):ハードリミット(KB単位)。0は無制限
inodes:現在のファイル数
soft(右側):iノード数のソフトリミット
hard(右側):iノード数のハードリミット

たとえば、ユーザーpakiraに対し容量1GB(ソフト)/1.2GB(ハード)の制限をかけるなら、soft=1048576・hard=1258291と入力します。

repquotaで全ユーザーの利用状況を一覧確認する

repquotaは、指定ファイルシステム上の全ユーザーのクォータ利用状況を表形式で出力します。日次のディスク監視に組み込むと便利です。

[root@web01 ~]# repquota /home *** Report for user quotas on device /dev/sda5 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 4 0 0 pakira -- 12480 1048576 1258291 128 0 0 www-data -- 524288 1048576 1258291 256 0 0

先頭の「--」は「制限内」、「+-」は「ソフトリミット超過中」、「-+」は「inodeソフト超過中」、「++」は「両方超過」を意味します。

全ファイルシステムを一括で見たい場合は repquota -a を使います。

猶予期間(grace time)を変更する:edquota -tの使い方

ソフトリミット超過の猶予期間は、デフォルトで7日間ですが、edquota -tで変更できます。

[root@web01 ~]# edquota -t Grace period before enforcing soft limits for users: Time units may be: days, hours, minutes, or seconds Filesystem Block grace period Inode grace period /dev/sda5 7days 7days

開発環境で「短く設定して即制限したい」場合は1days、長期データ整理で猶予を持たせたい場合は14daysなど、運用に合わせて変更します。

XFSのプロジェクトクォータ(prjquota):RHEL9時代の標準

RHEL7以降の標準ファイルシステムであるXFSは、ext4とクォータの扱いが大きく異なります。XFSではquotaonコマンドを使わず、mount時のオプション(usrquota / grpquota / prjquota)でクォータを有効化します。

# /etc/fstabに追加(XFSの場合) /dev/sdb1 /data xfs defaults,usrquota,grpquota,prjquota 0 0 # 再マウント [root@web01 ~]# mount -o remount /data # XFS専用のクォータ管理コマンド [root@web01 ~]# xfs_quota -x -c 'limit bsoft=1g bhard=1.2g pakira' /data [root@web01 ~]# xfs_quota -x -c 'report -h' /data

XFSのプロジェクトクォータ(prjquota)は、ディレクトリ単位で制限を設けられる強力な機能で、Dockerコンテナやマルチテナント環境でよく使われます。

【重要】quotacheck運用の落とし穴とトラブル回避

20年以上サーバーを運用してきた経験から、ディスククォータ管理で踏みやすい地雷を3つ挙げておきます。

quotacheckはマウント中に実行しない:書込み中のファイルがあるとaquota.userの計測値がずれます。シングルユーザーモードかリマウントreadonlyにしてから実行するのが鉄則です。
tmpfsやNFSではクォータが効かない:/tmp(tmpfs)はメモリ上のファイルシステムなのでext4/XFSのクォータは無関係。NFSは別途エクスポート側の制限が必要。
SELinuxラベルが壊れる事故:quotacheck後にaquota.userのSELinuxコンテキストが壊れて、システム起動に失敗するケースがあります。restorecon -v /home/aquota.user で復旧します。

# 安全なquotacheck実行手順 [root@web01 ~]# quotaoff /home [root@web01 ~]# mount -o remount,ro /home [root@web01 ~]# quotacheck -avug [root@web01 ~]# mount -o remount,rw /home [root@web01 ~]# quotaon /home

「quota: No such file or directory」が出た時の対処

quotaコマンド実行時によく出るエラーと対処を整理します。

# エラー: aquota.userが存在しない [root@web01 ~]# quota pakira quota: No such file or directory # 対処: 初期化を実行 [root@web01 ~]# quotacheck -cum /home # エラー: mount時のオプションが無い [root@web01 ~]# quotaon /home quotaon: using //aquota.user on /dev/sda5 [/home]: No such process # 対処: /etc/fstabにusrquotaを追加して再マウント [root@web01 ~]# mount -o remount /home

本記事のまとめ:Linuxディスククォータ管理コマンド早見表

クォータは設定さえ済めば、後はOSが自動で制限してくれる優秀な仕組みです。最初の設定だけは丁寧に進めてください。
やりたいこと コマンド
クォータパッケージの導入(RHEL系) dnf install quota
クォータパッケージの導入(Debian系) apt install quota
quotaファイルの初期化 quotacheck -cum /home
クォータの有効化 quotaon /home
クォータの無効化 quotaoff /home
ユーザー単位の設定編集 edquota pakira
グループ単位の設定編集 edquota -g groupname
猶予期間の変更 edquota -t
利用状況の一覧確認 repquota /home
全ファイルシステムの利用状況一覧 repquota -a
XFSのクォータ管理 xfs_quota -x -c 'report -h' /data
quota状態の確認 quotaon -p /home

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。