第 17 章 磁盘配额
通过实施磁盘配额来限制磁盘空间,配额可在用户消耗太多磁盘空间或分区已满前提醒系统管理员。
可以为单独的用户以及用户组配置磁盘配额。这样便可以将分配给用户特定文件(例如电子邮件)的空间与分配给用户工作的项目的空间分开管理(假设项目有自己的组)。
此外,配额不仅可用来控制所消耗磁盘块的数量,还可以用来控制 inode (包含 UNIX 文件系统中文件信息的数据结构)数。由于 inode 用于包含与文件有关信息,因此允许控制可以创建的文件数。
必须安装 quota RPM 才能实现磁盘配额。
注意
本章适用于所有文件系统,但有些文件系统都有自己的配额管理工具。有关适用的文件系统,请查看相应的描述。
对于 XFS 文件系统,请参阅 第 3.3 节 “XFS 配额管理”。
Btrfs 没有磁盘配额,因此不涵盖。
17.1. 配置磁盘配额
要实现磁盘配额,请执行以下步骤:
- 通过修改
/etc/fstab
文件,为每个文件系统启用配额。 - 重新挂载文件系统。
- 创建配额数据库文件,并生成磁盘使用情况表。
- 分配配额策略。
在以下小节中会详细讨论这些步骤的具体内容。
17.1.1. 启用配额
过程 17.1. 启用配额
- 以 root 身份登录。
- 编辑
/etc/fstab
文件。 - 将 usrquota 或 grpquota 或两个选项添加到需要配额的文件系统中。
例 17.1. 编辑 /etc/fstab
例如,要使用文本编辑器
vim
,请键入以下内容:
#
vim /etc/fstab
例 17.2. 添加配额
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 /dev/VolGroup00/LogVol02 /home ext3 defaults,usrquota,grpquota 1 2 /dev/VolGroup00/LogVol01 swap swap defaults 0 0 . . .
在这个示例中,
/home
文件系统同时启用了用户和组配额。
备注
以下示例假定在安装 Red Hat Enterprise Linux 过程中创建了单独的 /home 分区。root (/)分区可用于设置
/etc/fstab
文件中的配额策略。
17.1.2. 重新挂载文件系统
添加 usrquota 或 grpquota 或两个选项后,重新挂载修改
fstab
条目的每个文件系统。如果文件系统没有被任何进程使用,请使用以下方法之一:
- 运行 umount 命令,后跟 mount 命令以重新挂载文件系统。有关挂载和卸载各种文件系统类型的具体语法,请参阅 umount 和 mount man page。
- 运行 mount -o remount file-system 命令(其中 file-system 是文件系统的名称)以重新挂载文件系统。例如,要重新挂载
/home
文件系统,请运行 mount -o remount /home 命令。
如果文件系统当前正在使用,则重新挂载文件系统的最简单方法是重新启动系统。
17.1.3. 创建配额数据库文件
重新挂载每个启用了配额的文件系统后,请运行 quotacheck 命令。
quotacheck 命令检查启用了配额的文件系统,并为每个文件系统构建一个当前磁盘使用情况的表。该表随后用于更新操作系统磁盘使用情况的副本。此外,还会更新文件系统的磁盘配额文件。
注意
quotacheck 命令对 XFS 没有影响,因为磁盘使用量表在挂载时会自动完成。如需更多信息,请参阅 man page xfs_quota (8)。
过程 17.2. 创建配额数据库文件
- 使用以下命令在文件系统中创建配额文件:
#
quotacheck -cug /file system - 使用以下命令为每个文件系统生成当前磁盘用量表:
#
quotacheck -avug
以下是用于创建配额文件的选项:
- c
- 指定应为每个启用配额的文件系统创建配额文件。
- u
- 检查用户配额。
- g
- 检查组配额。如果只指定
-g
,则仅创建组配额文件。
如果未指定
-u
或 -g
选项,则仅创建用户配额文件。
以下选项用于生成当前磁盘用量表:
- a
- 检查所有启用了配额的、本地挂载的文件系统
- v
- 在配额检查进行时显示详细的状态信息
- u
- 检查用户磁盘配额信息
- g
- 检查组磁盘配额信息
在 quotacheck 完成运行后,与启用的配额(用户或组或两者)对应的配额文件会填充每个启用了配额的本地挂载的文件系统(如
/home
)的数据。
17.1.4. 为每个用户分配配额
最后一步是使用 edquota 命令分配磁盘配额。
前提条件
- 用户必须在设置用户配额前存在。
过程 17.3. 为每个用户分配配额
- 要为用户分配配额,请使用以下命令:
#
edquota username使用您要为其分配配额的用户替换 username。 - 要验证是否为该用户设定了配额,使用以下命令:
#
quota username
例 17.3. 为用户分配配额
例如,如果在
/etc/fstab
中为 /home
分区(以下示例中的/dev/VolGroup00/LogVol02
)启用了配额,并且执行了命令 edquota testuser,则会在配置为系统默认设置的编辑器中显示以下内容:
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/VolGroup00/LogVol02 440436 0 0 37418 0 0
备注
edquota 使用由
EDITOR
环境变量定义的文本编辑器。要更改编辑器,将 ~/.bash_profile
文件中的 EDITOR
环境变量设置为您选择的编辑器的完整路径。
第一列是启用了配额的文件系统的名称。第二列显示目前该用户使用的块数。下面的两列是为该用户在文件系统中设定软限制和硬限制。
inodes
列显示用户当前使用的 inode 数。最后两列是为该用户在文件系统中设定软和硬的内节点限制。
硬块限制是用户或者组群可以使用的绝对最大磁盘空间量。达到这个限制后,就无法再使用其他磁盘空间。
软块限制定义可以使用的最大磁盘空间量。然而,与硬限制不同,在一定时间内可以超过软限制。该时间称为 宽限期。宽限期可以用秒、分钟、小时、天、周或月表示。
如果值为 0,则代表没有设定那个限制。在文本编辑器中,更改所需的限制。
例 17.4. 更改限制
例如:
Disk quotas for user testuser (uid 501): Filesystem blocks soft hard inodes soft hard /dev/VolGroup00/LogVol02 440436 500000 550000 37418 0 0
要验证是否为用户设定了配额,请使用以下命令:
#
quota testuser
Disk quotas for user username (uid 501):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb 1000* 1000 1000 0 0 0
17.1.5. 为每个组分配配额
配额可以针对单独组群进行分配。
前提条件
- 组群在设定组群配额前必须已经存在。
过程 17.4. 为每个组分配配额
- 要设置组配额,请使用以下命令:
#
edquota -g groupname - 要验证是否设定了组群配额,请使用以下命令:
#
quota -g groupname
例 17.5. 为组分配配额
例如,要为
devel
组设置组配额,请使用以下命令:
#
edquota -g devel
这个命令在文本编辑器中显示该组群的现有配额:
Disk quotas for group devel (gid 505): Filesystem blocks soft hard inodes soft hard /dev/VolGroup00/LogVol02 440400 0 0 37418 0 0
修改限制后保存文件。
要验证是否设置了组配额,请使用以下命令:
#
quota -g devel
17.1.6. 为软限制设置宽限期
如果给定配额有软限制,您可以使用以下命令编辑宽限期(即可以超过软限制的时间):
#
edquota -t
此命令适用于针对用户或组的 inode 或块的配额。
重要
虽然其他 edquota 命令针对特定用户或组的配额进行操作,但 -t 选项在每个启用了配额的文件系统中运行。