1 ディスククォータとは?
ディスククォータは、ユーザごとのディスク使用量に制限をかける機能です。使用可能な使用量をあらかじめ指定することで、特定のユーザーが大量にディスクを消費するといったトラブルを回避することができます。
なお、クォータは、ユーザに対するものと、グループに対するものがあります。ここでは、ユーザに対するクォータの動作確認をしてみます。
2 検証環境
AlmaLinux版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release AlmaLinux release 8.6 (Sky Tiger)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 4.18.0-372.9.1.el8.x86_64
3 インストール方法
quotaパッケージをインストールします。
[root@server ~]# dnf -y install quota
quotaコマンドの版数を確認します。
[root@server ~]# quota -V Quota utilities version 4.04. Compiled with: USE_LDAP_MAIL_LOOKUP EXT2_DIRECT RPC RPC_SETQUOTA BSD_BEHAVIOUR Bugs to jack@suse.cz
4 コマンド概要
ディスククォータに関係するコマンドの概要を以下に示します。
コマンド | 概要 |
---|---|
quota | 現在設定しているクォータの設定内容、および使用状況を表示する |
quotaon | クォータを開始する |
quotaoff | クォータを停止する |
edquota | クォータを設定する。edquotaを実行するとviが起動するので、viの画面で設定をします |
setquota | クォータを設定する。こちらは、コマンドラインで設定可能です |
repquota | クォータの状況を確認する |
5 事前準備
5.1 ファイルシステムの作成
ファイルシステムを作成するデバイスとして、ループバックデバイスを使用します。
まず、ddコマンドを使って、ループバックデバイスとして使用するファイルを作成します。なお、ddコマンドの使い方は、ddコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# dd if=/dev/zero of=disk.imag bs=1024K count=100
作成したファイルをループバックデバイスとして登録します。なお、losetupコマンドの使い方は、losetupコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# losetup -f /root/disk.imag
登録したループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /root/disk.imag 0 512
ループバックデバイスにext4ファイルシステムを作成します。
[root@server ~]# mkfs.ext4 /dev/loop0
作成したファイルシステムを確認します。ext4ファイルシステムが作成できたことがわかります。
[root@server ~]# lsblk -fip /dev/loop0 NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 ext4 62f52db7-61d3-4bae-8169-c6c59ee1cd20
ファイルシステムをマウントするため、fstabの設定をします。fstabに設定するオプションは、ユーザに対してクォータを設定するので、usrquotaを指定します。グループに対してクォータを設定する場合は、grpquotaを指定します。
[root@server ~]# vi /etc/fstab [root@server ~]# cat /etc/fstab -snip- /dev/loop0 /mnt ext4 defaults,usrquota 0 0
作成したループバックデバイスをマウントします。
[root@server ~]# mount -a
ファイルシステムを確認します。ループバックデバイスがマウントできたことがわかります。
[root@server ~]# df -h -t ext4 ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/loop0 93M 1.6M 85M 2% /mnt
5.2 クォータファイルの作成
quotacheckコマンドを使って、クォータファイルを作成します。クォータファイルはファイルシステムのトップディレクトリに作成します。
[root@server ~]# quotacheck -u /mnt
/mnt配下にクォータファイル(aquota.user)が作成されたことがわかります。
[root@server ~]# ls /mnt/ aquota.user lost+found
5.3 クォータの設定
edquotaコマンドを使って、user1にクォータを設定します。edquotaコマンドを実行すると、viが起動します。
[root@server ~]# edquota user1 Disk quotas for user user1 (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/loop0 0 5120 10240 0 0 0
ここでは、softに5M、hardに10Mを設定しました。なお、soft/hardの意味は、次のとおりです。
パラメータ | 意味 |
---|---|
soft | ディスクの使用容量が、あらかじめ指定した容量に達した際、警告を発するという制限 |
hard | ディスクの使用容量が、あらかじめ指定した容量に達した際、ファイルへの書き込みができなくなるという制限 |
user1のクォータを確認します。
[root@server ~]# quota -u user1 -v Disk quotas for user user1 (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/loop0 0 5120 10240 0 0 0
クォータを有効にします。
[root@server ~]# quotaon -v /mnt/ /dev/loop0 [/mnt]: user quotas turned on
5.4 ユーザの作成
クォータの効果を確認するため、作成するユーザは以下の目的で使用します。
・user1:クォータの対象にします。
・user2:クォータの対象にしません。
[root@server ~]# useradd user1 [root@server ~]# useradd user2
user1,user2が/mntにファイルを作成できるように、パミッションを変更します。
[root@server ~]# chmod 777 /mnt
変更したパミッションを確認します。
[root@server ~]# ls -ld /mnt/ drwxrwxrwx. 3 root root 1024 3月 15 20:53 /mnt/
6 クォータの動作確認
6.1 user1の場合
rootからuser1に切り替えます。
[root@server ~]# su - user1 [user1@server ~]$
/mntにファイル(6M)を作成してみます。作成するファイルサイズが、softリミットを超えるので、以下のように警告が表示されます。なお、fallocateコマンドの使い方は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[user1@server ~]$ fallocate -l 6M /mnt/test6M.dat loop0: warning, user block quota exceeded.
作成したファイルを確認します。6Mのファイルが作成できたことがわかります。
[user1@server ~]$ ls -l /mnt/test6M.dat -rw-rw-r--. 1 user1 user1 6291456 3月 15 21:35 /mnt/test6M.dat
user1のクォータを確認します。
[user1@server ~]$ quota -u user1 -v Disk quotas for user user1 (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/loop0 6145* 5120 10240 6days 1 0 0
次に、5Mのファイルを作成すると、以下のエラーメッセージが表示されます。
[user1@server ~]$ fallocate -l 5M /mnt/test5M.dat loop0: write failed, user block limit reached. fallocate: fallocate が失敗: ディスク使用量制限を超過しました
作成したファイルを確認します。hardリミットまでファイルに書き込みができたことがわかります。
[user1@server ~]$ ls -l /mnt/ 合計 10260 -rw-------. 1 root root 7168 3月 15 21:26 aquota.user drwx------. 2 root root 12288 3月 15 20:53 lost+found -rw-rw-r--. 1 user1 user1 4192256 3月 15 21:36 test5M.dat -rw-rw-r--. 1 user1 user1 6291456 3月 15 21:35 test6M.dat
user1のクォータを確認します。
[user1@server ~]$ quota -u user1 -v Disk quotas for user user1 (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/loop0 10240* 5120 10240 6days 2 0 0
6.2 user2の場合
rootからuser2に切り替えます。user2はクォータの設定をしていません。
[root@server ~]# su - user2 [user2@server ~]$
user2はクォータを設定していないため、12Mのファイルを作成することができます。
[user2@server ~]$ fallocate -l 12M /mnt/test12M.dat
作成したファイルを確認します。
[user2@server ~]$ ls -l /mnt/ 合計 22549 -rw-------. 1 root root 7168 3月 15 21:26 aquota.user drwx------. 2 root root 12288 3月 15 20:53 lost+found -rw-rw-r--. 1 user2 user2 12582912 3月 15 21:39 test12M.dat -rw-rw-r--. 1 user1 user1 4192256 3月 15 21:36 test5M.dat -rw-rw-r--. 1 user1 user1 6291456 3月 15 21:35 test6M.dat
7 その他
repquotaコマンドを使うと、各ユーザのクォータの状況を確認することができます。
[root@server ~]# repquota -u /mnt *** Report for user quotas on device /dev/loop0 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 13 0 0 2 0 0 user1 +- 10240 5120 10240 6days 2 0 0 user2 -- 12289 0 0 1 0 0
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ