環境準備與軟件包
# RHEL/CentOS 確認安裝
rpm -q quota
# 未安裝則
yum install -y quota
# Debian/Ubuntu
apt-get install -y quota
硬盤分區與文件系統創建
# 1. 識別新硬盤 (假設 /dev/sdb)
lsblk
fdisk -l
# 2. 分區規劃 (示例:主分區 + 擴展分區 + 邏輯分區)
fdisk /dev/sdb
# n -> p -> 1 -> +20G # 主分區 sdb1
# n -> e -> 2 -> Enter # 擴展分區 sdb2 (佔用剩餘空間)
# n -> l -> +10G # 邏輯分區 sdb5
# n -> l -> +10G # 邏輯分區 sdb6
# w # 寫入分區表
# 3. 內核重讀分區表
partprobe /dev/sdb
# 或 reboot
# 4. 格式化為 ext4/xfs (支持配額)
mkfs.ext4 -L QUOTA_PART1 /dev/sdb1
mkfs.ext4 -L QUOTA_PART2 /dev/sdb5
mkfs.xfs -L QUOTA_PART3 /dev/sdb6 # XFS 專用配額工具不同
掛載配置與配額啟用
/etc/fstab 關鍵選項
# ext4 文件系統
/dev/sdb1 /quota1 ext4 defaults,rw,usrquota,grpquota 0 2
/dev/sdb5 /quota2 ext4 defaults,rw,usrquota,grpquota 0 2
# XFS 文件系統 (內建配額,掛載選項不同)
/dev/sdb6 /quota3 xfs defaults,rw,uquota,gquota 0 2
# 掛載點預創建
mkdir -p /quota1 /quota2 /quota3
掛載與驗證
mount -a
# 或單獨掛載
mount /quota1
# 驗證掛載選項生效
mount | grep quota
# /dev/sdb1 on /quota1 type ext4 (rw,relatime,usrquota,grpquota)
# /dev/sdb6 on /quota3 type xfs (rw,relatime,uquota,gquota)
配額文件初始化
ext4: quotacheck 創建 aquota.user/group
# 掃描文件系統構建配額數據庫(需掛載後、業務低峰期)
quotacheck -cugm /quota1
quotacheck -cugm /quota2
# 參數解析:
# -c 創建新配額文件(不讀取舊)
# -u 用戶配額
# -g 組配額
# -m 不強制只讀掃描(允許讀寫,生產環境用)
# 驗證生成
ls -l /quota1/aquota.user /quota1/aquota.group
# -rw------- 1 root root 6144 Jan 1 00:00 aquota.user
XFS: 內建配額無需 quotacheck
# XFS 配額元數據在文件系統內部,掛載選項 uquota/gquota 即啟用
# 直接進入 edquota/xfs_quota 管理
用戶/組限額設置 (edquota / xfs_quota)
ext4: edquota 交互式編輯
# 為用戶 user1 設置配額
edquota -u user1
# 彈出編輯器(vi),修改 soft/hard 限制
# Filesystem blocks soft hard inodes soft hard
# /dev/sdb1 10240 500M 600M 100 500 600
# 說明:
# blocks - 已用空間 (KB 為單位)
# soft - 軟限制(可超過,寬限期內)
# hard - 硬限制(絕對不可超過)
# inodes - 已用文件數
# 建議:僅限制 blocks,inodes 通常設為 0 (不限制)
# 複製模板給多用戶
edquota -p user1 user2 user3 user4
# 組配額
edquota -g group1
XFS: xfs_quota 命令行管理
# 進入交互模式
xfs_quota -x -c 'limit bsoft=500m bhard=600m user1' /quota3
xfs_quota -x -c 'limit bsoft=1g bhard=1.2g group1' /quota3
# 批量設置
xfs_quota -x -c 'limit -u bsoft=500m bhard=600m user1 user2 user3' /quota3
# 查看報表
xfs_quota -x -c 'report -h' /quota3
啟用配額強制執行
# ext4
quotaon -avug
# /dev/sdb1 [/quota1]: user quotas turned on
# /dev/sdb1 [/quota1]: group quotas turned on
# XFS 已在掛載時啟用,可用 quotaon 確認
quotaon -avug
# 關閉配額
quotaoff -avug
寬限期設置
# ext4: 編輯寬限期 (默認 7 天)
edquota -t
# Time units may be: days, hours, minutes, seconds
# Filesystem Block grace Inode grace
# /dev/sdb1 3days 7days
# XFS
xfs_quota -x -c 'timer bsoft=3d' /quota3
驗證配額生效測試
# 切換到受限用戶
su - user1
# 測試寫入超過硬限制
dd if=/dev/zero of=/quota1/testfile bs=1M count=700
# dd: error writing '/quota1/testfile': Disk quota exceeded
# 查看當前使用情況
quota -v
# Disk quotas for user user1 (uid 1001):
# Filesystem blocks quota limit grace files quota limit grace
# /dev/sdb1 512000 512000 614400 100 0 0 0
配額管理最佳實踐原則
- 只限制空間不限制文件數:inode 限制極易導致應用報錯難排查
- Soft < Hard 原則:預留 10-20% 緩衝,避免業務突發中斷
- 限制值 > 當前使用量:設置前先
du -sh /quota1/user1 確認基線
- Root 用戶慎配配額:系統維護、日誌寫入、軟件更新均需 root 寫入權限
- 監控告警:腳本定期
repquota -a 推送至監控系統,觸及 80% Soft 限制告警
- 定期 quotacheck:ext4 建議每週維護窗口
quotacheck -avugm 同步實際使用量
常見故障排查
| 現象 | 原因 | 解決 |
| quotaon: Cannot find quota file | 未運行 quotacheck 或掛載選項缺失 | 檢查 fstab usrquota/grpquota → 重新 quotacheck -cugm |
| 配額不生效 | 文件系統不支持 / 掛載選項未生效 | mount | grep quota 確認;ext4 需內核 CONFIG_QUOTA=y |
| NFS 客戶端配額異常 | 服務端/客戶端版本不匹配 | 服務端啟用 rpc-rquotad;客戶端掛載選項 quota |
| XFS 配額報表為空 | 未指定 -x 專家模式 | xfs_quota -x -c 'report' /mount |