hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

ディスククォータの使い方



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技術ブログ