配額子系統¶
配額子系統允許系統管理員為使用者和/或組設定已用空間和已用 inode 數量的限制(inode 是一種檔案系統結構,與每個檔案或目錄相關聯)。對於已用空間和已用 inode 數量,實際上有兩個限制。第一個稱為軟限制,第二個稱為硬限制。使用者永遠不能超過任何資源的硬限制(除非他具有 CAP_SYS_RESOURCE 能力)。允許使用者超過軟限制,但只能在有限的時間內。此期限稱為“寬限期”或“寬限時間”。當寬限期結束時,使用者將無法分配更多空間/inode,直到他釋放足夠的空間/inode 以低於軟限制。
配額限制(和寬限期)是為每個檔案系統獨立設定的。
有關配額設計的更多詳細資訊,請參見 quota-tools 包中的文件 (https://sourceforge.net/projects/linuxquota)。
配額 netlink 介面¶
當用戶超過軟限制,用完寬限期或達到硬限制時,配額子系統傳統上會將訊息列印到導致超出的程序的控制終端。此方法的缺點是,當用戶使用圖形桌面時,他通常無法看到該訊息。因此,已設計配額 netlink 介面以將有關上述事件的資訊傳遞給使用者空間。在那裡,它們可以被應用程式捕獲並進行相應處理。
該介面使用通用 netlink 框架(有關此層的更多詳細資訊,請參見 https://lwn.net/Articles/208755/ 和 http://www.infradead.org/~tgr/libnl/)。配額通用 netlink 介面的名稱為“VFS_DQUOT”。以下常量的定義位於 <linux/quota.h> 中。由於配額 netlink 協議不感知名稱空間,因此配額 netlink 訊息僅在初始網路名稱空間中傳送。
當前,該介面僅支援一種訊息型別 QUOTA_NL_C_WARNING。此命令用於傳送有關上述任何事件的通知。每個訊息都有六個屬性。這些是(引數的型別在括號中)
- QUOTA_NL_A_QTYPE (u32)
超過的配額型別(USRQUOTA,GRPQUOTA 之一)
- QUOTA_NL_A_EXCESS_ID (u64)
使用者/組(取決於配額型別)的 UID/GID,其限制正在被超過。
- QUOTA_NL_A_CAUSED_ID (u64)
導致事件的使用者的 UID
- QUOTA_NL_A_WARNING (u32)
超過了哪種限制
- QUOTA_NL_IHARDWARN
inode 硬限制
- QUOTA_NL_ISOFTLONGWARN
超過 inode 軟限制的時間超過了給定的寬限期
- QUOTA_NL_ISOFTWARN
inode 軟限制
- QUOTA_NL_BHARDWARN
空間(塊)硬限制
- QUOTA_NL_BSOFTLONGWARN
超過空間(塊)軟限制的時間超過了給定的寬限期。
- QUOTA_NL_BSOFTWARN
空間(塊)軟限制
還定義了四個警告,用於使用者停止超過某些限制的事件
- QUOTA_NL_IHARDBELOW
inode 硬限制
- QUOTA_NL_ISOFTBELOW
inode 軟限制
- QUOTA_NL_BHARDBELOW
空間(塊)硬限制
- QUOTA_NL_BSOFTBELOW
空間(塊)軟限制
- QUOTA_NL_A_DEV_MAJOR (u32)
受影響檔案系統的裝置主裝置號
- QUOTA_NL_A_DEV_MINOR (u32)
受影響檔案系統的裝置次裝置號