【BASH】回顧與知識點梳理 二十七
- 二十七. 磁盤配額(Quota)
- 27.1 磁盤配額 (Quota) 的應用與實作
- 什么是 Quota
- Quota 的一般用途
- Quota 的使用限制
- Quota 的規范設定項目
- 27.2 一個 XFS 文件系統的 Quota 實作范例
- 實作 Quota 流程:設定賬號
- 實作 Quota 流程-1:文件系統的支持與觀察
- 實作 Quota 流程-2:觀察 Quota 報告資料
- 實作 Quota 流程-3:限制值設定方式
- 實作 Quota 流程-4:project 的限制 (針對目錄限制) (Optional)
- 27.3 XFS quota 的管理與額外指令對照表
- 27.4 不更動既有系統的 quota 實例
該系列目錄 --> 【BASH】回顧與知識點梳理(目錄)
二十七. 磁盤配額(Quota)
如果您的 Linux 服務器有多個用戶經常存取數據時,為了維護所有用戶在硬盤容量的公平使用,磁盤配額 (Quota) 就是
一項非常有用的工具!另外,如果你的用戶常常抱怨磁盤容量不夠用,那么更進階的文件系統就得要學習學習。
27.1 磁盤配額 (Quota) 的應用與實作
Quota 這個玩意兒就字面上的意思來看,就是有多少『限額
』的意思啦!如果是用在零用錢上面, 就是類似『有多少零用錢一個月』的意思之類的。如果是在計算機主機的磁盤使用量上呢?以 Linux 來說,就是有多少容量限制的意思啰
。我們可以使用 quota 來讓磁盤的容量使用較為公平, 底下我們會介紹什么是 quota ,然后以一個完整的范例來介紹 quota 的實作喔!
什么是 Quota
在 Linux 系統中,由于是多人多任務的環境,所以會有多人共同使用一個硬盤空間的情況發生, 如果其中有少數幾個使用者大量的占掉了硬盤空間的話,那勢必壓縮其他使用者的使用權力! 因此管理員應該適當的限制硬盤的容量給用戶,以妥善的分配系統資源!避免有人抗議呀!
舉例來說,我們用戶的默認家目錄都是在 /home 底下,如果 /home 是個獨立的 partition , 假設這個分區槽有 10G 好了,而 /home 底下共有 30 個賬號,也就是說,每個用戶平均應該會有 333MB 的空間才對。 偏偏有個用戶在他的家目錄底下塞了好多只影片,占掉了 8GB 的空間,想想看,是否造成其他正常使用者的不便呢? 如果想要讓磁盤的容量公平的分配,這個時候就得要靠 quota 的幫忙啰
!
Quota 的一般用途
quota 比較常使用的幾個情況是:
- 針對 WWW server ,例如:每個人的網頁空間的容量限制!
- 針對 mail server,例如:每個人的郵件空間限制。
- 針對 file server,例如:每個人最大的可用網絡硬盤空間 (教學環境中最常見!)
上頭講的是針對網絡服務的設計,如果是針對 Linux 系統主機上面的設定那么使用的方向有底下這一些:
限制某一群組所能使用的最大磁盤配額
(使用群組限制):
你可以將你的主機上的用戶分門別類,有點像是目前很流行的付費與免付費會員制的情況, 你比較喜好的那一群的使用配額就可以給高一些!呵呵! ^_^限制某一用戶的最大磁盤配額
(使用用戶限制):
在限制了群組之后,你也可以再繼續針對個人來進行限制,使得同一群組之下還可以有更公平的分配!限制某一目錄 (directory, project) 的最大磁盤配額
(針對目錄限制):
在舊版的 CentOS 當中,使用的預設文件系統為 EXT 家族,這種文件系統的磁盤配額主要是針對整個文件系統來處理,所以大多針對『掛載點』進行設計。 新的 xfs 可以使用 project 這種模式,就能夠針對個別的目錄 (非文件系統喔) 來設計磁盤配額耶!超棒的!
大概有這些實際的用途啦!基本上,quota 就是在回報管理員磁盤使用率以及讓管理員管理磁盤使用情況的一個工具就是了! 比較特別的是,XFS 的 quota 是整合到文件系統內,并不是其他外掛的程序來管理的,因此,透過 quota 來直接回報磁盤使用率,要比 unix 工具來的快速! 舉例來說, du 這東西會重新計算目錄下的磁盤使用率,但 xfs 可以透過 xfs_quota 來直接回報各目錄使用率,速度上是快非常多!
查看預設文件系統,筆者有兩臺服務器,一臺是centos,另一臺是ubuntu,可以看到預設的文件系統是不同的
[root@node-135 ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
..
/dev/mapper/centos-root xfs 28289540 12538576 15750964 45% /
/dev/sda1 xfs 1038336 185460 852876 18% /boot
...
test@linux-qianxc:~$ df -T
文件系統 類型 1K-塊 已用 可用 已用% 掛載點
...
/dev/sdb1 ext4 480588496 349458784 106694104 77% /
...
Quota 的使用限制
雖然 quota 很好用,但是使用上還是有些限制要先了解的:
- 在 EXT 文件系統家族僅能針對整個 filesystem
- 核心必須支持 quota
- 只對一般身份使用者有效
- 若啟用 SELinux,非所有目錄均可設定 quota,quota 似乎僅能針對 /home 進行設定而已
不同的文件系統在 quota 的處理情況上不太相同,因此這里要特別強調,進行 quota 前,先確認你的文件系統吧!
Quota 的規范設定項目
quota 這玩意兒針對 XFS filesystem 的限制
項目主要分為底下幾個部分:
-
分別針對用戶、群組或個別目錄 (user, group & project)
XFS 文件系統的 quota 限制中,主要是針對群組、個人或單獨的目錄進行磁盤使用率的限制! -
容量限制或文件數量限制 (block 或 inode):
文件系統主要規劃為存放屬性的 inode 與實際文件數據的block 區塊,Quota 既然是管理文件系統,所以當然也可以管理 inode 或 block 啰! 這兩個管理的功能為:- 限制 inode 用量:可以管理使用者可以建立的『文件數量』
- 限制 block 用量:管理用戶磁盤容量的限制,較常見為這種方式
-
柔性勸導與硬性規定 (soft/hard):
這個設定和ulimit很相似
既然是規范,當然就有限制值。不管是 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 的限制。
27.2 一個 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 天的寬限時間。
好了,那你怎么規范賬號以及相關的 Quota 設定呢?首先,在這個小節我們先來將賬號相關的屬性、參數及其他環境搞定再說吧!
實作 Quota 流程:設定賬號
# 制作賬號環境時,由于有五個賬號,因此鳥哥使用 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 的練習吧!
實作 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
從上面的數據來看,鳥哥這部主機的 /home 確實是獨立的 filesystem,而且確實是使用了 xfs 文件系統!所以可以使用底下的流程啰! 此外,由于 VFAT 文件系統并不支持 Linux Quota 功能,所以我們得要使用 mount 查詢一下 /home 的文件系統為何才行啊!
在過去的版本中,管理員似乎可以透過mount -o remount
的機制來重新掛載啟動 quota 的功能,不過 XFS 文件系統的 quota 似乎是在掛載之初就宣告了, 因此無法使用 remount 來重新啟動 quota 功能,一定得要寫入 /etc/fstab
當中,或者是在初始掛載過程中加入這個項目, 否則不會生效喔!那就來瞧瞧鳥哥改了 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 后,務必要測試一下!若有發生錯誤得要趕緊處理! 因為這個文件如果修改錯誤,是會造成無法開機完全的情況啊!切記切記!最好使用 vim 來修改啦! 因為會有語法的檢驗,就不會讓你寫錯字了!此外,由于一般用戶的家目錄在 /home 里面,因此針對這個項目的卸除時, 一定要將所有一般賬號的身份注銷,否則肯定無法卸除喔!留意留意!
實作 Quota 流程-2:觀察 Quota 報告資料
制作文件系統支持之后,當然得要來瞧一瞧到底有沒有正確的將 quota 的管理數據列出來才好!這時我們得要使用 xfs_quota 這個指令才行!這個指令真的是挺復雜的,因為全部的 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-home5.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: ONEnforcement: ONInode: #1569 (5 blocks, 5 extents) # 上面四行說明的是有激活 group 的限制能力
Project quota state on /home (/dev/mapper/centos-home)Accounting: OFFEnforcement: OFFInode: #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
(-g,-p
)即可喔!這樣就能夠觀察目前的相關設定信息了。 要注意,限制的項目有 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)
這個項目不可以跟group 同時設定喔! 因此我們得要取消 group 設定并且加入 project 設定才行。
- 修改 /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: ONEnforcement: ONInode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)Accounting: OFF <==已經取消啰!Enforcement: OFFInode: N/A
Project quota state on /home (/dev/mapper/centos-home)Accounting: ON <==確實啟動啰!Enforcement: ONInode: 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
目錄的設定比較奇怪,他必須要指定一個所謂的『項目名稱、項目標識符
』來規范才行!而且還需要用到兩個配置文件! 這個讓鳥哥覺得比較怪一些就是了。現在,我們要規范的目錄是/home/myquota 目錄,這個目錄我們給個 myquotaproject 的項目名稱, 這個專案名稱給個 11 的標識符,這個都是自己指定的,若不喜歡就自己指定另一個吧!鳥哥的指定方式如下:
# 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
Filesystem Pathname
/home /dev/mapper/centos-home (uquota, pquota)
/home/myquota /dev/mapper/centos-home (project 11, myquotaproject)
# 這個 print 功能很不錯!可以完整的查看到相對應的各項文件系統與 project 目錄對應!
[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 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 設定一下規范, 然后直接處理目錄的初始化與設定,就完成設定了!好簡單!
27.3 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: ONEnforcement: OFF <== 意思就是有在計算,但沒有強制管制的意思Inode: #1568 (4 blocks, 4 extents)
Group quota state on /home (/dev/mapper/centos-home)Accounting: OFFEnforcement: OFFInode: N/A
Project quota state on /home (/dev/mapper/centos-home)Accounting: ONEnforcement: OFFInode: 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 [------]
# 嘿嘿!全部歸零!就是『移除』所有限制值的意思!
請注意上表中最后一個練習,那個 remove -p
是『移除所有的 project 控制列表
』的意思!也就是說,如果你有在 /home 設定多個 project 的限制, 那么 remove 會刪的一個也不留喔!如果想要回復設定值,那…只能一個一個重新設定回去了!沒有好辦法!
相關的參考指令/配置文件案對照參考
設定流程項目 | 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 |
27.4 不更動既有系統的 quota 實例
想一想,如果你的主機原先沒有想到要設定成為郵件主機,所以并沒有規劃將郵件信箱所在的/var/spool/mail/ 目錄獨立成為一個 partition ,然后目前你的主機已經沒有辦法新增或分區出任何新的分區槽了。那我們知道 quota 的支持與文件系統有關, 所以并無法跨文件系統來設計 quota 的project 功能啊!因此,你是否就無法針對 mail 的使用量給予 quota 的限制呢?
此外,如果你想要讓使用者的郵件信箱與家目錄的總體磁盤使用量為固定,那又該如何是好? 由于/home 及 /var/spool/mail 根本不可能是同一個 filesystem (除非是都不分區,使用根目錄,才有可能整合在一起), 所以,該如何進行這樣的 quota 限制呢?
其實沒有那么難啦!既然 quota 是針對 filesystem 來進行限制,假設你又已經有 /home 這個獨立的分區槽了,那么你只要:
- 將 /var/spool/mail 這個目錄完整的移動到 /home 底下;
- 利用
ln -s /home/mail /var/spool/mail
來建立鏈接數據; - 將 /home 進行
quota
限額設定
只要這樣的一個小步驟,嘿嘿!您家主機的郵件就有一定的限額啰!當然啰!您也可以依據不同的使用者與群組來設定 quota 然后同樣的以上面的方式來進行 link 的動作!嘿嘿嘿!就有不同的限額針對不同的使用者提出啰!很方便吧!^_^
朋友們需要注意的是,由于目前新的 distributions 大多有使用 SELinux 的機制, 因此你要進行如同上面的目錄搬移時,在許多情況下可能會有使用上的限制喔!或許你得要先暫時關閉 SELinux 才能測試, 也或許你得要自行修改 SELinux 的規則才行喔!
該系列目錄 --> 【BASH】回顧與知識點梳理(目錄)