三、实现Linux的磁盘配额的详解
1. 检查内核情况
检查当前内核是否支持quota,当前内核配置文件在/boot下
# grep CONFIG_QUOTA /boot/config-2.4.20
CONFIG_QUOTA=y
CONFIG_QUOTACTL=y
如果有上列输出,则表示当前内核已经支持quota。如果当前内核不支持quota,需要重新编译内核将quota support编译进核心:
File systems ---> [*] Quota support 如图2 。
| ||
以根用户身份使用vi编辑器来给需要配额的文件系统添加 usrquota 和(或) grpquota 选项:
:
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/home /home ext3 defaults,usrquota 1 2
none /dev/shm tmpfs defaults 0 0
/dev/hda2 swap swap defaults 0 0
在上面的例子中,/home 文件系统上启用了用户配额。
3. 重新挂载文件系统
添加了 userquota 和 grpquota 选项后,重新挂载每个相应 fstab 条目被修改的文件系统。如果某文件系统没有被任何进程使用,使用 umount 命令后再紧跟着 mount 命令来重新挂载这个文件系统。如果某文件系统正在被使用,要重新挂载该文件系统的最简捷方法是重新引导系统或者使用命令:“# mount -o remount /home”。
4. 在该文件系统建立aquota.user文件
# touch /home/aquota.user
# chmod 600 /aquota.user
5. 扫描相应文件系统,用quotacheck命令生成基本配额文件
运行 quotacheck 命令,quotacheck 命令检查启用了配额的文件系统,并为每个文件系统建立一个当前磁盘用来的表。该表会被用来更新操作系统的磁盘用量文件。此外,文件系统的磁盘配额文件也被更新。 要在文件系统上创建配额文件( aquota.user 和 aquota.group ),使用 quotacheck 命令的 -c 选项。例如,如果用户和组群配额都为 /home 分区启用了,在 /home 目录下创建这些文件:
quotacheck -acug /home
-a 选项意味着在 /etc/mtab 中所有挂载了的非 NFS 文件系统都会被检查来决定是否启用了配额。 -c 选项指定每个启用了配额的文件系统都应该创建配额文件, -u 选项指定检查用户配额, -g 选项指定检查组群配额。
如果 -u 或 -g 选项被指定,只有用户配额文件被创建。如果只指定了 -g 选项,只有组群配额文件会被创建。
文件被创建后,运行以下命令来生成每个启用了配额的文件系统的当前磁盘用量表:
quotacheck -avug
所用选项如下:
a — 检查所有启用了配额的在本地挂载的文件系统
v — 在检查配额过程中显示详细的状态信息
u — 检查用户磁盘配额信息
g — 检查组群磁盘配额信息
quotacheck 运行完毕后,和启用配额(用户和/或组群)相应的配额文件中就会写入用于每个启用了配额的文件系统(如 /home )的数据。
要定期运行它的最简单方法是使用 cron。以根用户身份,你既可以使用 crontab -e 命令来调度定期的 quotacheck,也可以在以下目录之一内放置一个运行 quotacheck 的脚本(使用最时候你需要的间隔期间):
• /etc/cron.hourly
• /etc/cron.daily
• /etc/cron.weekly
• /etc/cron.monthly
最精确的配额统计数据可以在所分析的文件系统没有被活跃使用时获得。因此,cron 任务应该在文件系统被最少使用时调度。如果这一时间在使用配额的文件系统中并不统一,则使用多个 cron 任务在不同的时间为每个文件系统运行 quotacheck。
6. 使用 edquota 命令分配磁盘配额。
要为用户配置配额,以根用户身份在 shell 提示下执行以下命令:
edquota -u username
为每个你想实现配额的用户执行该步骤。例如,如果在 /etc/fstab 中为 /home 分区( /dev/hda3 )启用了配额,执行了 edquota testuser 命令后,系统默认的编辑器
中就会有如图3显示:
| |
图3 |
文件内有七个栏目:
Filesystem => 进行配额管制的文件系统。
blocks => 已经使用的区块数量(单位1KB)
soft => block 使用数量的"软性"限制
hard => block 使用数量的"硬性"限制
inode => 已经使用的 inode 数量
soft => inode 使用数量的"软性"限制
hard => inode 使用数量的"硬性"限制
edquota –t
和 edquota 命令相似,这个命令也会在文本编辑器中打开当前的文件系统配额:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hdb1 10days 10days
另外以上两个操作可以使用
以上设置也可以使用 setquota 命令设置:
setquota -u someone 0 0 3 5 /dev/loop0
setquota -t 864000 864000 /dev/loop0
ps. 864000 为 10 天的秒数. 一小时=3600秒, 一天=86400秒
7. 磁盘配额完毕后,必须以 quotaon -av 的命令启用配额管理。