天天看點

Ext4 開啟 project quotaquota 介紹使用步驟

quota 介紹

project quota 介紹

quota 子系統用于限制磁盤的使用量。

從限制的主體進行分類,quota 包含 user quota、group quota 與 project quota 三部分。顧名思義,user quota、group quota 限制的主體分别是 user、user group,而 project quota 限制的主體則是 project id。當一個目錄下的所有子目錄和檔案擁有相同的 project id 時,就可以限制一個目錄下總的磁盤使用量。

quota 子系統其實是一項“古老”的特性,user quota 與 group quota 早在 Linux v2.6 就開始支援,而 project quota 則來得相對晚一些。project quota 特性最初來源于 XFS,Linux v4.5 開始 ext4 才正式支援 project quota。

quota 配額

quota 從限制的對象進行分類,包括 block quota 與 inode quota 兩部分。

限制的類型又包含 softlimit 與 hardlimit 兩類,其中 hardlimit 是不可超越的,即 inode/block 配置設定過程中若目前占用的 inode/block 數量超過 hardlimit,那麼配置設定過程就會失敗。

softlimit 是可以暫時超越的,inode/block 配置設定過程中若目前占用的 inode/block 數量超過 softlimit 但是尚未超過 hardlimit,那麼隻會列印 warnning 資訊,但是配置設定過程并不會失敗。

但是系統不能長時間超過 softlimit,系統可以超過 softlimit 的最長時間稱為 grace time,在第一次超過 softlimit 的時候開始計時,在 grace time 時間以内,盡管目前占用的 inode/block 數量超過 softlimit,但是配置設定過程不會失敗;而如果 grace time 時間以後,目前占用的 inode/block 數量仍然沒有降到 softlimit 以下,此時配置設定過程就會失敗。

grace time 參數是 filesystem wide 統一的,即同一個檔案系統(磁盤分區)共用同一份 grace time 參數。

注意

測試的時候,root 使用者具有 CAP_SYS_RESOURCE 權限,因而不受 hardlimit 限制。

使用步驟

1 格式化檔案系統

mkfs 格式化檔案系統時打開 "project,quota" 特性:

mkfs.ext4 -O project,quota <device>           

或者對現有的檔案系統打開 "project,quota" 特性:

tune2fs -O project,quota <device>           

2 開啟/關閉 prjquota 限制

quota 子系統實際上實作有兩種功能:

1) accounting,即統計各個 project id 分組的 inode/block 使用量;

2) limit,即在 accounting 的基礎上,對各個 project id 分組的 inode/block 使用量上限進行限制。

格式化檔案系統時打開 "project,quota" 特性,實際上隻是開啟 accounting 功能,使用預設參數挂載檔案系統時,隻是開啟 accounting 功能,limit 功能并沒有開啟。此時需要使用 quotaon 手動開啟 limit 功能,或者使用 prjquota 挂載參數自動開啟 limit 功能。

2.1 檢視 quota 狀态

使用 quotaon -Ppv 來檢視檔案系統 accounting/limit 這兩種功能的開啟情況。

例如在 limit 功能開啟前:

# print quota state
quotaon -Ppv <mntpoint>           

輸出如下:

project quota on /mnt (/dev/vdb) is on (accounting)           

表示 accounting on, limit off。

使用 quotaon 手動開啟 limit 功能:

# turning quota on 
quotaon -P <mntpoint>           

此時 quota 的狀态變為:

# print quota state
quotaon -Ppv <mntpoint>           
project quota on /mnt (/dev/vdb) is on (enforced)           

表示 accounting on, limit on。

2.2 quotaon 開啟

使用預設參數挂載檔案系統時,隻是開啟 accounting 功能,limit 功能并沒有開啟,需要通過 quotaon 手動開啟:

quotaon -P <mntpoint>           

2.3 prjquota 挂載參數開啟

使用 "prjquota" 參數挂載檔案系統時,預設自動打開 project quota 限制功能。

mount -o prjquota <device> <mntpoint>           

2.4 quotaoff 關閉

使用 quotaoff 關閉 project quota 限制功能。

quotaoff -P <mntpoint>           

3 project id

3.1 設定 project id

使用 chattr -p 設定檔案或目錄的 project id

chattr -p <projectid> <file|directory>           

但是此時在目錄下建立的子檔案或子目錄并不會繼承父目錄的 project id,需要使用 chattr +P 開啟目錄的繼承 project id 的特性:

chattr +P <file|directory>           

或者直接使用以下指令同時設定 project id 和開啟繼承特性:

chattr +P -p <projectid> <file|directory>           

3.2 檢視 project id

使用 lsattr -p 擷取檔案的 projec id:

lsattr -p            

4 prjquota 配額

4.1 edquota 設定配額

使用 edquota 設定特定 project id 的配額:

edquota -P -f <mntpoint> <projectid>           

執行 edquota 指令會進入一個 vim 界面,此時使用者可以設定 inode/block 的 soft/hard limit。

例如:

edquota -P -f /dev/vdb 124           
Disk quotas for project 124 (pid 124):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vdb                          4          0          0          2        0        0                         0          0          0          0        0        0           

4.2 setquota 設定配額

也可以使用 setquota 設定特定 project id 的配額:

setquota -P <projectid> <block-softlimit> <block-hardlimit> <inode-softlimit> <inode-hardlimit> <mntpoint>           

4.3 repquota 檢視配額

使用 repquota 檢視所有 project id 的配額:

repquota -P <mntpoint>           

繼續閱讀