1、前言
簡單來說我們作 Disk Quota 的用意,就是為了避免因為使用者無止盡的放置檔案,而系統的空間規劃又不良時將造成系統硬碟空間被吃光,此時我們便可利用 Disk Quota 功能來強制管理硬碟空間。Quota 管理使用對象
- UserQuota: 針對 使用者 硬碟空間做限制。
- GroupQuoa: 針對 群組 硬碟空間做限制。
Quota 管理資料類別
- 磁碟空間 (kbytes): 針對 硬碟空間 作管理 (單位為 KB,所以要設定 10 MB = 10240)。
- 檔案數量 (inode): 針對 檔案數量 作管理。
Quota 管理配額方式
- 非強制性限制 (Soft limit): 超過指定大小但未超過 Hard limit 時系統會警告,直到 超過警示的時間 (grace time,預設七天) 未降低使用量便會禁止寫入資料。
- 強制限制 (Hard limit): 超過這個大小,系統會馬上 禁止 寫入資料。
文章目錄
1、前言2、設定 Disk Quotas 的步驟
步驟 1、修改 /etc/fstab
步驟 2、載入 Quota 設定
步驟 3、建立 Quota 機制相關檔案
步驟 4、建立 Quota 限制
2、設定 Disk Quotas 的步驟
- 修改「/etc/fstab」針對要設定 Quota 的掛載點修改內容 (加在 default, 之後),要啟用使用者 Quota 則加上「usrquota」,要啟用群組 Quota 則加上「grpquota」。
- 將檔案系統重新掛載以便套用生效,可以執行指令「mount -o remount <掛載點>」來重新掛載,掛載完成後用 mount 指令確定是否正確載入。
- 建立 Quota Database 及 Disk Usage Table 檔案,執行指令「quotacheck -cugm <掛載點>」 之後執行指令「quotaon -vug <掛載點>」來啟用 Quota 機制。
- 修改及建立 Disk Quota 限制 「Soft Limit、Hard Limit、寬限時間」。
步驟 1、修改 /etc/fstab
針對要設定 Quota 的掛載點內容進行修改,例如 /home 掛載點要啟用 Disk Quota for User 機制,則修改內容是在該掛載點的「defaults」後面加上「usrquota」(注意不是 us"e"rquota),中間使用逗號進行分隔。# vi /etc/fstab
/dev/sdb1 /home ext4 defaults 1 2 //修改前
/dev/sdb1 /home ext4 defaults,usrquota 1 2 //修改後
步驟 2、載入 Quota 設定
修改 /etc/fstab 檔案完成後,利用指令「mount -o remount /home」重新掛載 /home 掛載點,可以利用 mount 指令來觀察重新掛載檔案系統前後的變化。# mount | grep /home
/dev/sdb1 on /home type ext4 (rw)
# mount -o remount /home
# mount | grep vg
/dev/sdb1 on /home type ext4 (rw) (rw,usrquota)
步驟 3、建立 Quota 機制相關檔案
重新掛載檔案系統完成後 (目前仍未真正支援 Quota 功能),必須先使用「quotacheck -cugm /home」指令來建立 Quota 機制的 Database 及 Disk Usage Table 檔案,以記錄 Quota 機制磁碟使用情況表,相關參數說明如下:- -c: 為檔案系統建立 Quota 檔案,若是使用者 Quota 將於該掛載點建立「aquota.user」檔案,而群組 Quota 則建立「aquota.group」檔案。
- -u: 建立 User Quota Check 檔案。
- -g: 建立 Group Quota Check 檔案。
- -m: 在該掛載點於掛載的情況下 (資料有讀寫行為時),重新掛載並套用 Quota 機制。
# quotacheck -cugm /home //產生 quota db
# ls
aquota.user wei weithenn //aquota.user 檔案建立完成
接著便可以使用「quotaon -vug /home」指令真正啟用該掛載點的 Quota 機制,若後續想進行問題除錯時可以使用「quotaooff -vug /home」指令來停用 Quota 機制,執行 quotaon/quotaoff 指令時若想一次載入所有設定 Quota 機制的掛載點都會套用可以使用參數「-a」,下列執行參數說明:
- -v: verbose 即顯示指令執行後產生的詳細內容。
- -u: 開啟 User Quota 功能。
- -g: 開啟 Group Quota 功能。
# quotaon -vug /home //只針對 /home 掛載點
/dev/sdb1 [/home]: user quotas turned on
步驟 4、建立 Quota 限制
使用指令「edquota <使用者帳號>」或「edquota -g <群組名稱>」來進行 Disk Quota 限制,預設情況下當超過 Soft Limit 設定值時會觸發警告機制 (預設寬限期預設為 7 天),若想改變這個寬限期可以使用指令「edquota -t」進行更改,舉例將 weithenn 使用者帳號中針對硬碟空間作管理 Soft Limit 設為 9MB,而 Hard Limit 則設為 10MB,設定完成後可使用「dd」指令建立指定大小的檔案來測試 Quota 機制是否正確運作,如下操作中可以看到將身份切換為 weithenn 帳號後先建立 5MB 大小的檔案可順利建立,再次建立第二個 5MB 檔案時便出現「Disk quota exceeded」表示 Quota 機制確實限制生效。# edquota weithenn //進入編輯模式修改
Disk quotas for user weithenn (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 632 9216 10240 158 0 0
# setquota wei 9216 10240 0 0 /home //直接指定
# su - weithenn //切換為 weithenn 帳號
$dd if=/dev/zero of=/home/user/weithenn/file bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.0103532 s, 506 MB/s
$dd if=/dev/zero of=/home/user/weithenn/file1 bs=1M count=5
dd: writing `/home/user/weithenn/file1': Disk quota exceeded //Quota 機制生效
5+0 records in
4+0 records out
4595712 bytes (4.6 MB) copied, 0.0108485 s, 424 MB/s
當 Quota 機制生效後,如何快速把某個使用者的 Quota 設定值快速套用給其它使用者帳號,若是某幾個帳號可以使用「edquota -p weithenn chris」指令,將 weithenn 帳號的 Quota 設定套用至 chris 帳號中,若是希望一次套用所有使用者帳號例如 UserID 大於 499 (因為使用者 ID 從 500 開始),可使用如下指令一次套用,因為 nfsnobody 的 UserID 為 65534 所以進行排除的動作,之後則是使用「repquota -a」來查看所有使用者帳號的 Quota 限制資訊及使用情況。
# edquota -p weithenn chris
# edquota -p weithenn `awk -F: '$3 > 499 {print $1}' /etc/passwd | grep -v nfsnobody`
# repquota -a
*** Report for user quotas on device /dev/mapper/vg_centos6-lv_root
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
...略...
weithenn +- 10240 9216 10240 6days 158 0 0
wei -- 32 9216 10240 9 0 0
chris -- 32 9216 10240 9 0 0