17.11. 磁碟配額
前一頁 | 章 17. 儲存設備 | 下一頁

## 17.11. 磁碟配額

磁碟配額可以用來限制使用者或群組成員能夠在各別檔案系統上使用的磁碟空間量或檔案數量。這個可避免一個使用者或群組成員耗盡所有磁碟的可用空間。

本節將說明如何設定 UFS 檔案系統的磁碟配額。要在 ZFS 檔案系統上設定配額，請參考 節 19.4.8, “資料集、使用者以及群組配額”

### 17.11.1. 開啟磁碟配額

查看 FreeBSD 核心是否支援磁碟配額：

    % sysctl kern.features.ufs_quota
    kern.features.ufs_quota: 1

在本例中，數值 `1` 代表支援磁碟配額，若為 `0`，則需加入下列設定到自訂核心設定檔然後依照 章 8, 設定 FreeBSD 核心 的指示重新編譯核心：

    options QUOTA

接著，在 `/etc/rc.conf` 開啟磁碟配額：

    quota_enable="YES"

正常在開機時，會使用 quotacheck(8) 檢查每個檔案系統的配額完整性，這個程式會確保在配額資料庫中的資料正確的反映了檔案系統上的資料。這是一個耗費時間的程序，會明顯的影響系統開機的時間，要跳過這個步驟可以加入此變數到 `/etc/rc.conf`：

    check_quotas="NO"

最後，編輯 `/etc/fstab` 來開啟在各個檔案系統上的磁碟配額。要開啟在檔案系統上對每個使用者的配額要加入 `userquota` 選項到 `/etc/fstab` 要開啟配額的檔案系統的項目中。例如：

    /dev/da1s2g   /home    ufs rw,userquota 1 2

要開啟群組配額，則使用 `groupquota`。要同時開啟使用者及群組配額，可使用逗號隔開選項：

    /dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

預設配額檔案會儲存在檔案系統的根目錄的 `quota.user` 及 `quota.group`，請參考 fstab(5) 來取得更多資訊，較不建議指定其他位置來儲存配額檔案。

設定完成之後，重新啟動系統，`/etc/rc` 會自動執行適當的指令對所有在 `/etc/fstab` 中開啟配磁的檔案系統建立初始的配額檔。

在一般的操作中，並不需要手動執行 quotacheck(8), quotaon(8) 或是 quotaoff(8)，雖然如此，仍應閱讀這些指令的操作手冊來熟悉這些指令的操作。

### 17.11.2. 設定配額限制

要確認配額已經開啟，可執行：

    # quota -v

每個有開啟配額的檔案系統應該會有一行磁碟用量及目前配額限制的摘要。

現在系統已準備好可以使用 `edquota` 分配配額限制。

有數個選項可以強制限制使用者或群組對磁碟空間的使用量以及可以建立多少檔案。可以用磁碟空間 (block 配額)，檔案數量 (inode 配額) 或同時使用來分配。每種限制又可進一步細分為兩個類型：硬性 (Hard) 及軟性 (Soft) 限制。

硬性限制無法被超額使用。一旦使用者超出了硬性限制，該使用者在該檔案系統將無法再使用任何空間。舉例來說，若一個使用者在一個檔案系統上有 500 KB 的硬性限制，且目前已經使用了 490 KB，該使用者只能再使用 10 KB 的空間，若嘗試使用 11 KB 的空間將會失敗。

軟性限制在有限的時間內可以被超額使用，即為寬限期 (Grace period)，預設為一週。若一個使用者超出限制並超過寬限期，則軟性限制將轉為硬性限制並且將不允許再使用空間。當使用者使用的空間回到低於軟性限制內，寬限期就會被重置。

在下面的例子中，會編輯 `test` 的配額。當執行 `edquota` 時，將會使用 `EDITOR` 指定的編輯器來編輯配額限制。預設的編輯器為 vi。

    # edquota -u test
    Quotas for user test:
    /usr: kbytes in use: 65, limits (soft = 50, hard = 75)
            inodes in use: 7, limits (soft = 50, hard = 60)
    /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
            inodes in use: 0, limits (soft = 50, hard = 60)

正常每個開啟配額的檔案系統會有兩行需要設定，一行代表區塊限制 (Block limit) 而另一行代表節點限制 (inode limit)，更改行內的值來修改配額限制。舉例來說，要在 `/usr` 提高區塊的軟性限制到 `500` 以及硬性限制到 `600`，可更改行內的值如下：

    /usr: kbytes in use: 65, limits (soft = 500, hard = 600)

新的配額限制將在離開編輯器後生效。

有時會想要針對一群使用者設定配額限，這時可以透過指定想要的配額給第一個使用者，若然後使用 `-p` 來複製配額到指定範圍的使用者 ID (UID)。以下指定將複製配額限制給 UID `10,000` 到 `19,999` 的使用者：

    # edquota -p test 10000-19999

要取得更多資訊，請參考 edquota(8)。

### 17.11.3. 檢查配額限制與磁碟使用狀況

要檢查各別使用者或群組的配額與磁碟用量可使用 quota(1)。使用者僅可查看自己的配額以及所屬群組的配額，只有使超級使用者可以檢視所有使用者及群組的配額。要取得某個有開啟配額的檔案系統的所有配額及磁碟用量摘要，可使用 repquota(8)。

正常情況，使用者未使用任何磁碟空間的檔案系統並不會顯示在 `quota` 的輸出結果中，即使該使用者有在該檔案系統設定配額限制，使用 `-v` 可以顯示這些檔案系統。以下是使用使用 `quota -v` 查詢某個使用者在兩個檔案系統上的配額限制的範例輸出。

    Disk quotas for user test (uid 1002):
         Filesystem  usage    quota   limit   grace   files   quota   limit   grace
               /usr      65*     50      75   5days       7      50      60
           /usr/var       0      50      75               0      50      60

在這個例子當中，使用者在 `/usr` 的軟性限制 50 KB 已經超出了 15 KB 並已經過了 5 天寬限期。星號 `*` 代表該使用者目前已超出配額限制。

### 17.11.4. NFS 上的配額

在 NFS 伺服器上，配額會由配額子系統強制執行，rpc.rquotad(8) Daemon 會提供配額資訊給 NFS 客戶端的 `quota`，讓在那些主機的使用者可以查看它們的配額統計資訊。

在 NFS 伺服器上將 `/etc/inetd.conf` 中 `rpc.rquotad` 行前的 `#` 移除來開啟：

    rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

然後重新啟動 `inetd`：

    # service inetd restart

前一頁 | 上一層 | 下一頁
17.10. 檔案系統快照 | 起始頁 | 17.12. 磁碟分割區加密

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。