home products tech support contact us

 Linux 技術支援    ⇒   基礎篇    進階篇    補腦篇    指令索引    中⇒ENG
版權所有, 引用請註明出處

 容量配額

1.0 檔案容量配額
        quotacheck 建立配額資料庫
        edquota 編輯配額
           quota 顯示帳號/群組配額
           repquota 統計檔案系統配額
        quotaon 啟動配額
           quotaoff 關閉配額


 1.0 檔案容量配額
檔案容量配額(quota)的目地是限制某用戶或群組使用檔案數或容量的上限,免得硬碟空間被特定使用者揮霍殆盡。

Linux 對檔案容量配額規範如下: 設定容量配額很容易,基本上只要用quotacheck 建立配額資料庫,再下來用 edquota 編輯配額最後用 quotaon 啟動即可,但事前最少要如下的三項準確工作。
  1. 確定 kernel 有支援
    當代的 Linux 應都有支援檔案容量配額(quota),可觀察 kernel 配置檔〝/boot/config-XXX〞(XXX 為 kernal 名稱,不同發行版名稱略異)要確認有無支援容量配額可如下例的操作來確認。

    # cat /boot/config-$(uname -r) | grep 'QUOTA'←確認看 kernel 內無支援 quota
    CONFIG_QUOTA=y
    CONFIG_QUOTACTL=y

    如有出現〝QUOTA=y〞就有支援容量配額,如沒有大部分原因是自行升級 kernel 時 沒把 〝Quota support〞選項納入編譯, 請重新在〝 File systems   --->   [*] Quota support 〞 把 Quota support 納入支援重新編譯再試試看。

  2. 編輯〝/etc/fstab
    如要為使用者啟動容量配額,需在掛載選項中加入〝usrquota〞,如對象為群組則為〝grpquota〞;如下範例〝/home〞為一獨立 partiton,為其加入配額。

    # grep 'quota' /etc/fstab
    LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2 ←在〝/home〞這 partition 同時啟用帳號和群組的容量配額

  3. 重新掛載〝/etc/fstab〞
    編輯好〝/etc/fstab〞中的配額選項後如果此 partition 之前無人使用則直接掛載即可但如已有人使用了該 partition 要改變掛載設定則用 mount -o remount DIR 重新掛載,或者不管三七二十一重開機,但無論如何一定要確認〝/etc/mtab〞內有出現〝usrquota〞或〝grpquota〞才表示設定正確 。

    # grep 'quota' /etc/mtab ←確認〝/etc/mtab〞內有無〝usrquota〞或〝grpquota〞
    LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2

    一旦〝/etc/mtab〞內有〝usrquota〞或〝grpquota〞關於配額的掛載選項,接下來就可用 quotacheck 建立配額資料庫,否則重復檢查動作 1~3。
quotacheck 建立配額資料庫
quotacheck 會參考〝/etc/mtab〞內有無〝usrquota〞或〝grpquota〞 的掛載選項,有則各別在其 filesystem 的最上層產生〝[a]quota.user〞和〝[a]quota.group〞 配額資料庫檔 (如是 xfs filesystem,原生已支援檔案容量配額,故不需執行 quotacheck)。

常用的用法如下:
語法 quotacheck [otpiton] FS|-a
指令名稱/功能/命令使用者 選項 功能
quotacheck/
檢查並產生配額資料庫檔/
root
-a 掃描〝/etc/mtab〞內所有 filesystem
-c 忽略現有配額資料庫,重新建立,(若曾經設定過配額但想重建)
-g 〝/etc/mtab〞內如有〝grpquota〞 的掛載選項,則產生〝[a]quota.group〞
-u 〝/etc/mtab〞內如有〝usrquota〞 的掛載選項,則產生〝[a]quota.user〞
-v 顯示詳細的檢查狀況

例:
# quotacheck -g /mnt ←產生〝aquota.group〞@〝/mnt〞目錄
# quotacheck -u /mnt ←產生〝aquota.user〞@〝/mnt"目錄


例:
# quotacheck -gu -a ←產生〝aquota.group〞或〝aquota.user〞配額資料庫(根據〝/etc/mtab〞)
# find / -maxdepth 2 -name 'quota.*' -o -name 'aquota.*' ←確認一下有無產生配額資料庫檔
/home/aquota.user
/home/aquota.group

所有和配額有關的指令如 quotacheck, repquotaquotaon 等皆有一致性,都沒選項時〝-u〞使用者配額是預設值,〝-g〞 群組配額要指定才會設定,而選項〝-a〞是依據 〝e/tc/mtab〞內有配額選項的 filesystem 否則要指定掛載的 FS(filesystem)如 quotacheck /dev/sda2 或掛載點如 quotacheck /home

^ back on top ^



edquota 編輯配額
quotacheck 產生了配額資料庫檔後就可用 edquota (edit quota)來編輯配額.,其中選項〝 -u〞為編輯使用者的配額(檔案〝aquota.user〞必需存在)而選項〝-g〞為編輯群組的配額(檔案〝aquota.group〞必需存在)。選項〝 -u〞和〝-g〞不能一起用只能擇一,其用法為 edquota [-u|g] user|group 必要時要分兩次動作來完成使用者和群組。

(edquota 操作)
# edquota -u aaa ←編輯〝aaa〞這帳號配額

Disk quotas for user aaa (gid 500):
Filesystem blocks soft hard inodes soft hard  
/dev/sda3 15368 256000 512000 534 0 0  
 
filesystem
所在的 partition
(自己產生的
不用編輯)
目前的 blocks
數(自己產生的
不用編輯)


容量的
軟性限制



容量的
硬性限制



目前的 inode
數(自己產生的
不用編輯)


inode
的軟性
限制


inode
的硬性
限制


←意義



1 2 3 4 5 6 7 ←欄位數

上例進入 edquota 編輯配額預設是用 vi 來編輯,共有 7 個欄位,每一欄位意義各如下:
  1. filesystem:
    顯示要配額的 filesystem 目前在那個 partition,此欄只是告之不可編輯。
  2. blocks:
    顯示要配額的 filesystem 目前所佔的 blocks 數量,此欄只是告之不要去編輯。
  3. soft:
    容量的軟性限制,單位為 KB,所謂的〝軟性限制〞(soft limit)為寛限時間內可超過此容量但會發出警告,但寛限時間一過還是超過軟性限制會無法再存檔,
  4. hard:
    容量的硬性限制,單位為 KB,〝硬性限制〞(hard limit)為不允許超過此限制,
  5. inodes:
    目前配額的 filesystem 所佔的 indoe 數量,因一個檔案有一 inode,故 inode 數等於檔案的數,此欄只是告之不可去編輯。
  6. soft:
    檔案數量的軟性限制。
  7. hard:
    檔案數量的硬性限制。
可編輯的欄位皆為 soft 或 hard 如填入〝0〞表示沒設配額的上限而欄位 1、2、5 是自行產生的不要去編輯, 不小心編輯了也不能存檔 。

編輯完 soft/hard 的配額後如有必要可接下來編輯寛限時間(grace period) ,如沒編輯寛限時間預設為 7 天 。 選項 〝-t〞為針對 filesystem 編輯軟性限制的寛限時間,也就是說同一 filesystem 內大家的寛限時間都一樣,用法為 edquota [-u|g] -t
選項 〝-T〞為針對各別的帳號或群組編輯軟性限制的寛限時間,用法為 edquota [-u|g] -T user|group

編輯寛限時間的單位可為 seconds/minutes/hours 或 days 都可接收。

例:
# edquota -u -t ←編輯 filesystem 軟性限制的寛限時間

例:
# edquota -g -T bbb ←編輯群組〝bbb〞寛限時間

如果帳號很多每一個帳號配額都要編輯一次好像太笨了點,此時可建立一個配額範本帳號 (protyotype)再複製到其他帳號。從範本複製到其他帳號選項為〝-p〞用法為 edquota [-u|g] -p prototype user,,如下例說明。

例:
# edquota -u -p morris sam ←將帳號〝morris〞的配額設定複製到帳號〝sam〞
# edquota -g -p rd rd1 rd2 hr ←將群組〝rd〞的配額設定複製到群組〝rd1〞,〝rd2〞和〝hr〞

但如果帳號很多,還有更聰明的方法,想辦法把〝/etc/passwd〞內的帳號欄用過濾器過濾出來集體設定即可,如下例。

# edquota -u -p morris $(grep 'home' /etc/passwd | cut -d":" -f1) ←將帳號〝morris〞的配額設定複製到全部的帳號
# edquota -p morris $(awk -F":" '$3 > 499 {print $1}' /etc/passwd) ←同上(假設使用者的 UID 從 500 開始)
# edquota -g -p rd $(awk -F":" '$3 > 499 {print $1}' /etc/group)←將群組〝rd〞的配額設定複製到全部的群組


quotaon 啟動配額
edquota 設定完配額,最後一步就是用 quotaon 來啟動,語法為 quotaon [-u|g][-fpv] -a| FS

選項〝-p〞會顯示 filesystem 上的帳號或群組配額是否啟動。

例:
# quotaon -p /home ←查看〝/home〞內的配額有無啟動
group quota on /home(dev/sda2) if off
user quota on /home (dev/sda2) if off

選項〝-v〞啟動或關閉配額時會顯示。

例:
# quotaon -g -a ←啟動群組配額(沒選項〝-v〞故無輸出)
# quotaon -uv -a ←啟動使用者配額並顯示
/dev/sda2 [/home]: user quotas turned on

選項〝-f〞關閉配額。

例:
# quotaon -ufv /home ←關閉〝/home〞使用者的配額
/dev/sda2 [/home]: user quotas turned off
quotaoff 關閉配額
關閉配額指令 quotaoff 就等於 quotaon -f,故用法和 quotaon 一樣。

例:
# quotaoff -uv -a ←關閉使用者的配額(根據〝/etc/mtab〞)
/dev/sda2 [/home]: user quotas turned off


^ back on top ^