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 ~]$

となにも表示されない.

これくらいかなぁ


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2023-01-29 (日) 21:57:18 (131d)