站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

Quota-管理硬碟空間配額

最後編輯

修改:

< * 檔案數量 (inode):針對' ''檔案數量''' 作管理

> * 檔案數量 (inode):針對 '''檔案數量''' 作管理


前言

簡單來說我們作 Quota 的用意就是避免因為使用者無止盡的放置檔案而系統的規劃又不良好時將造成系統硬碟空間被吃光,此時我們便可利用 Quota 來強制管理硬碟空間。

Quota 管理使用對象

Quota 管理資料類別

Quota 管理配額方式

實作環境

安裝及設定

步驟1.開啟核心支援 Quota 功能

因為通用系統核心設定 GENERIC 的預設值並沒有啟動 Quota 功能,所以我們必須手動加入把支援 Quota 選項加入

 #vi /sys/i386/conf/mykernel       //切換到核心檔案路徑
 options         QUOTA

修改完核心後要使加入的功能生效就必須再次編譯核心,編譯完核心後別急著重新開機先繼續後續的設定

 #cd /usr/src
 #make kernel

步驟2.開啟檔案系統支援 Quota 功能

接下來修改 /etc/fstab 以便開啟檔案系統支援 user 及 group quota 功能,修改主要是在您要管理的掛載點 (Mountpoint) 中的 Options 加入 userquota 或 groupquota,此次實作主要是對 /home 作 userquota

 #Device                Mountpoint      FStype  Options         Dump    Pass#
 /dev/da0s1g            /home           ufs     rw              2       2       //預設值
 /dev/da0s1g            /home           ufs     rw,userquota    2       2       //修改後

步驟3.修改 /etc/rc.conf

修改 /etc/rc.conf 以便系統重開機時能自動啟動 Quota 服務,另外在 FreeBSD 3.2 以後的版本,系統開機後預設會檢查所有使用者的 quota,但這必須要花上一段時間,如果您不想在開機時自動檢查 quota 可以加入 check_quotas="NO" 但當系統重開機完成時便需要手動執行 quotacheck -a,否則當您打 mount 指令時將不會看到所設定 Quota 的 Mount Point 將不會有 with quotas (也就是 Quota 功能未啟用)

 #vi /etc/rc.conf
 enable_quotas="YES"         //重開機時帶起 Quota 服務 
 check_quotas="YES"          //重開機時進行 quotacheck

以上步驟都完成後,請重新開機讓 Quota 設定生效吧,系統重新開機完成後可使用 mount 指令來確定該 Mountpoint 是不是已經啟動 Quota 功能了

 #mount
 /dev/da0s1a on / (ufs, local)
 devfs on /dev (devfs, local)
 /dev/da0s1g on /home (ufs, NFS exported, local, with quotas, soft-updates)      //可看到 with quotas (表示 Quota 功能啟動成功)
 /dev/da0s1e on /tmp (ufs, local, soft-updates)
 /dev/da0s1f on /usr (ufs, NFS exported, local, soft-updates)
 /dev/da0s1d on /var (ufs, local, soft-updates)
 pid586@ldap:/host on /host (nfs)
 pid586@ldap:/net on /net (nfs)

步驟4.編輯使用者 Quota

我們可以使用 edquota 指令來編輯使用者 Quota 大小 (當您離開編輯器後所定義的磁碟配額設定就會馬上生效)

 #edquota -u wei                                               //編輯使用者 quota 資訊
 Quotas for user wei:
 /home: kbytes in use: 60, limits (soft = 921, hard = 1024)    //指定非強制 0.9 MB,強制 1MB 
        inodes in use: 30, limits (soft = 0, hard = 0)         //因為不對檔案數作限制因此不修改

修改後我們可以使用指令 quota -u 來查看指定後的 Quota 資訊如下

 #quota -u wei
 Disk quotas for user wei (uid 10003):
 Filesystem   usage   quota   limit   grace   files   quota   limit   grace
     /home    60      921     1024            30      0       0

Quota 資訊我們大概可以分成三個部份來看,如下所示

Disk quotas for user wei (uid 10003):
檔案系統磁碟空間 (kbytes)檔案數量 (inode)
Filesystemusagequotalimitgracefilesquotalimitgrace
掛載點目前使用空間非強制強制警示時間目前檔案數非強制強制警示時間
/home609211024_3000_

當然如果想看一百個人的 quota 怎辦?我們可以使用 repquota -a 來列出所有使用者的 Quota 資訊

 #repquota -a    

步驟5.一次大量設定 Quota

如果需要同時設定多人的 quota 怎辦?

 #edquota -u -p wei user1 user2 user3     //套用 wei 的 Quota 設定到 user1,2,3身上
 #edquota -u -p wei 10000-20000           //套用 wei 的 Quota 設定到 uid 10000 ~ 20000 身上

步驟6.測試 Quota 功能

設定完成後來測試我們設定的 Quota 有沒有發生作用,不過要記得一點 userquota 顧名思義是針對該 user 作 quota,例如我 (root) 在測試時把檔案 copy 到 wei 家目錄下,但因為該檔案的 owner 是 root,所以打 quota wei 是看不到 usage 數值有增加的。

超過 Soft Limit 但尚未超過 Hard Limit

從下面 Quota 資訊我們可以看到目前磁碟空間使用量已超過 Soft Limit 未超過 Hard Limit,也可看到警示時間欄位 (grace time) 也啟動了,也就是若七天內使用者 wei 未把使用的磁碟空間減小將無法寫入任何資料。

 #quota -u wei
 Disk quotas for user wei (uid 10003):
 Filesystem   usage   quota   limit   grace   files   quota   limit   grace
     /home    1020*    921    1024    7days   66      0       0        

超過 Hard Limit 時

接上例若此時想在複製檔案,但複製檔案後使用磁碟空間將會超過 Hard Limit 時,系統便會告知說無法寫入了

 #cp file1 file2
 /home: write failed, user disk limit reached   
 cp: file2: Disc quota exceeded

參考

[雄的 FreeBSD 筆記- Quota 的設定與使用]

[全球資訊網路 FreeBSD 架站日誌-Quota User 硬碟空間管理]

[FreeBSD 使用手冊-檔案系統配額]

[twbsd.org - 如何限制系統資源 (如硬碟空間) 的使用]

[The FreeBSD Diary - Quotas installation and configuration]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com