首页 > 代码库 > Linux系统管理14——磁盘配额(Quota)
Linux系统管理14——磁盘配额(Quota)
Linux系统管理14——磁盘配额(Quota)(课外知识补充02)
一、磁盘配额(Quota)概述
在Linux系统中,由于是多人多任务环境,所以会有很多人共同使用一个硬盘空间的情况发生,如果其中少数几个使用者大量的占用硬盘空间的话,那势必会压缩其他用户的使用权力,因此,管理员应该适当的限制硬盘的容量给用户,以妥善分配系统资源。
1、Quota的规范设定项目
(1)容量限制(block) 此方法较为常见
(2)文件数量限制(inode)
2、柔性劝导与硬性规定(soft/hard)
不管是inode还是block限制,分别都有两个限制值,即soft与hard。通常hard限制比soft要高。
例如,若限制项目为block,可以限制hard为500M,而soft为400M。那么,用户使用量绝对不可以高于500M,一旦超过,系统会锁住该用户的磁盘使用权,用户需自行删除一些无用的文件以减少磁盘使用量。若用户在用量低于400M时,可以正常使用。若用户使用量介于400M~500M之间,则每次用户登入系统时,系统会主动发出磁盘即将爆满的警告信息,且会给予一个宽限时间(grace time),默认为7天,若7天内使用者将用量降至400M以下,则宽限时间会停止,否则超过7天后系统将以400M作为硬性规定(取代500M)限制,锁住用户的磁盘使用权。
二、磁盘配(Quota)的设置
1、涉及命令:
(1)quotacheck命令:扫描文件系统并建立Quota的记录文件
1>格式:quotacheck [选项] [挂载点目录]
2>常用选项:
-a:扫描所在/etc/mtab内,含有quota支持的文件系统,加上此参数后可不写 挂载点目录。
-u:针对用户扫描文件与目录的使用情况,建立aquota.user文件
-g:针对组扫描文件与目录的使用情况,建立aquota.group文件
-v:显示扫描过程的详细信息
-f:强制扫描文件系统,并写入新的quota配置文件(危险)
-M:强制以读写的方式扫描文件系统(只有在特殊情况下才会使用)
常用选项组合:quotacheck -avug
(2)quotaon/quotaoff命令:启动/关闭quota服务
1>格式:quotaon/quotaoff [选项] [挂载点目录]
2>常用选项:
-a:根据/etc/mtab内的文件系统设定启动有关的quota服务,若不加此参数, 需在后面指定文件系统
-u:针对用户启动quota(aquota.user)
-g:针对组启动quota(aquota.group)
-v:显示启动过程的详细信息
启动/关闭全部用户及组的quota服务:quotaon/quotaoff -avug
启动/关闭某一文件系统的用户quota服务:quotaon/quotaoff -uv 挂载点目录
(3)edquota命令:edit quota,编辑用户、组的限值与宽限时间
1>格式:edquota [选项] [用户|组]
2>常用选项:
-u:后面跟用户,可以直接进入quota的编辑界面去设定该用户的限制值
-g:后面跟组,可以直接进入quota的编辑界面去设定该组的限制值
-t:可以修改宽限时间
-p:复制前一个设置的范本到下一个用户或组
(4)setquota命令:命令设定quota限额
1>格式:
setquota [-u|-g] [用户|组] [block(soft)] [block(hard)] [inode(soft)] [inode(hard)] [文件系统]
(5)quoa命令:单一用户或组的quota报表
1>格式:quota [选项] [用户|组]
2>常用选项:
-u:后面跟用户,显示出该用户的quota限制值,若不跟用户则显示执行者的 quota限制值
-g:后面跟组,显示该组的quota限制值
-v:显示每个用户在文件系统的quota值
-s:人性化单位显示
(6)repquota命令:针对文件系统的的限制配额做报表
1>格式:repquota [选项] [参数]
2>常用选项:
-a:查找/etc/mtab中具有quota标志的文件系统,并报告quota的结果
-u:显示出用户的quota限值(默认显示此值)
-g:显示出某个群组的quota限制值
-v:显示文件系统的详细信息
-s:人性化单位显示
三、磁盘配额示例
实验描述:
新添加10G硬盘/dev/sdb,格式化为ext4格式的文件系统,将/home内容备份,挂载此硬盘到/home下,恢复原/home下的数据。新增5个用户(user1-5),属组均为gtest,要求对/home下的磁盘空间进行磁盘配额设置,要求如下:
5个用户(user1-5)每个用户磁盘用量不超过500M,当达到400M时进行提醒,若14天后还未处理磁盘空间将进行锁定。
gtest组磁盘用量不超过1500M,达到1200M时提醒。
1、备份/home/下的数据,格式化文件系统,挂载,增加quota服务,拷贝原数据。
[root@crushlinux ~]# mkdir /bakhome
[root@crushlinux ~]# cp -rp /home/* /bakhome/
[root@crushlinux ~]# ll /bakhome/
总用量 4
drwx------ 4 amber amber 4096 2月 4 15:56 amber
[root@crushlinux ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc1489f90.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
switch off the mode (command ‘c‘) and change display units to
sectors (command ‘u‘).
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305):
Using default value 1305
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc1489f90
Device Boot Start End Blocks Id System
/dev/sdb1 1 1305 10482381 83 Linux
Command (m for help): wq
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@crushlinux ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
[root@crushlinux ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2620595 blocks
131029 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@crushlinux ~]# mount /dev/sdb1 /home/
[root@crushlinux ~]# mount -o remount,usrquota,grpquota /home
[root@crushlinux ~]# mount |grep /home
/dev/sdb1 on /home type ext4 (rw,usrquota,grpquota)
[root@crushlinux ~]# grep /dev/sdb1 /etc/mtab
/dev/sdb1 /home ext4 rw,usrquota,grpquota 0 0
[root@crushlinux ~]# vim /etc/fstab
/dev/sdb1 /home ext4 defaults,usrquota,grepquota 1 2
[root@crushlinux ~]# cp -rp /bakhome/* /home/
[root@crushlinux ~]# ll /home/
总用量 20
drwx------ 4 amber amber 4096 2月 4 15:56 amber
drwx------ 2 root root 16384 2月 4 15:59 lost+found
2、新增5个用户(user1-5),属组为gtest
[root@crushlinux ~]# groupadd gtest
[root@crushlinux ~]# useradd -g gtest user1
[root@crushlinux ~]# useradd -g gtest user2
[root@crushlinux ~]# useradd -g gtest user3
[root@crushlinux ~]# useradd -g gtest user4
[root@crushlinux ~]# useradd -g gtest user5
[root@crushlinux ~]# echo "123" | passwd --stdin user1 &> /dev/null
[root@crushlinux ~]# echo "123" | passwd --stdin user2 &> /dev/null
[root@crushlinux ~]# echo "123" | passwd --stdin user3 &> /dev/null
[root@crushlinux ~]# echo "123" | passwd --stdin user4 &> /dev/null
[root@crushlinux ~]# echo "123" | passwd --stdin user5 &> /dev/null
3、扫描文件系统并建立Quota记录文件
[root@crushlinux ~]# quotacheck -avug
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/sdb1 [/home] done
quotacheck: Cannot stat old user quota file /home/aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file /home/aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old user quota file /home/aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file /home/aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Checked 32 directories and 18 files
quotacheck: Old file not found.
quotacheck: Old file not found.
[root@crushlinux ~]# ll /home/a*
-rw------- 1 root root 7168 2月 4 16:23 /home/aquota.group
-rw------- 1 root root 7168 2月 4 16:23 /home/aquota.user
4、启动quota服务
[root@crushlinux ~]# quotaon -auvg
/dev/sdb1 [/home]: group quotas turned on
/dev/sdb1 [/home]: user quotas turned on
5、编辑用户、组的限制值与宽限时间
Disk quotas for user user1 (uid 520):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 32 409600 512000 8 0 0
[root@crushlinux ~]# edquota -p user1 -u user2
[root@crushlinux ~]# edquota -p user1 -u user3
[root@crushlinux ~]# edquota -p user1 -u user4
[root@crushlinux ~]# edquota -p user1 -u user5
[root@crushlinux ~]# edquota -g gtest
Disk quotas for group gtest (gid 523):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 160 1536000 1228800 40 0 0
注意:修改quota限值时的单位为Kb
[root@crushlinux ~]# edquota -t
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/sdb1 14days 7days
6、查看quota报表
(1)查看user1的quota报表
[root@crushlinux ~]#
[root@crushlinux ~]# quota -uvs user1
Disk quotas for user user1 (uid 520):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 40 400M 500M 10 0 0
[root@crushlinux ~]#
发现此时增加grace,但没有数据,因为我们此时使用量未达到soft值(400M)
(2)查看gtest组的quota报表
Disk quotas for group gtest (gid 523):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 120 1500M 1200M 30 0 0
[root@crushlinux ~]#
(3)查看文件系统的限额报表
[root@crushlinux ~]# repquota -auvs
*** Report for user quotas on device /dev/sdb1
Block grace time: 14days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 2 0 0
segment -- 32 0 0 8 0 0
test1 -- 40 0 0 10 0 0
test2 -- 32 0 0 8 0 0
lidi -- 40 0 0 10 0 0
haha -- 40 0 0 10 0 0
user3 -- 40 400M 500M 10 0 0
wang -- 40 0 0 10 0 0
lisi -- 40 0 0 10 0 0
zhangsan -- 40 0 0 10 0 0
amber -- 40 0 0 10 0 0
u1 -- 40 0 0 10 0 0
user1 -- 40 400M 500M 10 0 0
usr -- 40 0 0 10 0 0
user2 -- 40 400M 500M 10 0 0
user5 -- 40 400M 500M 10 0 0
user4 -- 40 400M 500M 10 0 0
7、测试
(1)测试user1磁盘使用量达到450M
[root@crushlinux ~]# su - user1
[user1@crushlinux ~]$ dd if=/dev/zero of=./bigfile bs=1M count=450
sdb1: warning, user block quota exceeded. 【警告:用户块配额快要超出了】
记录了450+0 的读入
记录了450+0 的写出
471859200字节(472 MB)已复制,1.62548 秒,290 MB/秒
[user1@crushlinux ~]$ du -sh
450M .
[root@crushlinux ~]# repquota -auvs
*** Report for user quotas on device /dev/sdb1
Block grace time: 14days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 20 0 0 2 0 0
segment -- 32 0 0 8 0 0
test1 -- 40 0 0 10 0 0
test2 -- 32 0 0 8 0 0
lidi -- 40 0 0 10 0 0
haha -- 40 0 0 10 0 0
user3 -- 40 400M 500M 10 0 0
wang -- 40 0 0 10 0 0
lisi -- 40 0 0 10 0 0
zhangsan -- 40 0 0 10 0 0
amber -- 40 0 0 10 0 0
u1 -- 40 0 0 10 0 0
user1 +- 451M 400M 500M 13days 11 0 0
usr -- 40 0 0 10 0 0
user2 -- 40 400M 500M 10 0 0
user5 -- 40 400M 500M 10 0 0
user4 -- 40 400M 500M 10 0 0
Statistics:
Total blocks: 8
Data blocks: 1
Entries: 17
Used average: 17.000000
发现此时查看磁盘配额报表,user1后面出现了宽限时间倒数,还剩13天。
(2)测试user2磁盘使用量达到500M,尝试写入501M内容
[root@crushlinux ~]# su - user2
[user2@crushlinux ~]$ dd if=/dev/zero of=./bigfile bs=1M count=501
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: 正在写入"./bigfile": 超出磁盘限额
记录了500+0 的读入
记录了499+0 的写出
524251136字节(524 MB)已复制,1.50541 秒,348 MB/秒
[user2@crushlinux ~]$ du -sh
500M .
user2 +- 500M 400M 500M 13days 11 0 0
此时,user1在13天之内还可以正常写入文件,user2则无法写入任何文件。
8、使用setquota命令修改user2的磁盘配额,block(soft)=550M block(hard)=650M
[root@crushlinux ~]#
[root@crushlinux ~]# quota -uvs user2
Disk quotas for user user2 (uid 523):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 500M* 400M 500M 13days 11 0 0
[root@crushlinux ~]# setquota -u user2 563200 665600 0 0 /home
[root@crushlinux ~]# quota -uvs user2
Disk quotas for user user2 (uid 523):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb1 500M 550M 650M 11 0 0
9、关闭quota服务
[root@crushlinux ~]# quotaoff -ug /home
[root@crushlinux ~]# quotaoff -a
Linux系统管理14——磁盘配额(Quota)