[Power by FreeBSD]
顏國雄 2003/08/10 初
quota 的設定與使用
2003/08/10 修改 

對使用者較多的主機來說,如果不針對每個人的磁碟使用容量設限,很可能被少數幾個帳號將所有空間吃個精光,如果加上 partitions 規劃不當,甚至可能造系統無法運作,這部份最常發生在放電子郵件的 /var 及一般使用者放網頁的 partiton。利用 quota 的管制即可預防系統無法運作的狀況。


啟動 quota 的功能

在 Unix like 的系統上,quota 一般可分為兩種:

  • userquota:針對使用者個人使用量設限的。
  • groupquoa:針對同一群組使用者總使用量的。

啟動 quota 的功能必須針對 partitions 來設限,所以到底是要使用 userquota 還是 groupquota ,甚至兩者都設限是由 /etc/fstab 來控制。

下面就來看看如何打開系統 quota 的功能

將 kernel 加入 quota 的選項

要讓 quota 設定能運作首先必須要讓 kernel 有支援,安裝光碟所用的一般(GENERIC)核心並沒有把 QUOTA 的選項給編譯進去,所以一定要重編系統核心才行。這部份可以參考重編核心的文章。

假設核心設定檔 /usr/src/sys/i386/conf/MYBSD

  • cd /usr/src/sys/i386/conf
  • ee MYBSD
  • 在核心設定檔中加入一行 options QUOTA 後按 Esc + Enter + Enter 存檔
  • config MYBSD
  • cd ../../compile/MYBSD
  • make depend
  • make
  • make install

說明:
如果 /usr/src 有完整的 source tree ,記得愛用 :
 make buildkernel KERNCONF=MYBSD
 make installkernel KERNCONF=MYBSD

 

修改 /etc/fstab

在 /etc/fstab 中每一行代表一個檔案系統,其中第四個欄位是 Options ,userquota 和 groupquota 就是要加在這個欄位中

  ee /etc/fstab

假設原來的內容是:

# Device      Mountpoint   FStype Options       Dump Pass#
  /dev/da0s1b none         swap   sw            0    0
  /dev/da1s1b none         swap   sw            0    0
  /dev/da0s1a /            ufs    rw            1    1
  /dev/da0s1g /usr         ufs    rw            2    2
  /dev/da0s1h /usr/local   ufs    rw            2    2
  /dev/da0s1f /var         ufs    rw            2    2
  /dev/da0s1e /var/tmp     ufs    rw            2    2
  /dev/da0s2e /office      ufs    rw            2    2
  /dev/da1s1e /var/mail    ufs    rw            2    2
  /dev/da1s1f /home        ufs    rw            2    2
  /dev/acd0c  /cdrom       cd9660 ro,noauto     0    0
  proc        /proc        procfs rw            0    0

現在想針對 /home 及 /var/mail 設 userquota , 對 /offices 設 groupquota ,
只要修改藍色的部份即可:

# Device      Mountpoint   FStype Options       Dump Pass#
  /dev/da0s1b none         swap   sw            0    0
  /dev/da1s1b none         swap   sw            0    0
  /dev/da0s1a /            ufs    rw            1    1
  /dev/da0s1g /usr         ufs    rw            2    2
  /dev/da0s1h /usr/local   ufs    rw            2    2
  /dev/da0s1f /var         ufs    rw            2    2
  /dev/da0s1e /var/tmp     ufs    rw            2    2
  /dev/da0s2e /office      ufs    rw,groupquota 2    2
  /dev/da1s1e /var/mail    ufs    rw,userquota  2    2
  /dev/da1s1f /home        ufs    rw,userquota  2    2
  /dev/acd0c  /cdrom       cd9660 ro,noauto     0    0
  proc        /proc        procfs rw            0    0

改好後按 Esc + Enter + Enter 存檔

如果 kernel 將 QUOTA 的選項加入重編並安裝好,/etc/fstab 中也把 quota 的選項加好,下次進入 FreeBSD ,系統在 mount 上述的分割區時就會把 quota 選項打開。只要在系統重新開機後執行 mount 指令即可看到有 with quotas 的字眼。

$ mount
/dev/da0s1a on / (ufs,local)
/dev/da0s1g on /usr (ufs, NFS exported, local, soft-updates)
/dev/da0s1h on /usr/local (ufs, local, soft-updates)
/dev/da0s1f on /var (ufs, local, soft-updates)
/dev/da0s1e on /var/tmp (ufs, local, soft-updates)
/dev/da0s2e on /office (ufs, local, with quotas, soft-updates)
/dev/da1s1e on /var/mail (ufs, local, with quotas, soft-updates)
/dev/da1s1f on /home (ufs, local, with quotas, soft-updates)
procfs on /proc (procfs, local)

 

修改 /etc/rc.conf

要讓 quota 能真正有作用還必須要執行過 quotacheck 和 quotaon 兩個命令,我們可以在 /etc/rc.conf 中加入兩個參數,讓系統在開機的過程中自動執行。

  ee /etc/rc.conf

在裡面加入下面這一行:

enable_quotas="YES"

輸入好後按 Esc + Enter + Enter 存檔


設定使用者的 quota

當我們在設定使用者的 quota 時,除了要知道是設定 userquota 還是 groupquota 外,quota 設定內容還可分為:

  • 磁碟空間(block)大小
  • 檔案數(inodes)

    一般懶人的算法是把空間數限制值除以 10 就是 inodes 數限制數,例如:block quota 是 10MB (10240 Kbytes),那 inodes quota 就設 1024

另外,每種還可再分:

  • 軟性限制 (soft limit):超過這個大小但未超過 hard limit 系統只會警告,直到超過警示的時間 (grace time) 未降低使用量才會禁止寫入資料。
  • 硬性限制 (hard limit):超過這個大小,系統馬上會禁止寫入資料。

 

設定環境變數 EDITOR

FreeBSD 的 edquota 和 vipw 一樣,會抓 shell 的環境變數 EDITOR 內容來當它的編輯器,所以在執行 edquota 前建議先將 EDITOR 的內容設為 ee ,可能對 vi 不熟的人操作起來較容易。

下面假設使用的 shell 為 tcsh 或 csh:

 setenv EDITOR ee

root 可以將 /root/.cshrc 中有 EDITOR 那行改為上面的東東

編輯使用者 quota

假設要編輯使用者 cherry 的 userquota ,
而且 /etc/fstab 中已設定了 /home , /var/mail 所在的 partition 啟動 userquota

我們可以執行:

  edquota -u cherry

Quotas for user cherry:
/var/mail: kbytes in use: 93, limits (soft = 0, hard = 0)
        inodes in use: 1, limits (soft = 0, hard = 0)
/home: kbytes in use: 1111, limits (soft = 0, hard = 0)
        inodes in use: 576, limits (soft = 0, hard = 0)

 

如果想讓 cherry 有約 50MB 的電子信箱(/var/mail) 和約 100MB 的網頁空間(/home) ,而且都給最多 10MB 的緩衝空間,我們就可以改成:

Quotas for user cherry:
/var/mail: kbytes in use: 93, limits (soft = 51200, hard = 61200)
        inodes in use: 1, limits (soft = 10, hard = 10)
/home: kbytes in use: 1111, limits (soft = 102400, hard = 112400)
        inodes in use: 576, limits (soft = 10240, hard = 11240)

 

改好後就按離開存檔

如果是要設定群組 group1 的 groupquota 應該要用:

  edquota -g group1

 

複製 quota 的設定

如果每個帳號都得用上述的方法設定,上千人就累死了,我們可以用下面的方法來複製已設定好的帳號給其它使用者,例如:

將 cherry 的設定套用到 gsyan user1 user2 三個帳號

  edquota -u -p cherry gsyan user1 user2

將 cherry 的設定套用到 uid 1000 至 uid 2000 的帳號

  edquota -u -p cherry 1000-2000


查詢使用者的 quota 狀況

quota

repquota -a

 


 


 基礎: 書籤 - 簡介 - 安裝 - Slices - Unix基礎 - 基本指令 - 首次登入 - 目錄架構
 系統: 核心編譯 - 系統升級 - Packages - Ports - PicoBSD - Quota
 網路: 服務管理 - WWW - FTP - MAIL - DNS - Samba - NFS - DHCP - webmin - IMP - OpenWebmail
 其它: Backup - UPS - 系統安全 - ipfw&natd - 撥接服務 - 計時制ADSL - 雜記 - FAQ

北市文山區力行國小顏國雄