CC00049.LinuxBasic——|Linux&高级系统.V01|

一、磁盘配额
### --- 磁盘配额概念

~~~     磁盘配额:用来限制#普通用户在该分区上使用的磁盘空间大小和文件个数的限制。

二、磁盘配额条件

### --- 磁盘配额条件
~~~     内核必须支持磁盘配额;默认是开启的。
~~~     系统中必须安装了 quota 工具,我们的 Linux 默认是安装了 quota 工具的,

[root@server11 ~]# grep CONFIG_QUOTA /boot/config-3.10.0-862.el7.x86_64 
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
~~~     CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y
CONFIG_QUOTACTL_COMPAT=y
### --- 查看命令如下
~~~     要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需要手工开启,不再是默认就开启的

[root@server11 ~]# rpm -qa | grep quota
quota-4.01-17.el7.x86_64
quota-nls-4.01-17.el7.noarch

三、概念

### --- 用户配额和组配额

~~~     先到先得,不是平均分配的。通过shell脚本来实现组配额平均分配。用的一般是用户配额。
### --- 磁盘容量限制和文件个数限制:
~~~     因为每个文件需要占用一个I节点号;I节点号是有限的。

### --- 软限制和硬限制
~~~     软限制是警告限制,硬限制才是真正生效的。
### --- 宽限时间

~~~     若是超过了软限制,在宽限时间之内,可以使用。到达特定时间内,会把软限制转为硬限制。
~~~     如果用户的空间占用数处于软限制和硬限制之间,统会在用户登陆时警告用户磁盘将满,
~~~     这个时间就是宽限时间,默认是 7 天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,
~~~     那么软限制就会升级为硬限制。

四、磁盘配额规划

### --- 磁盘配额规划

~~~     我们开始磁盘配额实验,首先我们来规划下我们的实验:
~~~     磁盘配额是限制的普通用户在分区上使用磁盘空间和文件个数的,所以我们需要指定一个分区。
~~~     那么我们手工建立一个 5GB 的/dev/sdb1 分区,把它挂载到/disk 目录当中。
~~~     还有我们需要建立被限制的用户和用户组。
~~~     那么我们假设需要限制 user1、user2 和 user3用户,这三个用户属于 test 用户组。
~~~     其中 test 组磁盘容量硬限制为 500MB,软限制 450MB,文件个数不做限制。
~~~     user1 用户为了便于测试,磁盘容量硬限制为 50MB,
~~~     软限制为 40MB,文件个数硬限制限制为 10 个,软限制为 8 个。
~~~     user2 和 user3 用户磁盘容量硬限制为 250MB,软限制为 200MB,文件个数不做限制。
~~~     大家发现 user1、user2 和 user3 用户加起来的磁盘容量限制为 550MB,
~~~     超过了 test 组的磁盘容量限制 500MB。这样的话,某个用户可能达不到自己的用户限制,
~~~     而达到组限制时就不能再写入数据了。也就是说,如果用户限制和组限制同时存在,
~~~     那么哪个限制更小,哪个限制优先生效。系统宽限时间我们改为 8 天。

一、磁盘配额步骤

### --- 分 5GB 的/dev/sdb1 分区,并将它挂载到/disk 目录当中

[root@server11 ~]# mount
/dev/sdb1 on /disk type ext4 (rw,relatime,data=ordered)
### --- 建立需要做限制的用户和用户组

[root@server11 ~]# groupadd test
[root@server11 ~]# useradd -G test user1
[root@server11 ~]# useradd -G test user2
[root@server11 ~]# useradd -G test user3
[root@server11 ~]# passwd user1
[root@server11 ~]# passwd user2
[root@server11 ~]# passwd user3
### --- 在分区上开启磁盘配额功能
 
[root@server11 ~]# mount -o remount,usrquota,grpquota /disk        // 临时生效
[root@server11 ~]# mount
/dev/sdb1 on /disk type ext4 (rw,relatime,quota,usrquota,grpquota,data=ordered)
~~~     重新挂载/disk 分区,并加入用户和用户组的磁盘配额功能
~~~     我们要想永久生效,则需要修改/etc/fstab 文件,改成:

[root@server11 ~]# vi /etc/fstab                                    // 永久生效
/dev/sdb1 /disk   ext4 defaults,usrquota,grpquota               0 0
~~~     …省略部分输出…
### --- 修改配置文件如果想要生效,必须重启系统,否则也需要把分区重新挂载一遍。

[root@server11 ~]# mount  -o remount /disk
### --- 建立磁盘配额的配置文件
### --- 选项:
~~~     -a:扫描/etc/mtab 文件中所有启用磁盘配额功能的分区。
~~~     如果加入此参数,命令后面就不需要加入分区名了
~~~     -c:不管原有的配置文件,重新扫描并建立新的配置文件
~~~     -u:建立用户配额的配置文件,也就是生成 aquota.user 文件
~~~     -g:建立组配额的配置文件,会生成 aquota.group 文件
~~~     -v:显示扫描过程
~~~     -m:强制以读写的方式扫描文件系统,和-M 类似。一般扫描根分区时使用。
~~~     -f:强制扫描文件系统,并写入新的配置文件。一般扫描新添加的硬盘分区时使用
 
[root@server11 ~]# quotacheck [选项] [分区名]
[root@server11 ~]# 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 [/disk] done
quotacheck: Cannot stat old user quota file /disk/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /disk/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file /disk/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /disk/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 3 directories and 0 files
quotacheck: Old file not found.
quotacheck: Old file not found.
### --- 需要关闭 SELinux,否则会报错

[root@server11 ~]# ll /disk/                                       // 查看是否生效,只要下列文件生效,说明生效
total 32
-rw------- 1 root root  6144 Mar 16 22:15 aquota.group
-rw------- 1 root root  6144 Mar 16 22:15 aquota.user
### --- /disk 目录中两个配额配置文件已经建立
~~~     如果需要给根分区开启配额功能,需要:
[root@server11 ~]# vi /etc/fstab 
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,usrquota,grpquota 1 1
 
### --- 开启/分区的配额功能
[root@server11 ~]# mount -o remount /
### --- 重新挂载/分区

~~~     如果我们自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,
~~~     而 quotacheck
~~~     需要把分区先挂载成只读分区,然后建立配置文件,最后再挂载回来,
~~~     所以不能直接在/分区建立配置文件。这时就需要使用-m 强制以读写方式扫描文件系统了
[root@server11 ~]# quotacheck -avugm                               // 根分区做配额,需要加入m选项。即可
### --- 设置用户和组的配额限制
### --- 选项:
~~~     -u 用户名: 设定用户配额
~~~     -g 组名:   设定组配额
~~~     -t:  设定宽限时间
~~~     -p:  复制配额限制。如果已经设定好某个用户的配额限制,其他用户的配额限
~~~     制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
~~~     我们给 user1 用户设定的配额限制是:磁盘空间软限制是 40MB,硬限制是 50MB;
~~~     文件个数的软限制是 8 个,硬限制是 10 个(稍微小一点,一会测试时方便测试)。命令如下:

[root@server11 ~]# edquota [选项] [用户名或组名]
~~~     edquota 命令进入之后,就是标准的 vi 操作方法

[root@localhost ~]# edquota -u user1
Disk quotas for user user1 (uid 1001):
~~~     磁盘配额是设定用户 user1(UID 是 1001)                     // blocks坚决不允许手动修改,改的是后面两个
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0          0          0          0        0        0
~~~     分区名        已占用容量 软限制         硬限制   已占用文件数 软限制  硬限制
Disk quotas for user user1 (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0       40000      50000      0          8        11
~~~     不用对齐,是七列就行
### --- 再给 user2 用户配置限额,user2 用户要求是空间软限制 250MB,硬限制 250MB,
### --- 文件个数不做限制:
[root@server11 ~]# edquota -u user2
Disk quotas for user user2 (uid 1002):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0       250000     300000       0        0        0

~~~     接下来给 test 组配置限额,test 组要求是空间软限制是 450MB,硬限制 500MB,
~~~     文件个数不做限制:
[root@server11 ~]# edquota -g test
Disk quotas for group test (gid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0       450000     500000      0        0        0
### --- 配额复制
~~~     user3 用户的配额值和 user2 用户完全一样,
~~~     我们就可以使用 user2 用户作为模板进行复制。这
~~~     样我们如果需要建立大量的配额值一致的用户时,就会非常方便,不用一个个手工建立了。
~~~     复制命令
~~~     如下:
~~~     命令 -p 源用户 -u 目标用户
### --- 修改宽限时间
~~~     我们要求把宽限时间改为 8 天,修改命令如下:

[root@server11 ~]# edquota -p user2 -u user3
[root@server11 ~]# 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                     8days                  8days
~~~     分区名                        容量的宽限时间     个数的宽限时间
### --- 启动和关闭配额
~~~     配额的配置完成,接下来只需要启动配额就大功告成了,启动命令如下:
~~~     选项:
~~~     -a:依据/etc/mtab 文件启动所有的配额分区。如果不加-a,后面就一定要指定分区名
~~~     -u:启动用户配额
~~~     -g:启动组配额
~~~     -v:显示启动过程的信息

[root@localhost ~]# quotaon [选项] [分区名]
~~~     启动配额
[root@server11 ~]# quotaon -vug /disk/
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
 
~~~     启动/disk 分区的配额
[root@server11 ~]# quotaon -avug
/dev/sdb1 [/disk]: group quotas turned on
/dev/sdb1 [/disk]: user quotas turned on
~~~     这条命令也可以
~~~     关闭配额的命令如下:
### --- 选项
~~~     -a:依据/etc/mtab 文件关闭所有的配额分区。如果不加-a,后面就一定要指定分区名
~~~     -u:关闭用户配额
~~~     -g:关闭组配额
[root@server11 ~]# quotaoff [选项] [分区名]
 
~~~     依据/etc/mtab 文件关闭配额分区
[root@server11 ~]# quotaoff –a
二、磁盘配额查询
### --- quota 查询用户或用户组配额:

[root@server11 ~]# quota -uvs user1
Disk quotas for user user1 (uid 1001): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1      0K  40000K  50000K               0       8      11
### --- repquota 查询文件系统配额                                        // 查询分区的配额

[root@server11 ~]# repquota -augvs
*** Report for user quotas on device /dev/sdb1
Block grace time: 8days; Inode grace time: 8days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0       
user1     --      0K  40000K  50000K              0     8    11       
user2     --      0K    245M    293M              0     0     0       
user3     --      0K    245M    293M              0     0     0       

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 4
Used average: 4.000000

*** Report for group quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --     20K      0K      0K              2     0     0       
test      --      0K    440M    489M              0     0     0       

Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2.000000
三、测试
### --- 因为是为user1做的磁盘配额限制,需要在user1下测试

[user1@server11 ~]$ whoami
user1
~~~     disk目录对于user1用户没有权限

[user1@server11 ~]$ cd /disk/
[user1@server11 disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
dd: failed to open ‘/disk/testfile’: Permission denied
[root@server11 ~]# chown user1 /disk/
[user1@server11 ~]$ ll -d /disk/
drwxr-xr-x 3 user1 root 4096 Mar 16 22:15 /disk/
### ---建立 testfile 文件,指定大小 60MB

[user1@server11 disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd: error writing ‘/disk/testfile’: Disk quota exceeded             // 超出磁盘限额
49+0 records in
48+0 records out
51195904 bytes (51 MB) copied, 0.242004 s, 212 MB/s
[user1@server11 disk]$ ll -h
-rw-rw-r-- 1 user1 user1  49M Mar 16 22:40 testfile                // 只能查看到49MB的空间
### ---查看block限额为50MB,已经写满

[root@server11 ~]# quota -vus user1
Disk quotas for user user1 (uid 1001): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1  50000K* 40000K  50000K   7days       2       8      11
### ---空间已经写满,但是文件个数还有
~~~     在创建第7个时提示配额超出,但是还是可以创建的,只有达到11个时才不可以继续创建

[user1@server11 disk]$ touch 1
[user1@server11 disk]$ touch 2
[user1@server11 disk]$ touch 3
[user1@server11 disk]$ touch 4
[user1@server11 disk]$ touch 5
[user1@server11 disk]$ touch 6
[user1@server11 disk]$ touch 7
sdb1: warning, user file quota exceeded.
### ---理论是文件个数是可以写入8个的,但是它把aquota.group,aquota.user也算在内,
### ---所以只能写入6个文件

[user1@server11 disk]$ ls
1  2  3  4  5  6  7 aquota.group aquota.user   testfile
### ---还是可以继续创建的
~~~     9加2个文件是11个文件,硬配额超出一个都是不可以的,所以达到11的限制,创建失败。

[user1@server11 disk]$ touch 8
[user1@server11 disk]$ touch 9
[user1@server11 disk]$ touch 10                                    
sdb1: write failed, user file limit reached.
touch: cannot touch ‘10’: Disk quota exceeded

四、非交互设定用户磁盘配额

### ---非交互设定用户磁盘配额

[root@server11 ~]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 \个数硬限制 分区名
[root@server11 ~]# useradd user4
[root@server11 ~]# passwd user4
### ---建立用户

[root@server11 ~]# setquota -u user4 40000 50000 5 8 /disk
### ---设定用户在/disk 分区的容量软限制为 10MB,硬限制 20MB。文件个数软限制 5 个,硬限制#8 个。
~~~     这个命令在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板的用户,
~~~     设定好磁盘配额,再进行配额复制,也是可以的。
### ---查询
### ---shell编程更有效果

[root@server11 ~]# quota -vus user4
Disk quotas for user user4 (uid 1004): 
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1      0K  40000K  50000K               0       5       8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值