最新版は以下に記載しています。
https://hana-shin.hatenablog.com/entry/2023/03/17/203829
#1 ディスククォータとは?
ファイルシステムに対してクォータ(利用制限)をかける機能です。
誤って、ファイルシステムを大量に使用してしまう等のトラブルを避けることができます。
たとえば、/var/spool/mail
および/home
で、それぞれクォータをかけたい場合、
/var/spool/mail
に1ファイルシステム、/home
に1ファイルシステムを作成します。
そして、それぞれのファイルシステムに対して、クォータを設定します。
クォータは、ユーザに対するものと、グループに対するものがあります。
ここでは、ユーザに対するクォータを設定してみます。
#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@server ~]# uname -r
3.10.0-957.el7.x86_64
#3 コマンドのインストール
[root@server ~]# yum -y install quota
[root@server ~]# rpm -qa|grep quota
quota-4.01-19.el7.x86_64
#4 コマンド概要
ディスククォータの設定、参照等を行うコマンド概要を以下に示します。
コマンド | 概要 |
---|---|
quota | 現在設定しているクォータの設定内容、および使用状況を表示する |
quotaon | クォータを開始する |
quotaoff | クォータを停止する |
edquota | クォータを設定する。viが起動します。viの画面で設定します |
setquota | クォータを設定する。こちらは、コマンドラインで設定可能です |
repquota | クォータの状況を確認する |
#5 事前準備
テスト用に使うファイルシステムを作成します。
##5.1 ファイルシステムの作成
ループバックデバイスに使うファイルを作成します。
ここでは、100Mのファイルを作成してみます。
なお、ddコマンドの使い方は、ここ(ddコマンドの使い方)を参照してください。
[root@server ~]# dd if=/dev/zero of=disk.imag bs=1024K count=100
[root@server ~]# ls -l disk.imag
-rw-r--r--. 1 root root 104857600 2月 11 10:44 disk.imag
作成したファイルをループバックデバイスとして登録します。
[root@server ~]# losetup -f /root/disk.imag
[root@server ~]# losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0 0 0 0 0 /root/disk.imag
ループバックデバイスにext4ファイルシステムを作成します。
[root@server ~]# mkfs.ext4 /dev/loop0
作成したファイルシステムを確認します。
ext4ファイルシステムが作成できたことがわかります。
[root@server ~]# lsblk -fip /dev/loop0
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/loop0 ext4 f8aeef1b-a3b1-4481-bb13-ea0c65d436fd
##5.2 /etc/fstabの編集
/etc/fstab
に設定するディスククォータのオプションは、以下のものがあります。
・ユーザに対してクォータを設定する場合:usrquota
・グループに対してクォータを設定する場合:grpquota
ここでは、ユーザに対してクォータを設定するので、usrquota
を使います。
[root@server ~]# cat /etc/fstab
-snip-
/dev/loop0 /mnt ext4 defaults,usrquota 0 0
##5.3 マウント
作成したループバックデバイスをマウントします。
[root@server ~]# mount -a
ファイルシステムを確認します。
ループバックデバイスがマウントできたことがわかります。
[root@server ~]# df -hT -t ext4
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/loop0 ext4 93M 1.6M 85M 2% /mnt
##5.4 ユーザの作成
テスト用のユーザ(user1
,user2
)を作成します。
[root@server ~]# useradd user1
[root@server ~]# useradd user2
##5.5 パミッション変更
user1
,user2
が/mnt
にファイルを作成できるように、パミッションを変更します。
[root@server mnt]# chmod 777 /mnt
[root@server mnt]# ls -ld /mnt
drwxrwxrwx. 3 root root 1024 2月 11 10:47 /mnt
#6 クォータファイルの作成
[root@server ~]# cd /mnt
[root@server mnt]# ls
lost+found
quotacheckコマンドを実行して、クォータファイルを作成します。
クォータファイルはファイルシステムのトップディレクトリに作成します。
[root@server mnt]# quotacheck -u /mnt
クォータファイル(aquota.user
)が作成されたことがわかります。
[root@server mnt]# ls
aquota.user lost+found
#7 クォータの開始
quotaon
コマンドを使って、ユーザに対するクォータを開始します。
[root@server mnt]# quotaon -v /mnt
/dev/loop0 [/mnt]: user quotas turned on
#8 クォータの設定、確認
edquota
コマンドを使って、user1
にクォータを設定します。
[root@server mnt]# edquota user1
edquota
コマンドを実行すると、viが起動します。
ここでは、softに5M、hardに10Mを設定しました。soft/hardの意味は、次のとおりです。
・soft:この値を超えると警告が表示される。
・hard:この値を超えて書き込みができない。
Disk quotas for user user1 (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/loop0 0 5120 10240 0 0 0
user1
のクォータを確認します。
[root@server mnt]# 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
#9 実験
##9.1 user1の場合
root
からuser1
に切り替えます。
[root@server mnt]# su - user1
user1
で、/mnt
にファイル(6M)を作成してみます。
soft
リミットを超えるので、以下のように警告が表示されます。
[user1@server mnt]$ fallocate -l 6M test6M.dat
loop0: warning, user block quota exceeded.
作成したファイルを確認します。
6Mのファイルが作成できたことがわかります。
[user1@server mnt]$ ls -l test6M.dat
-rw-rw-r--. 1 user1 user1 6291456 2月 11 11:01 test6M.dat
user1
のクォータを確認します。
[user1@server mnt]$ 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 mnt]$ fallocate -l 5M test5M.dat
loop0: write failed, user block limit reached.
fallocate: fallocate failed: ディスク使用量制限を超過しました
作成したファイルを確認します。
私は、test5M.datの全てが書き込みできないと思っていましたが、
ファイルの一部はクォータいっぱいまで、書き込めるようです。
[user1@server mnt]$ ls -l
合計 10260
-rw-------. 1 root root 7168 2月 11 10:47 aquota.user
drwx------. 2 root root 12288 2月 11 10:45 lost+found
-rw-rw-r--. 1 user1 user1 4192256 2月 11 11:12 test5M.dat
-rw-rw-r--. 1 user1 user1 6291456 2月 11 11:01 test6M.dat
user1
のクォータを確認します。
[user1@server mnt]$ 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
##9.2 user2の場合
root
からuser2
に切り替えます。
user2
はクォータの設定をしていません。
[root@server mnt]# su - user2
12Mのファイルを作成します。
user2
は、クォータを設定していないため、ファイルを作成することができます。
[user2@server mnt]$ fallocate -l 12M test12M.dat
[user2@server mnt]$ ls -l
合計 22549
-rw-------. 1 root root 7168 2月 11 10:47 aquota.user
drwx------. 2 root root 12288 2月 11 10:45 lost+found
-rw-rw-r--. 1 user2 user2 12582912 2月 11 11:32 test12M.dat
-rw-rw-r--. 1 user1 user1 4192256 2月 11 11:12 test5M.dat
-rw-rw-r--. 1 user1 user1 6291456 2月 11 11:01 test6M.dat
#10 そのほか
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教科書 LPICレベル1 スピードマスター問題集 Version4.0対応
第4章 ユーザー・グループ管理