Linux 基礎學習篇 - Fedora Core 4

第十五章、 Linux 磁碟配額 (Quota) - for Fedora Core 4

讓使用者能夠使用的磁碟容量受限制!

最近更新時間: 2005/09/06

本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!

磁碟配額 ( Quota ) 一直就是個很有用的東西!怎麼說呢?舉個例子來說明, 如果您曾經申請過網路的 mail 服務時,那麼肯定就會明白什麼是 20MB 的郵件空間、 30MB 的免費網頁空間,好了,這個 20MB, 30MB 是怎樣定義出來的呢?哈哈!沒錯,就是 quota 這個東西搞出來的!如果我們要限制使用者使用硬碟的容量使用大小,嗯!來這裡看看就對了!

什麼是 Quota

『 quota 』就字面上的意思來看,呵呵!就是有多少『限額』的意思啦!如果是用在零用錢上面, 就是類似『有多少零用錢一個月』的意思之類的。如果是在容量空間上面呢?以 Linux 來說,呵呵!就是有多少容量限制的意思。

在 Linux 系統中,由於是多人多工的環境,所以會有多人共同使用一個硬碟空間的情況發生, 如果其中有少數幾個使用者大量的佔掉了硬碟空間的話,那勢必壓縮其他使用者的使用權力! 因此管理員應該適當的開放硬碟的權限給使用者,以妥善的分配系統資源!避免有人抗議呀! 舉例來說,我們使用者的預設家目錄都是在 /home 底下,如果 /home 是個獨立的 partition , 他大概有 10G 好了,而 /home 底下共有 30 個人,也就是說,每個使用者平均應該會有 333MB 的空間才對。 偏偏有個使用者在他的家目錄底下塞了好多隻影片,佔掉了 8GB 的空間,想想看,是否造成其他正常使用者的不便呢? 這個時候就得要靠 quota 的幫忙囉!

  • Quota 的一般用途
  • quota 比較常使用的幾個情況是:
    • 針對 WWW server ,例如:每個人的網頁空間的容量限制!
    • 針對 mail server,例如:每個人的郵件空間限制。
    • 針對 file server,例如:每個人最大的可用網路硬碟空間。
    在 Linux 當中,使用來作為硬碟空間管理的就是所謂的 quota 這個咚咚啦!

  • Quota 的使用限制
  • 使用這個模組要有幾個步驟,底下就分別說說吧!另外要特別注意的是,使用 quota 時有幾個基本的限制需要談一談:
    • 僅針對整個 partition:
      quota 實際在運作的時候,是針對『整個 partition』進行限制的, 例如:如果你的 /dev/hda5 是掛載在 /home 底下,那麼在 /home 底下的所有目錄都會受到限制!

    • 核心必須支援 quota :
      Linux 系統核心必須有支援 quota 這個模組才行:如果您是使用 FC4 的預設核心, 嘿嘿!那恭喜你了,你的系統已經預設有開放 quota 這個模組囉!如果您是自行編譯核心的,那麼請特別留意您是否已經『真的』開啟了 quota 這個模組?否則底下的功夫將全部都視為『白工』。至於核心編譯的過程我們會在未來進行說明呦!

    • Quota 的記錄檔:
      目前新版的 Linux distributions 如: FC4 與 SuSE server 9 等使用的是 Kernel 2.6.xx 的核心版本,這個核心版本支援新的 quota 模組,使用的預設檔案( aquota.user, aquota.group )將不同於舊版本的 quota.user, quota.group !(多了一個 a 呦!)而由舊版本的 quota 可以藉由 convertquota 這個程式來轉換呢!

    • 只對一般身份使用者有效:
      這就有趣了!並不是所有在 Linux 上面的帳號都可以設定 quota 呢,例如 root 就不能設定 quota , 因為整個系統所有的資料幾乎都是他的啊! ^_^
  • quota 這支程式對硬碟配額的限制項目:
  • quota 這支程式針對整個 partition 的限制項目主要分為底下幾個部分:
    • soft
      這是最低限制容量的意思,使用者在寬限期間之內,他的容量可以超過 soft ,但必需要寬限時間之內將磁碟容量降低到 soft 的容量限制之下!

    • hard
      這是『絕對不能超過』的容量!跟 soft 相比的意思為何呢?通常 hard limit 會比 soft limit 為高,例如網路磁碟空間為 30 MB ,那麼 hard limit 就設定為 30MB ,但是為了讓使用者有一定的警戒心,所以當使用空間超過 25 MB 時,例如使用者使用了 27 MB 的空間時,那麼系統就會警告使用者, 讓使用者可以在『寬限時間內』將他的檔案量降低至 25 MB ( 亦即是 soft limit )之內!也就是說, soft 到 hard 之間的容量其實就是寬限的容量啦!可以達到針對使用者的『警示』作用!

    • 寬限時間
      那麼寬限時間就可以很清楚的知道含意是什麼了!也就是當您的使用者使用的空間超過了 soft limit ,卻還沒有到達 hard limit 時,那麼在這個『寬限時間』之內, 就必需要請使用者將使用的磁碟容量降低到 soft limit 之下!而當使用者將磁碟容量使用情況超過 soft limit 時,『寬限時間』就會自動被啟動,而在使用者將容量降低到 soft limit 之下,那麼寬限時間就會自動的取消囉!

    基本的 quota 指令:

    在開始進行 quota 的實作之前,我們得來瞭解一下 quota 要使用的指令囉!基本上分為兩種,一種是查詢功能 ( quota, quotacheck, quotastats, warnquota, repquota ),另一種則是編輯 quota 的內容 ( edquota, setquota ) 。底下我們來談一談這些基本的指令吧!


  • /etc/mtab
  • 怪了!不是說好要說明 quota 相關指令的嗎?幹嘛提這個檔案系統 (filesystem) 實際掛載的記錄檔?呵呵!要注意了~當我們使用 quota 的時候,基本上,系統會去搜尋:『 系統上具有 quota 參數的 partition 』 所以囉,當我們要使用 quota 的功能時,我們的 filesystem 必須要已經支援 quota 的旗標才行。一般來說,我們是以編輯 /etc/fstab 後,再重新掛載 filesystem 的方法來讓系統的 filesystem 支援 quota 的!這個概念可是很重要的喔! ^_^


  • quota
  • [root@linux ~]# quota [-uvsl] [username]
    [root@linux ~]# quota [-gvsl] [groupname]
    參數:
    -u  :後面可以接 username ,表示顯示出該使用者的 quota 限制值。若不接 username 
          ,表示顯示出執行者的 quota 限制值。
    -g  :後面可接 groupname ,表示顯示出該群組的 quota 限制值。
    -v  :顯示每個 filesystem 的 quota 值;
    -s  :可選擇以 inode 或磁碟容量的限制值來顯示;
    -l  :僅顯示出目前本機上面的 filesystem 的 quota 值。
    範例:
    
    範例一:秀出目前 root 自己的 quota 限制值:
    [root@linux ~]# quota -guvs
    
    範例二:秀出 dmtsai 這個使用者的磁碟配額
    [root@linux ~]# quota -vs -u dmtsai
    # 注意一下這兩個範例,如果您的系統上面尚未有任何的 quota 支援的 filesystem 時,
    # 使用這兩個範例時,『不會有任何資訊列出來』啦!不要以為發生錯誤囉!
    
    這個指令僅是使用來『顯示(display)』目前某個群組或者某個使用者的 quota 限值!您可以使用來觀察一下呦!

  • quotacheck
  • [root@linux ~]# quotacheck [-avug] [/mount_point]
    參數:
    -a  :掃瞄所有在 /etc/mtab 內,含有 quota 支援的 filesystem,加上此參數後, 
          /mount_point 可不必寫,因為掃瞄所有的 filesystem 了嘛!
    -u  :針對使用者掃瞄檔案與目錄的使用情況,會建立 aquota.user
    -g  :針對群組掃瞄檔案與目錄的使用情況,會建立 aquota.group
    -v  :顯示掃瞄過程的資訊;
    -M  :『強制』進行 quotacheck 的掃瞄。
    範例:
    
    範例一:將所有的在 /etc/mtab 內,含有 quota 支援的 partition 進行掃瞄
    [root@linux ~]# quotacheck -avug
    quotacheck: Can't find filesystem to check or filesystem not mounted with 
    quota option.
    # 不要緊張,這是正常的現象~因為您尚未啟用 quota 的參數嘛!
    # 關於 quota 參數的下達方法,我們會在稍後說明。如果正常的進行掃瞄,會像下面這樣:
    [root@linux ~]# quotacheck -avug
    quotacheck: Scanning /dev/hdb1 [/disk2] done
    quotacheck: Checked 3 directories and 4 files
    [root@linux ~]# ll /disk2
    total 32
    -rw-------  1 root root  6144 Sep  5 14:56 aquota.group
    -rw-------  1 root root  6144 Sep  5 14:56 aquota.user
    drwx------  2 root root 16384 Jun 25 16:22 lost+found
    # 第一次操作 quotacheck 可能會有一些錯誤訊息發生,那應該是正常的!
    # 如果使用 ls -l 去查閱一下有 quota 支援的那個 mount point ,若有出現
    # aquota.group 及 aquota.user ,那應該就是已經建立好了 quota 記錄檔了!
    
    範例二:強制掃瞄已掛載的 filesystem
    [root@linux ~]# quotacheck -avug -m
    # 有些時候,在某些 Linux distributions 上面,進行 quotacheck 時,
    # 可能會出現如下的錯誤訊息:
    # quotacheck: Cannot get quotafile name for /dev/hda3
    # quotacheck: Cannot get quotafile name for /dev/hda3
    # 果真如此的話,那麼你可以如同上面一般,加上 -m 的參數來『強制』掃瞄。
    # 也可以手動先建立記錄檔,然後再掃瞄,如下所示:
    [root@linux ~]# touch /disk2/aquota.user; touch /disk2/aquota.group
    [root@linux ~]# quotacheck -avug
    # 必須要注意的是,我這裡是以 /disk2 作為一個測試的 mount point ,
    # 您的掛載點不一定會跟鳥哥一樣喔!
    
    這這個指令主要的目的在掃瞄某一個磁碟的 quota 空間,他會針對該 partitions 進行掃瞄,並且,由於該磁碟若持續運作時,可能掃瞄的過程中, 檔案可能會增減,造成 quota 掃瞄的錯誤發生,因此,當使用 quotacheck 時,該磁碟將『 自動被設定成為唯讀磁區 ( read-only ) 』 ;至於掃瞄完畢之後, 掃瞄所得的磁碟空間結果會寫入該磁區最頂端。 ( 例如:在鳥哥的例子中,掃瞄 /disk2 這個 /dev/hdb1 的磁區,如果是初次掃瞄,那麼掃瞄完畢之後會產生 aquota.user 與 aquota.group ,會放置在 /disk2/aquota.user 與 /disk2/aquota.group 底下!而如果是建立 quota 後的掃瞄,那麼就會更新這兩個檔案! ) 另外, Linux 也特別強調 quota 在使用的時候,需要特別注意在 reboot 時,得先將 quota 關閉才好!

    此外,由於新版的 Linux distribution 在 quota 的設計上似乎有點小問題,有時候無法完整的進行 quotacheck ,發生如同上表的情況,解決的方法就是主動手動的建立 quotafile 即可喔!例如上面的範例二所顯示的。


  • edquota
  • [root@linux ~]# edquota [-u username] [-g groupname]
    [root@linux ~]# edquota -t  <==修改恕限時間
    [root@linux ~]# edquota -p username_demo -u username
    參數:
    -u  :後面接帳號名稱。可以進入 quota 的編輯畫面 (vi) 去設定 username 的限制值;
    -g  :後面接群組名稱。可以進入 quota 的編輯畫面 (vi) 去設定 groupname 的限制值;
    -t  :可以修改恕限時間 (就是超過 quota 的 soft limit 值後,還能使用硬碟的寬限期限)
    -p  :複製範本。那個 username_demo 為已經存在並且已設定好 quota 的使用者,
          意義為『將 username_demo 這個人的 quota 限制值複製給 username 』!
    範例:
    
    範例一:設定 dmtsai 這個使用者的 quota 限制值
    [root@linux ~]# edquota -u dmtsai
    Disk quotas for user dmtsai (uid 501):
      Filesystem    blocks    soft    hard   inodes   soft   hard
      /dev/hdb1          0       0       0        0      0      0
    # 進入編輯畫面後,以 vi 的相關行為進行編輯喔!我們可以看到
    # 被編輯的使用者是 dmtsai ,而底下共有七個欄位,每個欄位的意義我們將在
    # 底下的說明繼續介紹。而假設我們對於 dmtsai 的限制是 30MB 的話,那麼:
    Disk quotas for user dmtsai (uid 501):
      Filesystem    blocks    soft    hard   inodes   soft   hard
      /dev/hdb1          0   25000   30000        0      0      0
    # 然後就可以儲存後離開囉!
    
    範例二:將 dmtsai 的 quota 限制值 (30MB) 複製給 vbird1 這個使用者
    [root@linux ~]# edquota -p dmtsai -u vbird1
    
    範例三:修訂恕限時間
    [root@linux ~]# edquota -t
    Grace period before enforcing soft limits for users:
    Time units may be: days, hours, minutes, or seconds
      Filesystem             Block grace period     Inode grace period
      /dev/hdb1                     7days                  7days
    # 預設的恕限時間是 7 天啦!你當然可以修訂時間!
    
    這個指令就是在編輯每一個『個人』或者是『群組』的 quota 數值!通常我們以 edquota -u username 或者是 edquota -g groupname 來編輯個人與群組的 quota 設定值。不過,或許您會覺得一個一個分配似乎很慢的樣子!那麼您也可以直接 copy 一個人的設定值給其他人,就如同上面第二個例子,利用已經建立好的 dmtsai 來建立 vbird1 這個人的 quota 限額!這個指令可是很重要的呦! 另外,範例一當中出現的那七個欄位代表的意義我們得要談一談啊:
    • filesystem
      代表這個 quota 是針對哪一個 partition 的意思。以範例一的情況來說,指的是 /dev/hdb1 囉! 也就是 /disk2 那個目錄底下的 quota 限制值啦!

    • blocks
      這個是目前使用者 dmtsai ( uid 501 ) 在 /dev/hdb1 這個 filesystem (參考上面一個資訊),所耗掉的磁碟容量,也就是目前的使用掉的空間啦!單位是 Kbytes 喔!這個資訊是 quota 程式自己計算出來的,所以請不要修改他!

    • soft 與 hard
      這個是目前的 dmtsai 使用者在這個 filesystem 之內的 quota 限制值!至於 soft 與 hard 的意思就如同 前一節最後面提的那個意思啦!soft 代表的是一個『警告』限值, hard 則是一個『不可超過的限值』, soft 與 hard 中間的差值則為寬限的數值。而當 soft 與 hard 數值為 0 的時候,表示『沒有限制』的意思!而數值的單位仍是 Kbytes 喔!

    • inodes
      是目前使用掉 inode 的狀態,也是 quota 自己計算出來而得到的,所以不要去變更他。一般而言, inode 不容易控制,所以您可以不必去限制 inode 呢!

  • quotaon
  • [root@linux ~]# quotaon [-avug]
    [root@linux ~]# quotaon [-vug] [/mount_point]
    參數:
    -u  :針對使用者啟動 quota (aquota.user)
    -g  :針對群組啟動 quota (aquota.group)
    -v  :顯示啟動過程的相關訊息;
    -a  :根據 /etc/mtab 內的 filesystem 設定啟動有關的 quota ,若不加 -a 的話,
          則後面就需要加上特定的那個 filesystem 喔!
    範例:
    
    範例一:啟動所有的具有 quota 的 filesystem
    [root@linux ~]# quotaon -auvg
    /dev/hdb1 [/disk2]: group quotas turned on
    /dev/hdb1 [/disk2]: user quotas turned on
    
    範例二:僅啟動 /disk2 裡面的 user quota 設定值:
    [root@linux ~]# quotaon -uv /disk2
    
    這個指令是在啟動 quota 的!不過,由於這個指令是啟動 aquota.group 與 aquota.user 的,所以您就必須要先完成 quotacheck 的工作了!然後簡單的下達 quotaon -a 即可啟動!


  • quotaoff
  • [root@linux ~]# quotaoff [-a]
    [root@linux ~]# quotaoff [-ug] [/mount_point]
    參數:
    -a  :全部的 filesystem 的 quota 都關閉 (根據 /etc/mtab)
    -u  :僅針對後面接的那個 /mount_point 關閉 user quota
    -g  :僅針對後面接的那個 /mount_point 關閉 group quota
    範例:
    
    範例一:
    [root@linux ~]# quotaoff -a
    
    這個指令就是關閉了 quota 的限制啦!

    實作 Quota

    Quota 使用的方向很廣啦,不過,他一般的用途大概有這些:
    • 限制某一群組所能使用的最大磁碟配額 (使用群組限制)
      你可以將你的主機上的使用者分門別類,有點像是目前很流行的付費與免付費會員制的情況, 你比較喜好的那一群的使用配額就可以給高一些!呵呵! ^_^...

    • 限制某一使用者的最大磁碟配額 (使用使用者限制)
      在限制了群組之後,您也可以再繼續針對個人來進行限制,使得同一群組之下還可以有更公平的分配!

    • 以 Link 的方式,來使郵件可以作為限制的配額 (更改 /var/spool/mail 這個路徑)
      如果是分為付費與免付費會員的『郵件主機系統』,是否需要重新再規劃一個硬碟呢? 也不需要啦!直接使用 Link 的方式指向 /home (或者其他已經做好的 quota 磁碟)就可以啦! 這通常是用在原本規劃不好,但是卻又不想要更動原有主機架構的情況中啊!
    那麼 Quota 從開始準備 filesystem 的支援到整個設定結束的主要的步驟大概是:
    1. 設定 partition 的 filesystem 支援 quota 參數:
      由於 quota 必須要讓 partition 上面的 filesystem 支援才行,一般來說, 支援度最好的是 ext2/ext3 ,其他的 filesystem 類型鳥哥我是沒有試過啦! 啟動 filesystem 支援 quota 最簡單就是編輯 /etc/fstab ,使得準備要開放的 quota 磁碟可以支援 quota 囉;

    2. 建立 quota 記錄檔:
      剛剛前面講過,整個 quota 進行磁碟限制值記錄的檔案是 aquota.user/aquota.group, 要建立這兩個檔案就必須要先利用 quotacheck 掃瞄才行喔!所以囉,接下來的步驟就是: 使用 quotacheck 來掃瞄一下我們要使用的磁碟囉;

    3. 編輯 quota 限制值資料:
      再來就是使用 edquota 來編輯每個使用者或群組的可使用空間囉;

    4. 重新掃瞄與啟動 quota :
      設定好 quota 之後,建議可以再進行一次 quotacheck ,然後再以 quotaon 來啟動吧!
    整個 quota 設定的步驟就只是這樣而已,簡單吧!我們底下就直接來用一個範例介紹一下整個流程, 好讓您更清楚的瞭解到整個步驟喔!我範例是這樣的:
    1. 鳥哥的這部 Linux 主機裡面主要針對 quser1 及 quser2 兩個使用者來進行磁碟配額, 且這兩個使用者都是掛在 qgroup 群組裡面的喔。
    2. 每個使用者總共有 50MB 的磁碟空間 (不考慮 inode) 限制!並且 soft limit 為 45 MB;
    3. 而寬限時間設定為 1 天,也就是說,這兩個人可以突破 45MB 的限制, 但是在一天之內必須要將多餘的檔案砍掉,否則將無法使用剩下的空間 (也就是說,這個帳號大概就不能進行檔案新增的工作了);
    4. gquota 這個群組考慮最大限額,所以設定為 90 MB 好了!
    多說無用,我們就實際來進行囉!

    1. 準備好測試的環境,使用者與群組的建立:

      這兩個帳號應該是不存在我們的系統的,所以,趕緊將他設定上去吧!
      [root@linux ~]# groupadd qgroup
      [root@linux ~]# useradd -m -g qgroup quser1
      [root@linux ~]# useradd -m -g qgroup quser2
      [root@linux ~]# passwd quser1
      [root@linux ~]# passwd quser2
      


    2. 建立好 filesystem 的 quota 支援:

      由於 quota 較完整的支援是需要在 ext2/ext3 的 Linux 延伸格式檔案才可以啟動, 所以建議你就必須要將準備開啟 quota 的磁碟啟動參數,寫進入 quota 的磁碟設定才行 ( /etc/fstab )!以鳥哥的例子而言,我想要在 /disk2 底下進行 quota 的限制 quser1, quser2 這兩個人!這是因為我的 /disk2 是一個獨立的磁區,這可以使用 df 來查詢。 此外,必需要特別留意的是,最好不要以根目錄亦即是 / 進行 quota 啦!否則容易有些問題呢! 另外,不要針對 root 做 quota 喔!反正做了也沒用!
      [root@linux ~]# df
      Filesystem           1K-blocks      Used Available Use% Mounted on
      /dev/hda1              5952252   3193292   2451720  57% /
      /dev/hdb1             28267608     77904  26730604   1% /disk2
      /dev/hda5              9492644    227252   8775412   3% /disk1
      
      嗯!我的 /disk2 是獨立的 partition ,並且他的裝置名為 /dev/hdb1 ,好了!那麼我就必須要啟動 /disk2 這個 /dev/hdb1 的 quota 檔案格式,好了!那麼由於檔案格式的設定是寫在 /etc/fstab 裡頭,所以我們以 vi 來編輯他吧!只要在 /etc/fstab 裡頭增加了 usrquota, grpquota 就可以啦! (註:請特別留意,這兩個項目請『務必』不要寫錯了!請在寫入 /etc/fstab 之前好好的再次檢查,因為寫錯之後,很有可能造成系統無法開機,雖然機率不高,但是有可能!)
      [root@linux ~]# vi /etc/fstab
      LABEL=/        /          ext3    defaults                    1 1
      LABEL=/disk1   /disk1     ext3    defaults                    1 2
      LABEL=/disk2   /disk2     ext3    defaults,usrquota,grpquota  1 2
      /dev/hda3      swap       swap    defaults                    0 0
      
      注意到我們所需要設定的那個 /disk2 的那一行,在第四欄位多了 usrquota,grpquota 注意,在『 defaults,usrquota,grpquota 』之間都沒有空格!

      這樣就算加入了 quota 的磁碟格式了!不過,由於真正的 quota 在讀取的時候是讀取 /etc/mtab 這個檔案的,偏偏這一個檔案需要重新開機之後才能夠以 /etc/fstab 的新資料進行改寫!所以這個時候你可以選擇:

      1. 重新開機 (reboot) ;
      2. 重新 remount filesystem 來驅動設定值!

      我是不太喜歡重新開機的人啦!所以我就這麼做:
      [root@linux ~]# umount /dev/hdb1
      [root@linux ~]# mount -a
      [root@linux ~]# grep '/disk2' /etc/mtab
      /dev/hdb1 /disk2 ext3 rw,usrquota,grpquota 0 0
      
      # 事實上,也可以利用 mount 的 remount 功能!
      [root@linux ~]# mount -o remount /disk2
      
      嘿嘿嘿嘿!這樣我們就已經成功的將 filesystem 的 quota 功能加入囉!另外,鳥哥這裡是以 ext3 這個磁碟格式來測試 quota 的呦!


    3. 掃瞄磁碟的使用者使用狀況,並產生重要的 aquota.group 與 aquota.user:

      接著下來就是要來掃瞄一下我們所需要的磁碟到底有沒有多餘的空間可以讓我們來設定 quota 呢?並且將掃瞄的結果輸出到這個磁碟的最頂層去(也就是 /disk2 底下)這個時候就需要 quotacheck 這個指令的幫忙了!使用 quotacheck 就可以輕易的將所需要的資料給他輸出了! 並且在 /disk2 底下會產生 aquota.group 與 aquota.user 這兩個檔案!
      [root@linux ~]# quotacheck -avug
      quotacheck: Scanning /dev/hdb1 [/disk2] done
      quotacheck: Checked 3 directories and 4 files
      [root@linux ~]# ll /disk2
      -rw-------  1 root root  6144 Sep  6 11:44 aquota.group
      -rw-------  1 root root  6144 Sep  6 11:44 aquota.user
      
      使用 quotacheck 就可以輕易的將所需要的資料給他輸出了!但是很奇怪的是,在某些 Linux 版本中,我不能夠以 aquota.user(group) 來啟動我的 quota ,這有可能是因為舊版 quota 的關係, 所以我就另外做了一個 link 檔案來欺騙 quota 囉:
      [root@linux ~]# cd /disk2
      [root@linux ~]# ln -s aquota.user quota.user
      [root@linux ~]# ln -s aquota.group quota.group
      # 除非您的 Linux distributions 是比較舊的版本,否則不會有這個問題,
      # 所以,這個動作你不必進行的!
      


    4. 啟動 quota 的限額:

      再來就是要啟動 quota 啦!啟動的方式也是很簡單的!就是使用 quotaon -av 即可:
      [root@linux ~]# quotaon -avug
      /dev/hdb1 [/disk2]: group quotas turned on
      /dev/hdb1 [/disk2]: user quotas turned on
      
      注意:要看到上面有個 turned on 的出現,才是真的成功了!


    5. 編輯使用者的可使用空間:

      由於我們有兩個使用者要設定,先來設定 quser1 好了,使用 edquota 就對了:
      [root@linux ~]# edquota -u quser1
      Disk quotas for user quser1 (uid 502):
        Filesystem    blocks    soft    hard   inodes   soft   hard
        /dev/hdb1          0   45000   50000        0      0      0
      
      再次強調的是,因為我的 /disk2 裡面並沒有任何資料存在,所以,在上面這個表格當中, blocks 與 inodes 才會都是 0 ,如果您是使用 /home 來進行 quota 設定的, 那麼 blocks/inodes 肯定不會是 0 ,這裡要特別留意的。好了,上面特殊字體的部分就是我們的設定了, 分別是 45000 及 50000 ,那個單位是 KBytes 啦,轉成 MBytes 應該是要除以 1024 才對, 不過,簡單算一下就好了,不要太介意喔!^_^。然後將 quser1 的設定直接複製給 quser2 吧!
      [root@linux ~]# edquota -p quser1 quser2
      
      接下來要來設定寬限時間,還是使用 edquota !
      [root@linux ~]# edquota -t
      Grace period before enforcing soft limits for users:
      Time units may be: days, hours, minutes, or seconds
        Filesystem             Block grace period     Inode grace period
        /dev/hdb1                     1days                  7days
      
      將時間改為 1 天(原本是 7days 改成 1days ),好了!查詢一下是否真的有設定進去呢?使用 quota -v 來查詢:
      [root@linux ~]# quota -vu quser1 quser2
      Disk quotas for user quser1 (uid 502):
           Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
            /dev/hdb1       0   45000   50000               0       0       0
      Disk quotas for user quser2 (uid 503):
           Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
            /dev/hdb1       0   45000   50000               0       0       0
      
      特別注意到,由於我們的使用者尚未超過 45 MB,所以 grace ( 寬限時間 ) 就不會出現啦!這樣很夠清楚了吧?!


    6. 編輯群組可使用的空間:

      [root@linux ~]# edquota -g qgroup
      Disk quotas for group qgroup (gid 502):
        Filesystem    blocks    soft    hard  inodes   soft   hard
        /dev/hdb1          0   80000   90000       0      0      0
      
      [root@linux ~]# quota -vg qgroup
      Disk quotas for group qgroup (gid 502):
           Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
            /dev/hdb1       0   80000   90000               0       0       0
      
      這樣就設定好了 group 的 quota 囉!同樣的,因為整個群組的總使用量還沒有到達 80000 KBytes, 當然那個 grace 就不會有任何資訊顯示了!但這個地方倒是有很多朋友來信問到一個小問題, 那就是『為什麼我兩個使用者 quser1, quser2 的設定值在 soft 與 hard 分別是 45/50MB ,但為何你的 group 總量 (hard) 設定僅有 90MB 呢?』,也就是說, 當我的某個使用者用了 50MB 的量,那另一個不就最多可以使用到 40MB 而已?原因何在啊?

      這麼說好了,如果是小型的系統,由於使用者並不是很多,我們可以針對每個人來進行 quota 的設定值,所以,當然針對 users 來進行設定即可,不需要額外的設定 group 的 quota 設定啦。

      但如果換個角度來思考,假設您所處的公司人員比較多且分工較細,因此, 我們可能無法真正瞭解每個使用者的需求,此時,針對每個使用者來設定可能就比較麻煩一點。 那麼我們反過來說,可以針對每個部門 (group) 來進行 quota 的設定, 因為部門的需求直接跟部門的負責人詢問就好了,比較容易,而該部門的使用者 quota 設定當然可以高一點, 因為,可能某些使用者有較為獨特的需求啊!反正只要符合 group 的限制即可, 該部門如果超過整個 group quota 限制值,呵呵!讓他們自己去處理即可! ^_^


    7. 設定開機時啟動 quota:

      這個部分就不需要擔心了,因為 FC4 與 Red Hat 系列的開機 script (/etc/rc.d/rc.sysinit) 已經將 quota 的偵測寫入在裡頭,因此,在預設的情況下, quota 是會主動的被啟動的。 不過,如果你想要手動的強制 quota 在開機啟動一遍,那麼可以使用 vi 去編輯 /etc/rc.d/rc.local ,在裡面加入一行 (直接加在最後一行即可):
      [root@linux ~]# vi /etc/rc.d/rc.local
      /sbin/quotaon -avug
      
      如果要關閉 quota 就是用 quotaoff 吧!沒錯!這樣就將 quota 設定完畢了!很簡單吧!! ( 如果是 SuSE Server 9 的話,可能就要去修改 /etc/init.d/boot.local 這個檔案囉! )


    8. 利用 repquota 顯示更完整的 quota 結果報告:

      事實上,除了 quota 可以用來觀察使用者與群組使用的 quota 限制值之外,其實, 我們還可以使用更詳細的 quota 報告指令,就是 repquota 這個指令呢!他的基本用法是這樣的:
      [root@linux ~]# repquota -a [-vug]
      參數:
      -a  :直接到 /etc/mtab 搜尋具有 quota 標誌的 filesystem ,並報告 quota 的結果;
      -v  :輸出所有的 quota 結果,而非僅下達指令者自己的 quota 限值;
      -u  :顯示出使用者的 quota 限值 (這是預設值);
      -g  :顯示出個別群組的 quota 限值。
      範例:
      
      範例一:查閱系統內所有的具有 quota 的 filesystem 的限值狀態:
      [root@linux ~]# repquota -av
      *** Report for user quotas on device /dev/hdb1
      Block grace time: 24:00; Inode grace time: 7days
                              Block limits                File limits
      User            used    soft    hard  grace    used  soft  hard  grace
      ----------------------------------------------------------------------
      root      --   77888       0       0              4     0     0
      quser1    --       0   45000   50000              0     0     0
      quser2    --       0   45000   50000              0     0     0
      
      Statistics:          <==這是所謂的系統相關資訊,用 -v 才會顯示
      Total blocks: 7
      Data blocks: 1
      Entries: 3
      Used average: 3.000000
      
      範例二:僅列出 user 與 group 的 quota 限值:
      [root@linux ~]# repquota -aug
      *** Report for user quotas on device /dev/hdb1
      Block grace time: 24:00; Inode grace time: 7days
                              Block limits                File limits
      User            used    soft    hard  grace    used  soft  hard  grace
      ----------------------------------------------------------------------
      root      --   77888       0       0              4     0     0
      
      
      *** Report for group quotas on device /dev/hdb1
      Block grace time: 7days; Inode grace time: 7days
                              Block limits                File limits
      Group           used    soft    hard  grace    used  soft  hard  grace
      ----------------------------------------------------------------------
      root      --   77888       0       0              4     0     0
      
      根據這些資訊,您就可以知道目前的限制情況囉! ^_^

    不更動既有系統的 quota 實例

    好了,我們前面 帳號管理 的部分曾經提到 e-mail 這個東西嘛!如果我們要設定一個對外開啟的郵件主機的時候, 那麼最好對於郵件空間有點限制比較好,免得如同上面提到的一些問題一樣,造成使用者的使用權不一!所以說,使用 quota 確實是一個好建議!這個時候該怎麼辦呢?

    什麼怎麼辦?嗯!是這樣的,由於 quota 『只能針對整個 partition 進行整體的磁碟配額, 無法針對某個目錄進行磁碟配額!』針對這個觀念,我們不難發現,『 (1)將郵件存在個人的家目錄與 (2)將郵件統一放在 /home 下的一個共用目錄 』是一樣的!為什麼呢?這是因為 quota 針對的是整個磁碟呀!呵呵!所以囉,您必須先確定『您的 /home 是一個獨立的 partition 』才行!

    不過,很可惜的是,當初我們進行 Linux 主機安裝時,如果忘記將 /home 獨立成一個 partition 時, 那該怎麼辦?是否需要將 /home 進行重新分割與掛載?還有,如果也忘記將 /var/spool/mail 這個 mailbox 放置的目錄獨立出來,又該如何是好啊?舉個簡單的例子來說,在鳥哥上面的那個實作當中, 你會發現,我的 partition 僅有 /, /disk1, /disk2 ,那我的所有使用者都在 /home 裡面, 郵件在 /var/spool/mail 底下,真要命喔!怎麼辦啊?

    其實沒有怎麼難啦!既然 quota 是針對整個 partition 來進行限制,那我又已經將 /disk2 做好 quota 了, 那麼我只要:
    1. 將 /home 這整個目錄搬移到 /disk2 底下;
    2. 利用 ln -s /disk2/home /home 來建立連結資料;
    3. 將 /var/spool/mail 整個搬移到 /disk2 底下;
    4. 利用 ln -s /disk2/mail /var/spool/mail 來建立連結資料。
    只要這樣的一個小步驟,嘿嘿!您家主機的郵件就有一定的限額囉!當然囉!您也可以依據不同的使用者與群組來設定 quota 然後同樣的以上面的方式來進行 link 的動作!嘿嘿嘿!就有不同的限額針對不同的使用者提出囉!很方便吧!! ^_^

    本章習題練習

    ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
    • 如果我有一個 Linux 主機,未來想要對外提供 mail 與 WWW 的服務,同時預計提供個人網頁空間的服務,然而我希望 mail 提供 30 MB 而 WWW 則提供 20MB 的空間,那麼我應該如何規劃我的主機?
    • 在 quota 的限制中,由於他限制的是整個 partition 呢!所以既然要分為兩個服務來限制,就需要設定成兩個 partition 了!這個案例當中是以 Linux 為新架設的角度來看,所以我們的規劃就較為簡單!假設我的硬碟為 30GB 的硬碟,那麼我可以這樣設定:
        /  256 MB
        Swap 2 * RAM
        /usr  3~5 GB
        /backup 5GB
      其他的空間平均分給
        /home
        /var/spool/mail
      這樣就可以啦!然後安裝完成之後,套用 quota 的設定,即可做好限制囉!很是方便的!
    修改歷史:
    • 2002/07/14:第一次完成
    • 2003/02/10:重新編排與加入 FAQ
    • 2003/09/02:加入 quotacheck 發生錯誤時的解決方法。
    • 2005/09/06:將舊的文章移動到 此處
    • 2005/09/06:進行版面風格的轉換,並且進行資料的查詢,加入 repquota 的簡單說明而已!
    伺服器篇文件
    各版本彙整說明
    CentOS 6.x