鸟哥的linux私房菜学习笔记《三十一》磁盘配额

  1. 简介
    使用 quota 来让磁盘的容量使用较为公平
  2. 旧版本的quata可以通过converquota这个程序来转换
  3. 处理quota的设置流程
    (1)目的与帐号:现在我想要让我的专题生五个为一组,这五个人的帐号分别是 myquota1,myquota2, myquota3, myquota4, myquota5,这五个用户的密码都是 password ,且这五个用户所属的初始群组都是 myquotagrp 。 其他的帐号属性则使用默认值
    (2)帐号的磁盘容量限制值:我想让这五个用户都能够取得 300MBytes 的磁盘使用量(hard),文件数量则不予限制。 此外,只要容量使用率超过 250MBytes ,就予以警告(soft)。
    (3)群组的限额 (option 1):由于我的系统里面还有其他用户存在,因此我仅承认myquotagrp 这个群组最多仅能使用 1GBytes 的容量。 这也就是说,如果 myquota1,myquota2, myquota3 都用了 280MBytes 的容量了,那么其他两人最多只能使用(1000MB - 280x3 = 160MB) 的磁盘容量啰!这就是使用者与群组同时设置时会产生的后果。
    (4)共享目录限额 (option 2):另一种设置方式,每个用户还是具有自己独立的容量限止,但是这五个人的专题共享目录在 /home/myquota 这里,该目录请设置为其他人没有任何权限的共享目录空间,仅有 myquotagrp 群组拥有全部的权限。 且无论如何,该目录最多仅能够接受 500MBytes 的容量。请注意,群组 (group) 的限制与目录(directory/project) 无法同时并存喔! 所以下面的流程中,我们会先以群组来设计,然后再以目录限制来进一步说明!
    (5)宽限时间的限制:最后,我希望每个使用者在超过 soft 限制值之后,都还能够有 14 天的宽限时间。
  4. 使用脚本新建实验quota环境

    
    #!/bin/bash
    
    
    #创建实验quota所需环境 
    
    groupadd myquotagrp
    for username in myquota1 myquota2 myquota3 myquota4 myquota5
    do 
        useradd -g myquotagrp $username
        echo "password" | passwd --stdin $username
    done
    [root@CentOS ~]# chmod +x addacount.sh 
    [root@CentOS ~]# ./addacount.sh 
    Changing password for user myquota1.
    passwd: all authentication tokens updated successfully.
    Changing password for user myquota2.
    passwd: all authentication tokens updated successfully.
    Changing password for user myquota3.
    passwd: all authentication tokens updated successfully.
    Changing password for user myquota4.
    passwd: all authentication tokens updated successfully.
    Changing password for user myquota5.
    passwd: all authentication tokens updated successfully.
    
  5. 实践Quota流程1:文件系统支持

    [root@CentOS ~]# df -h /home/
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3       9.9G  1.5G  7.9G  16% /home
    [root@CentOS ~]# mount | grep home
    /dev/sda3 on /home type ext4 (rw)
    
    # 在这次开机中实验,以手动方式加入quota支持
    
    [root@CentOS ~]# mount -o remount,usrquota,grpquota /home/
    [root@CentOS ~]# mount | grep home
    /dev/sda3 on /home type ext4 (rw,usrquota,grpquota)
    用户和用户组的quota文件系统参数分别是usrquota和grpquota
    
    # 写入配置文件,永久有效
    
    
    # 此处注意,登录bash环境不可以从普通用户切换到root,否则会提示/home正在使用,因为此时的root环境是普通用户的子shell。
    
    [root@CentOS ~]# vim /etc/fstab
    UUID=ea0e1001-64b8-4911-b3bf-59b63c0a5213            /home                   ext3    defaults,usrquota,grpquota  1  2
    [root@CentOS ~]# umount /home
    [root@CentOS ~]# mount -a
    [root@CentOS ~]# mount | grep home
    
    # 重启后发现:
    
    [root@CentOS ~]# mount | grep home
    /dev/sda3 on /home type ext4 (rw,usrquota,grpquota)
    
    # 存在quota支持
    
    
    # 如果这个文件修改错误,会造成无法开机完全的情况
    
    
  6. 实践Quota流程2:新建Quota配置文件
    其实Quota是通过分析整个文件系统中每个用户拥有的文件总数与总容量,再将这些数据记录在该文件系统的最顶层目录,然后在该配置文件中再使用每个账号的限制值去规定磁盘使用量的。
    quotacheck:扫描文件系统并新建Quota的配置文件
    参数:
    -a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,/mount_point可不写,因为扫描所有文件系统
    -u:针对用户扫描文件与目录的使用情况,会新建aquota.user
    -g:针对用户组扫描文件与目录的使用情况,会新建aquota.user
    -v:显示扫描过程的详细信息
    -f:强制扫描文件系统,并写入新的quota配置文件
    -M:强制以读写方式扫描文件系统,只有在特殊情况下才会使用
    quotacheck只要记得“-avug”一起执行即可

    
    # 针对整个系统含有usrquota,grpquota参数逇文件系统进行扫描
    
    [root@CentOS ~]# 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/sda3 [/home] done
    quotacheck: Cannot stat old user quota file /home/aquota.user: No such file or directory. Usage will not be substracted.
    quotacheck: Cannot stat old group quota file /home/aquota.group: No such file or directory. Usage will not be substracted.
    quotacheck: Cannot stat old user quota file /home/aquota.user: No such file or directory. Usage will not be substracted.
    quotacheck: Cannot stat old group quota file /home/aquota.group: No such file or directory. Usage will not be substracted.
    quotacheck: Checked 959 directories and 3268 files  #实际查询结果
    quotacheck: Old file not found.
    quotacheck: Old file not found.
    
    # 以上信息说明查找成功,系统支持quota
    
    
    
    # 此处/home为独立的文件系统,所以查询结果会将配置文件放在/home下面 
    
    [root@CentOS ~]# ll -d /home/a*
    -rw-------. 1 root root 7168 Mar 19 08:34 /home/aquota.group
    -rw-------. 1 root root 7168 Mar 19 08:34 /home/aquota.user
    
    
    # 如果特殊情况需求要求强制扫描已挂载的文件系统时:
    
    [root@CentOS ~]# quotacheck -avug -mf
    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/sda3 [/home] done
    quotacheck: Checked 959 directories and 3270 files
    
    # 因为有配置文件存在,所以不会出现错误信息
    

    新建两个文件aquota.user和aquota.group,是使用quotacheck命令,而不是手动编辑

  7. 实践Quota流程3:Quota启动、关闭、限制值设置
    (1)quotaon:启动quota服务
    参数:
    -u:针对用户启动aquota(aquota.user)
    -g:针对用户组启动aquota(aquota.group)
    -v:显示启动过程的相关信息
    -a:根据/etc/fstab内的文件系统设置启动有关的quota,若不加-a的话,则后面就需要加上特定的文件系统

    
    # 启动user/group的quota
    
    [root@CentOS ~]# quotaon -avug
    /dev/sda3 [/home]: group quotas turned on
    /dev/sda3 [/home]: user quotas turned on
    
    
    # 特殊用法没加入启动的是/var的quota支持,那么仅启动user quota时
    
    [root@CentOS ~]# quotaon -uv /var
    
    # 这个quotaon -avug的命令几乎只在第一次启动quota时才需要进行
    

    (2)quotaoff:关闭quota服务
    参数:
    -a:全部的文件系统的quota都关闭
    -u:仅针对后面接的那个/mount_point关闭user quota
    -g:仅针对后面接的那个/mount_point关闭group quota
    (3)edquota:编辑账号/用户组的限值与宽限时间
    参数:
    -u:后面接账号名称,可以进入quota的编辑界面去设置username的限制值
    -g:后面接组名,可以进入quota的编辑界面去设置groupquota的限制值
    -t:可以修改宽限时间
    -p:复制范本,那个模范账号为一曾经存在并且设置好quota的用户,意义为将模范账号这个人的quota限制值复制给新账号

    
    # 设置myquota1这个用户的quota的限制值
    
    [root@CentOS ~]# edquota -u myquota1
    Disk quotas for user myquota1 (uid 501):
      Filesystem          blocks       soft       hard     inodes     soft     hard
      /dev/sda3              36          0          0          9        0        0
    
    # 第一行说明针对哪个账号进行quota的限额设置
    
    
    # 第二行是标题行,七个字段
    

    七个字段的意义
    文件系统:说明该限制值是针对哪个文件系统
    磁盘容量:这个数值是quota自己算出来的,单位KB,请不要修改它
    soft:磁盘容量(block)的soft限制值,单位KB
    hard:block的hard限制值,单位KB
    文件数量:inode,这是quota自己算出来的,单位为个数,请不要修改它
    soft:inode的soft的限制值
    hard:inode的hard限制值

    
    # 将上述结果修改为如下:
    
    Disk quotas for user myquota1 (uid 501):
      Filesystem    blocks       soft       hard     inodes     soft     hard
      /dev/sda3     36     250000     300000          9        0        0
    
    
    #  将myquota1的限制值复制给其他四个账号
    
    [root@CentOS ~]# edquota -p myquota1 -u myquota2
    [root@CentOS ~]# edquota -p myquota1 -u myquota3
    [root@CentOS ~]# edquota -p myquota1 -u myquota4
    [root@CentOS ~]# edquota -p myquota1 -u myquota5
    
    
    # 更改用户组的限额
    
    [root@CentOS ~]# edquota -g myquotagrp
    
    Disk quotas for group myquotagrp (gid 501):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sda3                       180          0          0         45        0        0
    
    # 结果:
    
    Disk quotas for group myquotagrp (gid 501):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sda3                       180     900000    1000000         45        0        0
    
    
    
    # 最后更改宽限时间,默认7天,改为14天
    
    [root@CentOS ~]# 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/sda3                    7days                  7days
    
    # 结果为:
    
    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/sda3                    14days                  7days
    
  8. 实践Quota流程4:Quota限制值的报表
    quota的报表主要有两种模式,一种是针对每个个人或用户的quota命令,一个是针对整个文件系统的repquota命令
    (1)quota
    参数:
    -u:后面接username,表示显示该用户的quota限制值。若不接username,表示显示执行者的quota限制值
    -g:后面接groupquota,显示该用户组的限制值
    -v:显示每个用户在文件系统中的quota值
    -s:使用1024位倍数来指定单位,会显示如M之类的单位

    
    # 直接使用quota去显示myquota1与myquota2的限额
    
    [root@CentOS ~]# quota -uvs myquota1 myquota2
    Disk quotas for user myquota1 (uid 501): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sda3      36    245M    293M               9       0       0        
    Disk quotas for user myquota2 (uid 502): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sda3      36    245M    293M               9       0       0   
    
    # 显示结果几乎跟edquota一样
    
    
    
    # 显示出myquotagrp的用户组限额
    
    [root@CentOS ~]# quota -gvs myquotagrp
    Disk quotas for group myquotagrp (gid 501): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sda3     180    879M    977M              45       0       0    
    

    由于我们使用edquota设置限额时,使用的是近似值(1000)而不是实际的1024倍数,所以看起来会有点不一样。由于quota仅能针对某些用户显示报表,如果要针对整个文件系统列出报表,那repquota就排上用场了。
    (2)repquota:针对文件系统的限额做报表
    参数:
    -a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果
    -v:输出的数据将含有文件系统相关的详细信息
    -u:显示出用户的quota限制值
    -g:显示出个别用户组的quota限制值
    -s:使用M,G为单位显示结果

    
    # 查询本案例中所有用户的quota限制情况
    
    [root@CentOS ~]# repquota -auvs
    *** Report for user quotas on device /dev/sda3
    Block grace time: 14days; Inode grace time: 7days
                            Block limits                File limits
    
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    
    root      --    513M       0       0              6     0     0       
    kevin     --    852M       0       0           4221     0     0       
    myquota1  --      36    245M    293M              9     0     0       
    myquota2  --      36    245M    293M              9     0     0       
    myquota3  --      36    245M    293M              9     0     0       
    myquota4  --      36    245M    293M              9     0     0       
    myquota5  --      36    245M    293M              9     0     0       
    
    Statistics:
    Total blocks: 7
    Data blocks: 1
    Entries: 7
    Used average: 7.000000
    
  9. 实践Quota流程5:测试与管理

    
    # 测试1:利用myquota的身份,创建一个270MB的大文件,并查看quota结果
    
    [myquota1@CentOS ~]$ dd if=/dev/zero of=bigfile bs=1M count=270
    sda3: warning, user block quota exceeded.
    270+0 records in
    270+0 records out
    283115520 bytes (283 MB) copied, 6.54255 s, 43.3 MB/s
    
    # 出现警告信息
    
    
    
    # root身份查看quota报表
    
    [root@CentOS ~]# repquota -auv
    *** Report for user quotas on device /dev/sda3
    Block grace time: 14days; Inode grace time: 7days
                            Block limits                File limits
    
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    
    root      --  524380       0       0              6     0     0       
    kevin     --  871440       0       0           4221     0     0       
    myquota1  +-  276516  250000  300000 13days      10     0     0       
    myquota2  --      36  250000  300000              9     0     0       
    myquota3  --      36  250000  300000              9     0     0       
    myquota4  --      36  250000  300000              9     0     0       
    myquota5  --      36  250000  300000              9     0     0       
    
    Statistics:
    Total blocks: 7
    Data blocks: 1
    Entries: 7
    Used average: 7.000000
    
    # grace出现,并开始倒数
    
    
    测试2:在创建一个大文件,让总容量超过300M
    [myquota1@CentOS ~]$ dd if=/dev/zero of=bigfile2 bs=1M count=300
    sda3: write failed, user block limit reached.
    dd: writing `bigfile2': Disk quota exceeded
    23+0 records in
    22+0 records out
    24047616 bytes (24 MB) copied, 0.133032 s, 181 MB/s
    
    [myquota1@CentOS ~]$ du -sk
    300000  .
    
    # 达到极限
    
    

    当倒数归零,那么soft的值会变成严格控制,此时你就没有多余的空间可以使用了。解决方法:登录到系统去删除文件即可。
    (3)warnquota:对超过限制额者发出警告信息
    依据/etc/warnquota.conf的设置,然后找出目前系统上面quota用量超过soft(就是gracetime出现的那些)的账号,通过Email的功能将警告信发送到用户的电子邮件信箱。warnquota并不会自动执行,所以我们需要手动去执行。单纯执行“warnquota”之后,她会发出两封信,一封给muquota1,一封给root

    
    # 查看警告信息
    
    [root@CentOS ~]# warnquota 
    [root@CentOS ~]# mail

    执行warmquota可能也不会产生任何信息以及信件,因为只有当用户的quota有超过soft时,warnquota才会发送警告信。那么以上,包括标题、信息内容说明、签名文件等数据放在哪里呢?就是/etc/warnquota。

    [root@CentOS ~]# vim /etc/warnquota.conf
    
    # 如果英文不好理解,可以转成中文:
    
    SUBJECT         = NOTE: You are exceeding your allocated disk space limits
    CC_TO           = "root@example.com"
    SUPPORT         = "root@example.com"
    PHONE           = "(123) 456-1111 or (222) 333-4444"
    GROUP_MESSAGE  = Hello,|\
    your group %i is using too much disk space at %h.|\
    I suggest you to clean up group files on the following 
    
    
    # 改成:
    
    
    # SUBJEST = 注意:你在本系统上拥有的文件容量已超过最大容许选择
    
    
    # .........
    
    
    # .........
    
    
    # .........
    
    
    
    
    # 如果重复执行warnquota,namemyquota1就会收到类似的信件内容:
    
    [root@CentOS ~]# warnquota 
    
    
    # 不过这个方法并不适用/var/spool/mail也爆满的quota控管中,因为如果用户在这个文件系统的容量已经达到限额了,那么新的信件当然就收不下来
    
    
    
    # 让系统自动执行warnquota:
    
    [root@CentOS ~]# vim /etc/cron.daily/warnquota
    /usr/sbin/warnquota  #添加这一行
    [root@CentOS ~]# chmod 755 /etc/cron.daily/warnquota

    (4)setquota:直接于命令中设置quotaxiane

    
    # 如果想要适用script的方法来新建大量的账号,并且所有的账号都在新建时就给予quota,两个方法:
    
    
    # 新建一个原始账号,再以“edquota -pold -unew”写入script中
    
    
    # 直接以edquota新建用户的quota设置值
    
    [root@CentOS ~]# serquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统
    [root@CentOS ~]# quota -uv myquota5
    Disk quotas for user myquota5 (uid 505): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sda3      36  250000  300000               9       0       0  
    
    [root@CentOS ~]# set -u myquota5 100000 200000 0 0 /home
    [root@CentOS ~]# quota -uv myquota5
    Disk quotas for user myquota5 (uid 505): 
         Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
          /dev/sda3      36  250000  300000        
    
    # 此时真的有改变过来
    
  10. 不改动既有系统的Quota实例
    假设已经有/home这个独立的分区了,那么只要(可能需要先关闭SELinux规则):
    1 . 将/var/spool/mail这个目录完整地移动到/home下面
    2 . 利用ln -s /home/mail /var/spool/mail来新建连接数据
    3 . 将/home进行quota限额设置

你可能感兴趣的:(linux服务器,linux)