Linux學習-磁盤配額 (Quota) 的應用與實做

什麼是 Quota

在 Linux 系統中,因爲是多人多任務的環境,因此會有多人共同使用一個硬盤空間的狀況發生, 如 果其中有少數幾個使用者大量的佔掉了硬盤空間的話,那勢必壓縮其餘使用者的使用權力! 所以管 理員應該適當的限制硬盤的容量給用戶,以妥善的分配系統資源!node

若是想要讓磁盤的容量公平的分配,這個時候就得要靠 quota 的 幫忙囉!vim


  • Quota 的通常用途

quota 比較常使用的幾個狀況是:centos

  • quota 比較常使用的幾個狀況是:bash

  • 針對 mail server,例如:每一個人的郵件空間限制。網絡

  • 針對 file server,例如:每一個人最大的可用網絡硬盤空間 (教學環境中最多見!)app

若是是針對 Linux 系統主機上面的設定那麼使用的方向有底下這 一些:測試

  • 限制某一羣組所能使用的最大磁盤配額 (使用羣組限制):spa

  • 限制某一用戶的最大磁盤配額 (使用用戶限制):設計

在限制了羣組以後,你也能夠再繼續針對我的來進行限制,使得同一羣組之下還能夠有更公平的分配!code

  • 限制某一目錄 (directory, project) 的最大磁盤配額:

在舊版的 CentOS 當中,使用的預設文件系統爲 EXT 家族,這種文件系統的磁盤配額主要是針對整個文 件系統來處理,因此大多針對『掛載點』進行設計。 新的 xfs 可使用 project 這種模式,就可以針對個 別的目錄 (非文件系統喔) 來設計磁盤配額。


  • Quota 的使用限制

雖然 quota 很好用,可是使用上仍是有些限制要先了解的:

  • 在 EXT 文件系統家族僅能針對整個 filesystem:

EXT 文件系統家族在進行 quota 限制的時候,它僅能針對整個文件系統來進行設計,沒法針對某個單一的 目錄來設計它的磁盤配額。 所以,若是你想要使用不一樣的文件系統進行 quota 時,請先搞清楚該文件系統 支持的狀況喔!由於 XFS 已經可使用 project 模式來設計不一樣目錄的磁盤配額。

  • 核心必須支持 quota :

Linux 核心必須有支持 quota 這個功能才行:若是你是使用 CentOS 7.x 的預設核心, 嘿嘿!那恭喜你了, 你的系統已經默認有支持 quota 這個功能囉!若是你是自行編譯核心的, 那麼請特別留意你是否已經『真 的』開啓了 quota 這個功能?

  • 只對通常身份使用者有效:

並非全部在 Linux 上面的帳號均可以設定 quota 呢,例如 root 就不能設定 quota , 因 爲整個系統全部的數據幾乎都是他的啊!

  • 若啓用 SELinux,非全部目錄都可設定 quota :

新版的 CentOS 預設都有啓用 SELinux 這個核心功能,該功能會增強某些細部的權限控制!因爲擔憂管理 員不當心設定錯誤,所以預設的狀況下, quota 彷佛僅能針對 /home 進行設定而已~所以,若是你要針對 其餘不一樣的目錄進行設定,請參考到後續章節查閱解開 SELinux 限制的方法。

不一樣的文件系統在 quota 的處理狀況上不太相同,所以這裏要特別強調,進行 quota 前,先確認你的文件系統吧!


  • Quota 的規範設定項目:

quota 這玩意兒針對 XFS filesystem 的限制項目主要分爲底下幾個部分:

  • 分別針對用戶、羣組或個別目錄 (user, group & project):

XFS 文件系統的 quota 限制中,主要是針對羣組、我的或單獨的目錄進行磁盤使用率的限制!

  • 容量限制或文件數量限制 (block 或 inode):

Quota 既然是管理文件系統,因此固然也能夠管理 inode 或 block 囉! 這兩個管理 的功能爲:

  • 限制 inode 用量:能夠管理使用者能夠創建的『文件數量』;
  • 限制 block 用量:管理用戶磁盤容量的限制,較常見爲這種方式。

  • 柔性勸導與硬性規定 (soft/hard):

管是 inode/block ,限制值都有兩個,分別是 soft 與 hard。 通 常 hard 限制值要比 soft 還要高。舉例來講,若限制項目爲 block ,能夠限制 hard 爲 500MBytes 而 soft 爲 400MBytes。這兩個限值的意義爲:

  • hard:表示使用者的用量絕對不會超過這個限制值,以上面的設定爲例, 用戶所能使用的磁盤容量絕對不會 超過 500Mbytes ,若超過這個值則系統會鎖住該用戶的磁盤使用權;

  • soft:表示使用者在低於 soft 限值時 (此例中爲 400Mbytes),能夠正常使用磁盤,但若超過 soft 且低於 hard 的限值 (介於 400~500Mbytes 之間時),每次用戶登入系統時,系統會主動發出磁盤即將爆滿的警告訊息,且 會給予一個寬限時間 (grace time)。不過,若使用者在寬限時間倒數期間就將容量再次下降於 soft 限值之下, 則寬限時間會中止。

  • 會倒數計時的寬限時間 (grace time):

寬限時間只有在用戶的磁盤用量介於 soft 到 hard 之間時,才 會出現且會倒數的一個咚咚! 因爲達到 hard 限值時,用戶的磁盤使用權可能會被鎖住。爲了擔 心用戶沒有注意到這個磁盤配額的問題, 所以設計了 soft 。當你的磁盤用量即將到達 hard 且超 過 soft 時,系統會給予警告,但也會給一段時間讓用戶自行管理磁盤。 通常預設的寬限時間爲 七天,若是七天內你都不進行任何磁盤管理,那麼 soft 限制值會即刻取代 hard 限值來做爲 quota 的限制。

以上面設定的例子來講,假設你的容量高達 450MBytes 了,那七天的寬限時間就會開始倒數, 若 七天內你都不進行任何刪除文件的動做來替你的磁盤用量減肥, 那麼七天後你的磁盤最大用量將 變成 400MBytes (那個 soft 的限制值),此時你的磁盤使用權就會被鎖住而沒法新增文件了。

整個 soft, hard, grace time 的相關性咱們能夠用底下的圖示來講明:

soft,hard,grace time的相關性

一個 XFS 文件系統的 Quota 實做範例

Quota 的設定流程。

  • 目的與帳號:如今我想要讓個人專題生五個爲一組,這五我的的帳號分別是 myquota1, myquota2, myquota3, myquota4, myquota5,這五個用戶的密碼都是 password ,且這五個用戶所屬的初始羣組都是 myquotagrp 。 其餘的帳號屬性則使用默認值。

  • 帳號的磁盤容量限制值:我想讓這五個用戶都可以取得 300MBytes 的磁盤使用量(hard),文件數量則不予 限制。 此外,只要容量使用率超過 250MBytes ,就予以警告 (soft)。

  • 羣組的限額 (option 1):因爲個人系統裏面還有其餘用戶存在,所以我僅認可 myquotagrp 這個羣組最多僅能使用 1GBytes 的容量。 這也就是說,若是 myquota1, myquota2, myquota3 都用了 280MBytes 的容量了, 那麼其餘兩人最多隻能使用 (1000MB - 280x3 = 160MB) 的磁盤容量。

  • 共享目錄限額 (option 2):另外一種設定方式,每一個用戶仍是具備本身獨立的容量限止,可是這五我的的專題 共享目錄在 /home/myquota 這裏,該目錄請設定爲其餘人沒有任何權限的共享目錄空間,僅有 myquotagrp羣組擁有所有的權限。 且不管如何,該目錄最多僅可以接受 500MBytes 的容量。請注意,羣組 (group) 的 限制與目錄 (directory/project) 沒法同時並存。

  • 寬限時間的限制:最後,我但願每一個使用者在超過 soft 限制值以後,都還可以有 14 天的寬限時間。

首先,在這個小節咱們先來將帳號相關的屬性、 參數及其餘環境搞定再說吧!

# 製做帳號環境時,因爲有五個帳號,所以鳥哥使用 script 來創建環境!
root@study ~]# vim addaccount.sh
#!/bin/bash
# 使用 script 來創建實驗 quota 所需的環境
groupadd myquotagrp
for username in myquota1 myquota2 myquota3 myquota4 myquota5
do
    useradd -g myquotagrp $username
    echo "password" | passwd --stdin $username
done
mkdir /home/myquota
chgrp myquotagrp /home/myquota
chmod 2770 /home/myquota

[root@study ~]# sh addaccount.sh

實做 Quota 流程-1:文件系統的支持與觀察

不要在根目錄底下進行 quota 設計喔!由於文件系統會變得太複雜!所以,底下咱們是以 /home 這個 xfs 文件系統爲例的! 當 然啦,首先就是要來檢查看看!

[root@study ~]# df -hT /home
Filesystem Type Size Used Avail Use% Mounted on 
/dev/mapper/centos-home xfs 5.0G 67M 5.0G 2% /home

在過去的版本中,管理員彷佛能夠透過 mount -o remount 的機制來從新掛載啓動 quota 的功能,不 過 XFS 文件系統的 quota 彷佛是在掛載之初就宣告了, 所以沒法使用 remount 來從新啓動 quota 功能,必定得要寫入 /etc/fstab 當中,或者是在初始掛載過程當中加入這個項目, 不然不會生效

[root@study ~]# vim /etc/fstab
/dev/mapper/centos-home /home xfs defaults,usrquota,grpquota 0 0
# 其餘項目鳥哥並無列出來!重點在於第四字段!於 default 後面加上兩個參數!

[root@study ~]# umount /home [root@study ~]# mount -a
[root@study ~]# mount | grep home
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)

基本上,針對 quota 限制的項目主要有三項,以下所示:

  • uquota/usrquota/quota:針對使用者帳號的設定

  • gquota/grpquota:針對羣組的設定

  • pquota/prjquota:針對單一目錄的設定,可是不可與 grpquota 同時存在!

仍是要再次的強調,修改完 /etc/fstab 後,務必要測試一下!如有發生錯誤得要趕忙處理! 由於這 個文件若是修改錯誤,是會形成沒法開機徹底的狀況

實做 Quota 流程-2:觀察 Quota 報告資料

製做文件系統支持以後,固然得要來瞧一瞧到底有沒有正確的將 quota 的管理數據列出來纔好!這 時咱們得要使用 xfs_quota 這個指令才行!這個指令真的是挺複雜的,由於所有的 quota 實做都是 這個指令。

[root@study ~]# xfs_quota -x -c "指令" [掛載點]
選項與參數:
-x :專家模式,後續纔可以加入 -c 的指令參數喔!
-c :後面加的就是指令,這個小節咱們先來談談數據回報的指令 
指令:
    print :單純的列出目前主機內的文件系統參數等資料
    df :與本來的 df 同樣的功能,能夠加上 -b (block) -i (inode) -h (加上單位) 等 report:列出目前的 quota 項目,有 -ugr (user/group/project) 及 -bi 等資料
    state :說明目前支持 quota 的文件系統的信息,有沒有起動相關項目等

範例一:列出目前系統的各的文件系統,以及文件系統的 quota 掛載參數支持
root@study ~]# xfs_quota -x -c "print"
Filesystem          Pathname
/                   /dev/mapper/centos-root
/srv/myproject      /dev/vda4
/boot               /dev/vda2
/home               /dev/mapper/centos-home (uquota, gquota) # 因此這裏就有顯示支持囉

範例二:列出目前 /home 這個支持 quota 的載點文件系統使用狀況
root@study ~]# xfs_quota -x -c "df -h" /home
Filesystem     Size   Used  Avail Use% Pathname
/dev/mapper/centos-home
               5.0G  67.0M   4.9G   1% /home
# 如上所示,其實跟本來的 df 差很少啦!只是會更正確就是了。

範例三:列出目前 /home 的全部用戶的 quota 限制值
[root@study ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks                            Inodes
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
root           4K      0      0  00 [------]      4      0      0  00 [------]
dmtsai      34.0M      0      0  00 [------]    432      0      0  00 [------]
.....(中間省略).....
myquota1      12K      0      0  00 [------]      7      0      0  00 [------]
myquota2      12K      0      0  00 [------]      7      0      0  00 [------]
myquota3      12K      0      0  00 [------]      7      0      0  00 [------]
myquota4      12K      0      0  00 [------]      7      0      0  00 [------]
myquota5      12K      0      0  00 [------]      7      0      0  00 [------]
# 因此列出了全部用戶的目前的文件使用狀況,而且列出設定值。注意,最上面的 Block
# 表明這個是 block 容量限制,而 inode 則是文件數量限制喔。另外,soft/hard 若爲 0,表明沒限制

範例四:列出目前支持的 quota 文件系統是否有起動了 quota 功能?
[root@study ~]# xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/centos-home)
  Accounting: ON # 有啓用計算功能
  Enforcement: ON # 有實際 quota 管制的功能
  Inode: #1568 (4 blocks, 4 extents) # 上面四行說明的是有激活 user 的限制能力
Group quota state on /home (/dev/mapper/centos-home)
  Accounting: ON
  Enforcement: ON
  Inode: #1569 (5 blocks, 5 extents) # 上面四行說明的是有激活 group 的限制能力 
Project quota state on /home (/dev/mapper/centos-home)
    Accounting: OFF
    Enforcement: OFF
    Inode: #1569 (5 blocks, 5 extents) # 上面四行說明的是 project 並未支持 
Blocks grace time: [7 days 00:00:30] # 底下則是 grace time 的項目
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

xfs_quota 的 report 指令會將支持的 user/group/prject 相關數據列出來,若是隻 是想要某個特定的項目,例如咱們上面要求僅列出用戶的數據時,就在 report 後面加上 -u 便可喔! 這樣就可以觀察目前的相關設定信息了。 要注意,限制的項目有 block/inode 同時能夠針對每一個項 目來設定 soft/hard 喔!接下來實際的設定看看吧!

實做 Quota 流程-3:限制值設定方式

確認文件系統的 quota 支持順利啓用後,也可以觀察到相關的 quota 限制,接下來就是要實際的給 予用戶/羣組限制。咱們須要每一個用戶 250M/300M 的容量限制,羣組共 950M/1G 的 容量限制,同時 grace time 設定爲 14 天喔! 實際的語法與設定流程來瞧瞧:

[root@study ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name" 
[root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays"
選項與參數:
limit :實際限制的項目,能夠針對 user/group 來限制,限制的項目有
    bsoft/bhard : block 的 soft/hard 限制值,能夠加單位 
    isoft/ihard : inode 的 soft/hard 限制值
    name : 就是用戶/羣組的名稱啊!
timer :用來設定 grace time 的項目喔,也是能夠針對 user/group 以及 block/inode 設定

範例一:設定好用戶們的 block 限制值 (題目中沒有要限制 inode 啦!)
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota1" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota2" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota3" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota4" /home
[root@study ~]# xfs_quota -x -c "limit -u bsoft=250M bhard=300M myquota5" /home
[root@study ~]# xfs_quota -x -c "report -ubih" /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks                            Inodes
User ID      Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquota1      12K   250M   300M  00 [------]      7      0      0  00 [------]

範例二:設定好 myquotagrp 的 block 限制值
[root@study ~]# xfs_quota -x -c "limit -g bsoft=950M bhard=1G myquotagrp" /home
[root@study ~]# xfs_quota -x -c "report -gbih" /home
Group quota on /home (/dev/mapper/centos-home)
                        Blocks                            Inodes
Group ID     Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotagrp    60K   950M     1G  00 [------]     36      0      0  00 [------]

範例三:設定一下 grace time 變成 14 天吧!
[root@study ~]# xfs_quota -x -c "timer -ug -b 14days" /home
[root@study ~]# xfs_quota -x -c "state" /home
User quota state on /home (/dev/mapper/centos-home)
.....(中間省略).....
Blocks grace time: [14 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

範例四:以 myquota1 用戶測試 quota 是否真的實際運做呢?
[root@study ~]# su - myquota1
[myquota1@study ~]$ dd if=/dev/zero of=123.img bs=1M count=310
dd: error writing ‘123.img’: Disk quota exceeded
300+0 records in
299+0 records out
314552320 bytes (315 MB) copied, 0.181088 s, 1.7 GB/s
[myquota1@study ~]$ ll -h
-rw-r--r--. 1 myquota1 myquotagrp 300M Jul 24 21:38 123.img

[myquota1@study ~]$ exit
[root@study ~]# xfs_quota -x -c "report -ubh" /home
User quota on /home (/dev/mapper/centos-home)
                        Blocks
User ID      Used   Soft   Hard Warn/Grace
---------- ---------------------------------
myquota1     300M   250M   300M  00 [13 days]
myquota2      12K   250M   300M  00 [------]
# 由於 myquota1 的磁盤用量已經破錶,因此固然就會出現那個可怕的 grace time 囉!

實做 Quota 流程-4:project 的限制 (針對目錄限制) (Optional)

來想想,若是須要限制的是目錄而不是羣組時,那該如何處理呢?舉例來講,咱們要限 制的是 /home/myquota 這個目錄自己, 而不是針對 myquotagrp 這個羣組啊!這兩種設定方法的意 義不一樣喔!例如,前一個小節談到的測試範例來講, myquota1 已經消耗了 300M 的容量,而 /home/myquota 其實尚未任何的使用量 (由於在 myquota1 的家目錄作的 dd 指令)。 不過若是你 使用了 xfs_quota -x -c "report -h" /home 這個指令來查看,就會發現其實 myquotagrp 已經用掉了 300M 了! 如此一來,對於目錄的限制來講,就不會有效果!

  • 修改 /etc/fstab 內的文件系統支持參數

首先,要將grpquota 的參數取消,而後加入 prjquota ,而且卸除 /home 再從新掛載才行!那就 來測試看看!

# 1. 先修改 /etc/fstab 的參數,並啓動文件系統的支持
[root@study ~]# vim /etc/fstab
dev/mapper/centos-home /home xfs defaults,usrquota,grpquota,prjquota 0 0
# 記得, grpquota 與 prjquota 不可同時設定喔!因此上面刪除 grpquota 加入 prjquota

[root@study ~]# umount /home
[root@study ~]# mount -a
[root@study ~]# xfs_quota -x -c "state"
User quota state on /home (/dev/mapper/centos-home)
  Accounting: ON
  Enforcement: ON
  Inode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)
  Accounting: OFF         <==已經取消囉!
  Enforcement: OFF
  Inode: N/A
Project quota state on /home (/dev/mapper/centos-home)
  Accounting: ON          <==確實啓動囉!
  Enforcement: ON
  Inode: N/A
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]
  • 規範目錄、項目名稱(project)與項目 ID

目錄的設定比較奇怪,他必需要指定一個所謂的『項目名稱、項目標識符』來規範才行!並且還 須要用到兩個配置文件!

# 2.1 指定項目標識符與目錄的對應在 /etc/projects
[root@study ~]# echo "11:/home/myquota" >> /etc/projects

# 2.2 規範專案名稱與標識符的對應在 /etc/projid
[root@study ~]# echo "myquotaproject:11" >> /etc/projid

# 2.3 初始化專案名稱
[root@study ~]# xfs_quota -x -c "project -s myquotaproject"
Setting up project myquotaproject (path /home/myquota)...
Processed 1 (/etc/projects and cmdline) paths for project myquotaproject with recursion depth infinite (-1). # 會閃過這些訊息!是 OK 的!別擔憂!

[root@study ~]# xfs_quota -x -c "print " /home
Project quota on /home (/dev/mapper/centos-home)
                        Blocks                            Inodes
Project ID       Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotaproject      0      0      0  00 [------]      1      0      0  00 [------]
# 喔耶!肯定有抓到這個項目名稱囉!接下來準備設定吧!
  • 實際設定規範與測試

咱們要將 /home/myquota 指定爲 500M 的容量限制,那假設到 450M 爲 soft 的限制好了! 那麼設定就會變成這樣囉:

# 3.1 先來設定好這個 project 吧!設定的方式一樣使用 limit 的 bsoft/bhard 喔!:
[root@study ~]# xfs_quota -x -c "limit -p bsoft=450M bhard=500M myquotaproject" /home
[root@study ~]# xfs_quota -x -c "report -pbih " /home
Project quota on /home (/dev/mapper/centos-home)
                            Blocks                            Inodes
Project ID       Used   Soft   Hard Warn/Grace     Used   Soft   Hard Warn/Grace
---------- --------------------------------- ---------------------------------
myquotaproject      0   450M   500M  00 [------]      1      0      0  00 [------]

[root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=510
dd: error writing '/home/myquota/123.img': No space left on device
501+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 0.96296 s, 544 MB/s
# 你看!連 root 在該目錄底下創建文件時,也會被擋掉耶!這纔是完整的針對目錄的規範嘛!贊!

這樣就設定好了囉!將來若是你還想要針對某些個目錄進行限制,那麼就修改 /etc/projects, /etc/projid 設定一下規範, 而後直接處理目錄的初始化與設定,就完成設定了!

XFS quota 的管理與額外指令對照表

須要暫停 quota 的限制,或者是從新啓動 quota 的限制時,該如何處理呢?仍是使用 xfs_quota啦!增長几個內部指令便可:

  • disable:暫時取消 quota 的限制,但其實系統仍是在計算 quota 中,只是沒有管制而已!應該算最有用的 功能囉!

  • enable:就是回覆到正常管制的狀態中,與 disable 能夠互相取消、啓用!

  • off:徹底關閉 quota 的限制,使用了這個狀態後,你只有卸除再從新掛載纔可以再次的啓動 quota 喔!也就是說, 用了 off 狀態後,你沒法使用 enable 再次復原 quota 的管制喔!注意不要亂用這個狀態!通常建議用 disable 便可,除非你須要執行 remove 的動做!

  • remove:必需要在 off 的狀態下才可以執行的指令~這個 remove 能夠『移除』quota 的限制設定,例如要取消 project 的設定, 無須從新設定爲 0 喔!只要 remove -p 就能夠了!

如今就讓咱們來測試一下管理的方式吧:

# 1. 暫時關閉 XFS 文件系統的 quota 限制功能
[root@study ~]# xfs_quota -x -c "disable -up" /home
[root@study ~]# xfs_quota -x -c "state" /home
User quota state on /home (/dev/mapper/centos-home)
  Accounting: ON
  Enforcement: OFF   <== 意思就是有在計算,但沒有強制管制的意思
  Inode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)
  Accounting: OFF
  Enforcement: OFF
  Inode: N/A
Project quota state on /home (/dev/mapper/centos-home)
  Accounting: ON
  Enforcement: OFF
  Inode: N/A
Blocks grace time: [7 days 00:00:30]
Inodes grace time: [7 days 00:00:30]
Realtime Blocks grace time: [7 days 00:00:30]

[root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520
520+0 records in
520+0 records out  # 見鬼!居然沒有任何錯誤發生了!
545259520 bytes (545 MB) copied, 0.308407 s, 180 MB/s

[root@study ~]# xfs_quota -x -c "report -pbh" /home
Project quota on /home (/dev/mapper/centos-home)
                        Blocks
Project ID       Used   Soft   Hard Warn/Grace
---------- ---------------------------------
myquotaproject   520M   450M   500M  00 [-none-]
# 其實,還真的有超過耶!只是由於 disable 的關係,因此沒有強制限制住就是了!

[root@study ~]# xfs_quota -x -c "enable -up" /home  # 從新啟動 quota 限制
[root@study ~]# dd if=/dev/zero of=/home/myquota/123.img bs=1M count=520
dd: error writing ‘/home/myquota/123.img’: No space left on device
# 又開始有限制!這就是 enable/disable 的相關對應功能喔!暫時關閉/啓動用的!

# 徹底關閉 quota 的限制行爲吧!同時取消 project 的功能試看看!
[root@study ~]# xfs_quota -x -c "off -up" /home
[root@study ~]# xfs_quota -x -c "enable -up" /home 
XFS_QUOTAON: Function not implemented
# 您瞧瞧!沒有辦法從新啓動!由於已經徹底的關閉了 quota 的功能!因此得要 umouont/mount 才行!

[root@study ~]# umount /home; mount -a
# 這個時候使用 report 以及 state 時,管制限制的內容又從新回來了!好!來瞧瞧如何移除 project

[root@study ~]# xfs_quota -x -c "off -up" /home
[root@study ~]# xfs_quota -x -c "remove -p" /home
[root@study ~]# umount /home; mount -a
[root@study ~]# xfs_quota -x -c "report -phb" /home
Project quota on /home (/dev/mapper/centos-home)
                        Blocks
Project ID       Used   Soft   Hard Warn/Grace
---------- ---------------------------------
myquotaproject   500M      0      0  00 [------]
# 嘿嘿!所有歸零!就是『移除』全部限制值的意思!

上面就是 XFS 文件系統的簡易 quota 處理流程~那若是你是使用 EXT 家族呢?能不能使用quota 呢?這裏也列出相關的參考指令/配置文件案給你對照參考! 沒學過的能夠看看流程,有學過的能夠對照了解!

設定流程項目 XFS 文件系統 EXT 家族
/etc/fstab 參數設定 usrquota/grpquota/prjquota usrquota/grpquota
quota 配置文件 不須要 quotacheck
設定用戶/羣組限制值 xfs_quota -x -c "limit..." edquota 或 setquota
設定 grace time xfs_quota -x -c "timer..." edquota
設定目錄限制值 xfs_quota -x -c "limit..."
觀察報告 xfs_quota -x -c "report..." repquota 或 quota
啓動與關閉 quota 限制 xfs_quota -x -c "[disable|enable]..." quotaoff, quotaon
發送警告信給用戶 目前版本還沒有支持 warnquota

不更動既有系統的 quota 實例

想想,若是你的主機原先沒有想到要設定成爲郵件主機,因此並無規劃將郵件信箱所在的 /var/spool/mail/ 目錄獨立成爲一個 partition ,而後目前你的主機已經沒有辦法新增或分區出任何新 的分區槽了。那咱們知道 quota 的支持與文件系統有關, 因此並沒有法跨文件系統來設計 quota 的 project 功能啊!所以,你是否就沒法針對 mail 的使用量給予 quota 的限制呢?

若是你想要讓使用者的郵件信箱與家目錄的整體磁盤使用量爲固定,那又該如何是好? 因爲 /home 及 /var/spool/mail 根本不多是同一個 filesystem (除非是都不分區,使用根目錄,纔有可能 整合在一塊兒), 因此,該如何進行這樣的 quota 限制呢?

既然 quota 是針對 filesystem 來進行限制,假設你又已經有 /home 這個獨立的分區槽了,那麼你只要:

  1. 將 /var/spool/mail 這個目錄完整的移動到 /home 底下;
  2. 利用 ln -s /home/mail /var/spool/mail 來創建連接數據;
  3. 將 /home 進行 quota 限額設定

您也能夠依據不一樣的使 用者與羣組來設定 quota 而後一樣的以上面的方式來進行 link 的動做!嘿嘿嘿!就有不一樣的限額針 對不一樣的使用者提出囉!

相關文章
相關標籤/搜索