ext4の場合
xfsを使う機会が多いけど、ext4を使う時もあるので.
まずデバイスを ext4 でフォーマットして、そのファイルシステムに「quota」機能を載せる
[root@rockylinux9 ~]# mkfs.ext4 -L home /dev/sdb1
[root@rockylinux9 ~]# dumpe2fs /dev/sdb1 | grep "^Filesystem features:"
dumpe2fs 1.46.5 (30-Dec-2021)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# tune2fs -O quota /dev/sdb1
tune2fs 1.46.5 (30-Dec-2021)
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# dumpe2fs /dev/sdb1 | grep "^Filesystem features:"
dumpe2fs 1.46.5 (30-Dec-2021)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize quota metadata_csum
[root@rockylinux9 ~]#
これでファイルシステムに「quota」機能が載せられた.
一応ext4でも/etc/fstabでmount optionを調整してquotaを有効にさせれるが、再起動のたびごとに quotaon が必要な感じだったので、dumpe2fs でそれ自体を有効にしてみた
っでmount. mount optionは必要で「quota」を加えます
[root@rockylinux9 ~]# vi /etc/fstab
:
LABEL=home /home ext4 defaults,quota 0 0
:
[root@rockylinux9 ~]# mount -a
[root@rockylinux9 ~]# mount |grep home
/dev/sdb1 on /home type ext4 (rw,relatime,seclabel,quota,usrquota)
[root@rockylinux9 ~]#
コマンドのインストール
quota設定に必要なコマンドをインストールします
[root@rockylinux9 ~]# dnf install quota
dumpe2fs で quota 機能を載せたため、mountすると即座にquotaは機能しているようで「quotaon -p <filesystem>」で調べられる.
[root@rockylinux9 ~]# quotaon -p /home
group quota on /home (/dev/sdb1) is on
user quota on /home (/dev/sdb1) is on
project quota on /home (/dev/sdb1) is off
[root@rockylinux9 ~]#
初期の設定状態は「repquota」コマンドで表示される
[root@rockylinux9 ~]# repquota -s /home
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20K 0K 0K 2 0 0
arcueid -- 16K 0K 0K 4 0 0
ciel -- 16K 0K 0K 4 0 0
[root@rockylinux9 ~]#
っで設定
ユーザ「arcueid」にはsoft制限を10GB、Hardを11GB
ユーザ「ciel」にはsoft制限を5GB、Hardを11GB
にしてみたいと思います
方法は「edquota -u <ユーザ>」で行えるが、これはviみたいに修正するみたいで微妙.
代わりに「」
[root@rockylinux9 ~]# setquota -u arcueid 10G 11G 0 0 /home
[root@rockylinux9 ~]# setquota -u ciel 5G 11G 0 0 /home
[root@rockylinux9 ~]# repquota -s -u /home
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20K 0K 0K 2 0 0
arcueid -- 16K 10240M 11264M 4 0 0
ciel -- 16K 5120M 11264M 4 0 0
[root@rockylinux9 ~]#
テスト †
cielさんが5GBのcurry01ファイルを作りました
[ciel@rockylinux9 ~]$ dd if=/dev/zero of=curry01 bs=1G count=5
sdb1: warning, user block quota exceeded. <---- soft limit が効きました
5+0 records in
5+0 records out
5368709120 bytes (5.4 GB, 5.0 GiB) copied, 14.4609 s, 371 MB/s
[ciel@rockylinux9 ~]$
[ciel@rockylinux9 ~]$ ls -lh
total 5.1G
-rw-r--r--. 1 ciel ciel 5.0G Jan 29 20:34 curry01
[ciel@rockylinux9 ~]$
[ciel@rockylinux9 ~]$ quota -s
Disk quotas for user ciel (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 5121M* 5120M 11264M 6days 5 0 0 <--- 執行猶予6日
[ciel@rockylinux9 ~]$
既定は執行猶予6日で6日後にhard limiに満たなくても書けなくなる.
っで実際に掛けなくなるかとテストするために執行猶予を短くしてみる
[root@rockylinux9 ~]# setquota -u ciel -T 120 0 -a /home
setquota: Not setting inode grace time on /dev/sdb1 because softlimit is not exceeded.
[root@rockylinux9 ~]#
[root@rockylinux9 ~]# repquota -s -u /home
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20K 0K 0K 2 0 0
arcueid -- 16K 10240M 11264M 4 0 0
ciel +- 5121M 5120M 11264M 00:02 5 0 0
[root@rockylinux9 ~]#
として2分後、下記のようになる
[root@rockylinux9 ~]# repquota -s -u /home
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
Space limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20K 0K 0K 2 0 0
arcueid -- 16K 10240M 11264M 4 0 0
ciel +- 5121M 5120M 11264M none 5 0 0
[root@rockylinux9 ~]#
この段階になると書き込めないです
[ciel@rockylinux9 ~]$ echo ok > sample
sdb1: write failed, user block quota exceeded too long.
-bash: echo: write error: Disk quota exceeded
[ciel@rockylinux9 ~]$
ファイル自体は作られますが、中身がないです.
次に問題となったsoft limiを超えたファイルを削除すると soft limit がリセットされ、再度soft limit以上のファイルが作れる
[ciel@rockylinux9 ~]$ rm -rf curry01
[ciel@rockylinux9 ~]$ dd if=/dev/zero of=curry01 bs=1G count=6
sdb1: warning, user block quota exceeded.
[ciel@rockylinux9 ~]$
[ciel@rockylinux9 ~]$ ls -l
total 6291464
-rw-r--r--. 1 ciel ciel 6442450944 Jan 29 20:46 curry01
-rw-r--r--. 1 ciel ciel 8 Jan 29 20:48 sample
[ciel@rockylinux9 ~]$
[ciel@rockylinux9 ~]$ quota -s
Disk quotas for user ciel (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 6145M* 5120M 11264M 6days 6 0 0
[ciel@rockylinux9 ~]$
ただ、、執行猶予の段階でファイルを作っても何も言われない. 「dd」で一応quotaからの警告があるが、それ以外では見えない...
っで当然ながら hard limit は超えられないです
[ciel@rockylinux9 ~]$ dd if=/dev/zero of=curry02 bs=1G count=6
sdb1: write failed, user block limit reached.
dd: error writing 'curry02': Disk quota exceeded
[ciel@rockylinux9 ~]$
[ciel@rockylinux9 ~]$ ls -lh
total 11G
-rw-r--r--. 1 ciel ciel 6.0G Jan 29 20:46 curry01
-rw-r--r--. 1 ciel ciel 5.0G Jan 29 20:52 curry02
-rw-r--r--. 1 ciel ciel 8 Jan 29 20:48 sample
[ciel@rockylinux9 ~]$ quota -s
Disk quotas for user ciel (uid 1001):
Filesystem space quota limit grace files quota limit grace
/dev/sdb1 11264M* 5120M 11264M 6days 7 0 0
[ciel@rockylinux9 ~]$
ユーザに通知させるには †
単純には「$HOME/.bashrc」に「quota -s -q」を入れるとかで.
[ciel@rockylinux9 ~]$ echo "quota -s -q" >> $HOME/.bashrc
soft limitを超えていると
[saber@c ~]$ ssh -l ciel rockylinux9
ciel@rockylinux9's password:
Last login: Sun Jan 29 21:54:53 2023
Disk quotas for user ciel (uid 1001):
In block grace period on /dev/sdb1
[ciel@rockylinux9 ~]$
とメッセージが表示される. もしsoft limit以内なら
[ciel@rockylinux9 ~]$ rm -rf curry01
[ciel@rockylinux9 ~]$
logout
Connection to rockylinux9 closed.
[saber@c ~]$ ssh -l ciel rockylinux9
ciel@rockylinux9's password:
Last login: Sun Jan 29 21:55:09 2023 from 192.168.0.3
[ciel@rockylinux9 ~]$
となにも表示されない.
これくらいかなぁ