Linux命令-quotacheck(检查磁盘配额数据库) Linux命令-quotacheck检查磁盘配额数据库快速参考命令语法常用选项工作原理实战示例1. 首次启用配额2. 定期维护检查3. 大型文件系统的检查策略4. 故障恢复5. XFS 配额检查特殊6. 自动化配额检查发行版差异相关命令总结快速参考quotacheck是 Linux 磁盘配额管理的关键工具用于扫描文件系统并构建/修复配额数据库文件aquota.user和aquota.group。它在首次启用配额之前运行以初始化数据库也在系统崩溃后运行以修复不一致的配额数据。简单来说quotacheck回答的是文件系统上每个用户当前实际用了多少空间这个问题。配额数据库就像一本账本quotacheck就是对账的过程。系统崩了配额数据乱了运行quotacheck重新盘点一遍确保配额限制是基于真实的存储使用情况。命令语法quotacheck [选项] 文件系统...常用选项选项功能-c创建新的配额文件覆盖旧的-v详细输出显示扫描过程-u检查用户配额-g检查组配额-a检查所有挂载的文件系统需有配额选项-m不重新挂载为只读在已挂载时强制检查-f强制检查即使配额已经启用-R排除根文件系统-M不创建新的配额文件只报告情况-n不扫描文件系统使用缓存/内核数据-i交互模式询问确认-d调试模式-F指定配额格式vfsold/vfsv0/vfsv1/rpc/xfs工作原理quotacheck 的扫描过程 1. 遍历文件系统的每个 inode 2. 记录每个文件/目录的所有者UID和所属组GID 3. 汇总每个用户的总块数 和 总文件数 4. 写入配额文件aquota.user / aquota.group 5. 更新内核配额子系统 ⚠️ 对于大型文件系统TB 级这个过程可能需要很长时间实战示例1. 首次启用配额# 步骤1准备 /etc/fstab添加 usrquota,grpquota$cat/etc/fstab|grepsda1UUIDabc123 / ext4 defaults,usrquota,grpquota01# 步骤2重新挂载文件系统$sudomount-oremount /# 步骤3验证挂载选项$mount|grep / /dev/sda1 on /typeext4(rw,relatime,usrquota,grpquota)# 步骤4创建配额数据库文件-c 创建-u 用户-g 组-v 详细$sudoquotacheck-cugv/ quotacheck: Scanning /dev/sda1[/]donequotacheck: Cannotstatold userquotafile/aquota.user: No suchfileor directory quotacheck: Cannotstatold groupquotafile/aquota.group: No suchfileor directory quotacheck: Checked15342directories and128567files quotacheck: Oldfilenot found. quotacheck: Oldfilenot found.# 步骤5验证创建的配额文件$ls-l/aquota.* -rw-------1root root16384Jun1410:00 /aquota.group -rw-------1root root16384Jun1410:00 /aquota.user# 文件权限必须为 600仅 root 可读写$sudochmod600/aquota.user /aquota.group2. 定期维护检查# 日常检查不创建新文件只更新$sudoquotacheck-vug/ quotacheck: Scanning /dev/sda1[/]donequotacheck: Checked15350directories and128600files# 强制检查即使配额已启用$sudoquotacheck-f-vug/# 检查所有启用配额的文件系统$sudoquotacheck-avug# 调试模式看更详细的输出$sudoquotacheck-d-vug/# 检查时强制卸载文件系统更安全但需停机$sudoquotacheck-cugv/home# 仅报告不修改-M$sudoquotacheck-Mvug/# 会显示每个用户的用量但不更新配额文件3. 大型文件系统的检查策略# 对于大型文件系统1TBquotacheck 可能运行数小时# 优化策略# 1. 在系统启动时自动运行在 /etc/rc.local 或 systemd 服务中$cat/etc/systemd/system/quotacheck.serviceEOF [Unit] DescriptionFilesystem Quota Check Beforequotaon.service ConditionPathExists/aquota.user [Service] Typeoneshot ExecStart/sbin/quotacheck -avug RemainAfterExityes [Install] WantedBymulti-user.target EOF# 2. 挂载为只读后检查避免数据变化$sudomount-oremount,ro /data $sudoquotacheck-cugv/data $sudomount-oremount,rw /data# 3. 后台执行nohup$sudonohupquotacheck-avug/tmp/quotacheck.log21# 4. 监控进度通过查看日志$tail-f/tmp/quotacheck.log# 5. 多个文件系统并行检查$sudoquotacheck-vug/home$sudoquotacheck-vug/datawait4. 故障恢复# 场景1系统崩溃后配额数据不一致# 修复流程$sudoquotaoff-a# 先关闭配额$sudoquotacheck-cugv/# 重建配额数据库$sudoquotaon-a# 重新启用配额# 场景2配额文件损坏$ls-l/aquota.user -rw-------1root root0Jun1410:00 /aquota.user# 文件大小 0说明已损坏$sudoquotaoff /# 关闭配额$sudorm/aquota.user /aquota.group $sudoquotacheck-cugv/# 重新创建$sudoquotaon /# 场景3显示 Cannot get exact used space# quotacheck 扫描时文件系统正在被写入# 解决方案用 -m 选项不重新挂载但结果可能略有误差$sudoquotacheck-m-vug/# 场景4quota 命令报 No quota format detected# 重新创建配额文件$sudoquotaoff-a$sudoquotacheck-cugv/ $sudoquotaon-a5. XFS 配额检查特殊# XFS 文件系统使用不同的配额机制# 配额数据存储在文件系统元数据中不需要独立的 quota 文件# XFS 挂载选项$cat/etc/fstab|grepxfsUUIDxyz789 /data xfs defaults,uquota,gquota00# ^^^^^^ XFS 专属选项不是 usrquota# XFS 的 quotacheck 不需要 -c 创建文件# 只需挂载时指定配额选项$sudomount-ouquota,gquota /dev/sdb1 /data $sudoxfs_quota-x-creport -u/data# XFS 配额检查检查自动进行无需手动 quotacheck$sudoxfs_quota-x-ccheck/data# XFS 会在挂载时自动检查配额一致性# 对比# ext4: quotacheck -cugv 创建 aquota.user/aquota.group# XFS: 配额是文件系统的一部分挂载时 uquota/gquota 自动激活6. 自动化配额检查# 创建配额维护脚本$cat/usr/local/sbin/quota_maintenance.shSCRIPT #!/bin/bash set -e FS_LIST/ /home /data LOG/var/log/quota_check.log echo $(date) $LOG for fs in $FS_LIST; do if mount | grep -q on $fs ; then has_quota$(mount | grep on $fs | grep -oE (usrquota|uquota|grpquota|gquota)) if [ -n $has_quota ]; then echo Checking: $fs $LOG quotacheck -avug $fs $LOG 21 || { echo ERROR: quotacheck failed on $fs $LOG } else echo Skip: $fs (no quota enabled) $LOG fi else echo Skip: $fs (not mounted) $LOG fi done echo Done. $LOG SCRIPT$sudochmodx /usr/local/sbin/quota_maintenance.sh# 添加 cron 任务每月 1 号 凌晨 2 点$echo0 2 1 * * root /usr/local/sbin/quota_maintenance.sh|sudotee/etc/cron.d/quota-check发行版差异文件系统配额工具配额文件位置ext2/3/4quota-tools/aquota.user,/aquota.groupXFSxfs_quota内部元数据Btrfsbtrfs qgroup内部元数据ZFSzfs userspace内部数据集属性# 查看文件系统类型$df-T/ Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext450858880305149122034396860% /相关命令命令功能quotacheck创建/检查配额数据库quotaon启用配额quotaoff禁用配额repquota报告配额使用edquota编辑配额限制setquota设置配额限制xfs_quotaXFS 配额管理总结quotacheck是配额系统的对账员-cugv创建新的配额数据库首次使用-avug检查所有文件系统-f强制检查配额已启用时-m不重新挂载在线检查结果可能不精确记住这个黄金流程sudoquotaoff-a# 关闭所有配额sudoquotacheck-cugv/# 重建配额数据库sudoquotaon-a# 重新启用配额XFS 用户注意XFS 不需要aquota.user文件配额是文件系统的原生功能。用xfs_quota而不是quotacheck。