︿
Top

1、前言

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


Quota 管理使用對象

  • UserQuota:針對 使用者 硬碟空間做限制。
  • GroupQuoa:針對 群組 硬碟空間做限制。

Quota 管理資料類別

  • 磁碟空間 (kbytes):針對 硬碟空間 作管理 (單位為 kbytes,所以 10 MB = 10240 kbytes)。
  • 檔案數量 (inode):針對 檔案數量 作管理。

Quota 管理配額方式

  • 非強制性限制 (Soft limit):超過指定大小但未超過 Hard limit 時系統會警告,直到 超過警示的時間 (grace time,預設七天)未降低使用量便會禁止寫入資料。
  • 強制限制 (Hard limit):超過這個大小,系統會馬上 禁止 寫入資料。





文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.開啟核心支援 Quota 功能
          步驟2.開啟檔案系統支援 Quota 功能
          步驟3.修改 /etc/rc.conf
          步驟4.編輯使用者 Quota
          步驟5.一次大量設定 Quota
          步驟6.測試 Quota 功能
4、參考





2、實作環境

  • FreeBSD 6.1-STABLE





3、安裝及設定

步驟 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 功能了。(看到 with quotas 字眼,表示 Quota 機制啟動成功!!)
mount
 /dev/da0s1a on / (ufs, local)
 devfs on /dev (devfs, local)
 /dev/da0s1g on /home (ufs, NFS exported, local, with quotas, soft-updates)
 /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 大小 (當您離開編輯器後所定義的磁碟配額設定就會馬上生效),此實作中我們僅指定非強制 0.9 MB 強制 1MB ,而不針對檔案數量進行限制。
edquota -u wei      //編輯使用者 quota 資訊
 Quotas for user wei:
 /home: kbytes in use: 60, limits (soft = 921, hard = 1024)  //指定檔案大小
        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 資訊我們大概可以分成三個部份來看,如下所示


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



步驟 5. 一次大量設定 Quota

如果需要同時設定多人的 quota 怎辦?
edquota -u -p wei user1 user2 user3   //套用 wei 設定到 user1,2,3
edquota -u -p wei 10000-20000         //套用 wei 設定到 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






4、參考

文章標籤: