︿
Top

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 的步驟

  1. 修改「/etc/fstab」針對要設定 Quota 的掛載點修改內容 (加在 default, 之後),要啟用使用者 Quota 則加上「usrquota」,要啟用群組 Quota 則加上「grpquota」。
  2. 將檔案系統重新掛載以便套用生效,可以執行指令「mount -o remount <掛載點>」來重新掛載,掛載完成後用 mount 指令確定是否正確載入。
  3. 建立 Quota Database 及 Disk Usage Table 檔案,執行指令「quotacheck -cugm <掛載點>」 之後執行指令「quotaon -vug <掛載點>」來啟用 Quota 機制。
  4. 修改及建立 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
文章標籤: