• 环境

    • 虚拟机:VMware-10.0.7 build-2844087
    • Linux系统:CentOS 6.8
    • 远程工具:Xshell 6 (Build 0197)

01_Linux系统管理_基础知识_高级文件系统管理_磁盘配额

一、什么是磁盘配额(quota)

  • 磁盘配额概念

    • 对用户和用户组使用磁盘空间和文件个数的限制
    • 限定普通用户,对管理员无效

二、磁盘配额条件

  • 磁盘配额需要满足两个条件:

    • 内核必须支持磁盘配额
    • 系统中必须安装quota工具

2.1、内核必须支持磁盘配额

[root@localhost ~]# grep QUOTA /boot/config-2.6.32-642.el6.x86_64
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_XFS_QUOTA=y
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y

说明:CONFIG_QUOTA=y 此配置表明内核支持磁盘配额。

2.2 系统中必须安装 quota 工具

[root@localhost ~]# rpm -qa | grep quota
quota-3.17-23.el6.x86_64

说明:系统中有 quota 工具,如果没有使用yum安装即可。

三、概念理解

  • 概念理解

    • 用户配合和组配额

      • 主要给用户配额,可用Shell脚本实现
      • 组配额,“先到先得”,实际中无意义
    • 限制硬盘容量和文件个数
      • 限制使用硬盘空间
      • 限制上传文件个数
    • 软限制和硬限制
      • 警告限制,超出限额报警,但不锁死
      • 死限制,超过即停止写入
    • 宽限天数
      • 达到软限制之后,在宽限一定天数(比如7天),升级为硬限制。

四、磁盘配额规划

  • 磁盘配额规划

    • 目的:方便日后复习
    • 具体i规划:
      • 新建一个 5GB 的分区 /dev/sdb1,并挂载到 /disk1
      • 新建三个普通用户:user1、user2 user3
      • 可更改宽限天数
    • 注意:
      • 本文中不会出现组配额情况,“先到先得”规则对其他用户极不友好,没有实际意义,所以排除在规划之外。

五、磁盘配额步骤

5.1、基本配额步骤

  • 1、建立磁盘分区 /dev/sdb1,并挂载到 /disk1
[root@localhost ~]# fdisk /dev/sdbWARNING: DOS-compatible mode is deprecated. It's strongly recommended toswitch off the mode (command 'c') and change display units tosectors (command 'u').Command (m for help): pDisk /dev/sdb: 21.5 GB, 21474836480 bytes
28 heads, 40 sectors/track, 37449 cylinders
Units = cylinders of 1120 * 512 = 573440 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008e6aeDevice Boot      Start         End      Blocks   Id  System
/dev/sdb1               2        3488     1951744   83  Linux
[root@localhost /]# mount /dev/sdb1 /disk
/dev/sdb1 looks like swapspace - not mounted  <-- /dev/sdb1是swap分区,无法挂载
mount: you must specify the filesystem type   <-- 重新指定文件类型
[root@localhost /]# mkfs -t ext4 /dev/sdb1    <-- 指定 ext4 文件类型
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
...
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost /]# mount /dev/sdb1 /disk      <-- 重新挂载,不再报错
  • 2、创建需要限制的用户 user1、user2、user3
[root@localhost ~]# useradd user1
[root@localhost ~]# passwd user1
[root@localhost ~]# useradd user2
[root@localhost ~]# passwd user2
[root@localhost ~]# useradd user3
[root@localhost ~]# passwd user3
[root@localhost ~]# vi /etc/passwd...
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash
user3:x:502:502::/home/user3:/bin/bash
  • 3、在分区上开启磁盘配额功能
  • 临时开启
[root@localhost /]# mount -o remount,usrquota,grpquota /disk   <--挂载上配额功能
  • 永久开启
[root@localhost /]# vi /etc/fstab/dev/sdb1       /disk          ext4    defaults,usrquota,grpquota    0 0

说明:上图标记位置,即为开机默认开机磁盘配额功能,挂载好之后,重启系统 reboot

[root@localhost /]# reboot
  • 4、建立磁盘配额的配置文件
  • 创建磁盘配额配置格式及选项

    • 格式:quotacheck 【选项】【分区名】
    • 选项
      • -a:扫描 /etc/mtab 文件中所有启用磁盘配额的分区。加入此参数,命令不用指定分区
      • -v:显示扫描过程
      • -u:建立用户配额的配置文件,也就是生成 aquota.user 文件
      • -g:建立用户组配额的配置文件,也就是生成 aquota.group 文件
      • -c:不管原有配置文件,重新扫描并创建新的配置文件
      • -m:强制以读写的方式扫描文件系统,与 -M 类似,一般扫描分区使用
      • -f:强制扫描文件系统,并写入新的配置文件
  • 建立配置文件
  • 初次创建配置文件报错,权限不够
[root@localhost ~]# quotacheck -auvg
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: Checked 2 directories and 2 files
quotacheck: Cannot create new quotafile /disk/aquota.user.new: 权限不够
quotacheck: Cannot initialize IO on new quotafile: 权限不够
quotacheck: Cannot create new quotafile /disk/aquota.group.new: 权限不够
quotacheck: Cannot initialize IO on new quotafile: 权限不够
  • 原因分析:

    • CentOS 6.8 开启了SELinux安全机制,所以报错
  • 解决办法:关闭SELinux即可。
  • 关闭SELinux
[root@localhost ~]# getenforce        <--查看SELinux状态
Enforcing                             <--强制生效
[root@localhost ~]# setenforce 0      <--设置宽容模式,临时修改
#临时修改允许配置文件
[root@localhost ~]# getenforce             <--再次查看SELinux状态
Permissive                                 <--宽容模式
[root@localhost ~]# vi /etc/selinux/config <--修改配置文件,永久关闭1 2 # This file controls the state of SELinux on the system.3 # SELINUX= can take one of these three values:4 #    enforcing - SELinux security policy is enforced.5 #     permissive - SELinux prints warnings instead of enforcing.6 #     disabled - No SELinux policy is loaded.7 SELINUX=disabled                       <--设置成disabled,SELinux不起作用8 # SELINUXTYPE= can take one of these two values:9 #     targeted - Targeted processes are protected,10 #     mls - Multi Level Security protection.11 SELINUXTYPE=targeted12
[root@localhost ~]# reboot            <--重启系统,使配置生效
[root@localhost ~]# getenforce
Disabled                              <--重启之后,SELinux已关闭
  • 再次创建配置文件
[root@localhost ~]# quotacheck -augv            <--重新创建配置文件
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: Quota for users is enabled on mountpoint /disk so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
# 以上内容,代表配置文件创建成功
  • 查看挂载点 /disk 下配置文件是否创建成功
[root@localhost ~]# ll /disk             <--查看挂载点 /disk 下配置文件是否创建成功
总用量 40
drwxr-xr-x.  3 root root  4096 5月  13 14:12 .
dr-xr-xr-x. 28 root root  4096 5月  13 17:33 ..
-rw-------.  1 root root  6144 5月  13 14:12 aquota.group    <--group配额配置文件创建成功
-rw-------.  1 root root  6144 5月  13 14:12 aquota.user     <--user配额配置文件创建成功
drwx------.  2 root root 16384 5月  13 04:23 lost+found
  • 5、设置用户和组的配额限制
  • 格式:[root@localhost ~]# edquota 【选项】 【用户名或组名】
  • 选项
    • -u 用户名 :设定用户配额
    • -g 组名    :设定组配额
    • -t             :设定宽限时间
    • -p            :复制配额限制,A用户设置好配额,其他用户配额与A用户相同,就可                       以使用配额复制,不用人工指定。
  • 配额举例:我们给用户 user1 磁盘空间软限制是 40M,硬限制是 50M,文件个数的软限制是8个,硬限制是10个(个数较少,方便测试)
  • 操作命令如下:
[root@localhost ~]# edquota -u user11 Disk quotas for user user1 (uid 500):  #                          ------------磁盘空间---------     ---------文件个数-------                     2   Filesystem             blocks       soft       hard     inodes     soft     hard3   /dev/sdb1                   0      40000      50000          0        8       10#   分区名称               已占用容量      软限制      硬限制    i节点数量   软限制    硬限制

说明:blocksinodes 不要手动修改,默认,修改磁盘空间和文件个数的软硬限制即可。

  • 6、启动和关闭磁盘配额
  • 格式

    • 启动配额:[root@localhost ~]# quotaon [选项] [分区名]
    • 关闭配额:[root@localhost ~]# quotaoff [选项] [分区名]
  • 选项:
    • -a:依据配置文件 /etc/mtab 启动所有的配额分区,如果不加 -a,需要指定分区名
    • -v:显示启动过程的信息
    • -u:启动用户配额
    • -g:启动组配额
  • 启动配额:
    • 命令如下:
[root@localhost ~]# quotaon -avug            <--直接开启配额功能报错
quotaon: using /disk/aquota.group on /dev/sdb1 [/disk]: 设备或资源忙
quotaon: using /disk/aquota.user on /dev/sdb1 [/disk]: 设备或资源忙
  • 开启磁盘报错:设备或者资源忙(Device or resource busy)
  • 解决办法:先关闭磁盘配额,再开启磁盘配额
  • 命令如下:
[root@localhost ~]# quotaoff -a                <--关闭磁盘配额
[root@localhost ~]# quotaon -avug              <--启动磁盘配额
/dev/sdb1 [/disk]: group quotas turned on      <--用户组磁盘配额已启动
/dev/sdb1 [/disk]: user quotas turned on       <--用户磁盘配额已启动
  • 7、磁盘配额查询

    • quota 查询用户或者用户组配额
    • repquota 查询文件系统配额
  • quota 查询用户或者用户组配额
  • 格式:[root@localhost ~]# quota [选项] [用户名或组名]
  • 选项:
    • -v:显示详细信息
    • -u:查询用户配额
    • -g:查询用户组配额
    • -s:以习惯单位显示容量大小,比如 M、G 等
[root@localhost ~]# quota -uvs user1
Disk quotas for user user1 (uid 500): Filesystem  blocks   quota   limit   grace   files   quota   limit   grace/dev/sdb1       0   40000   50000               0       8      10  
  • repquota 查询文件系统配额
  • 格式:[root@localhost ~]# repquota [选项] [分区名]
  • 选项:
    • -a:依据配置文件 /etc/mtab 启动所有的配额分区,如果不加 -a,需要指定分区名
    • -v:显示详细信息
    • -u:查询用户配额
    • -g:查询组配额
    • -s:以习惯单位显示容量大小,比如 M,G 等
  • 命令如下:
[root@localhost ~]# repquota -avugs
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7days    <--宽限天数Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0
user1     --       0   40000   50000              0     8    10
#所有用户磁盘配额情况
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 2
Used average: 2.000000*** Report for group quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7daysBlock limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      20       0       0              2     0     0
#所有用户组磁盘配额情况
Statistics:
Total blocks: 6
Data blocks: 1
Entries: 1
Used average: 1.000000
  • 8、测试

    • 用 dd 命令重复写入文件,超出软硬限制是否提醒
    • 使用普通用户 user1 测试,不要用 root 用户测试
  • dd 命令

    • 格式:dd if=源文件 of=目标文件 bs=一次复制大小 count=复制次数
    • 含义:将源文件内容复制到目标文件,每次复制1M,共复制总次数次数
    • 结合本例:复制文件超出50M,应该报错:超出磁盘配额。
  • 1)磁盘空间配额测试
  • 初次写入数据测试
[user1@localhost disk]$ dd if=/dev/zero of=/disk/testfile bs=1M count=60
dd: 正在打开"/disk/testfile": 权限不够
  • 说明:

    • 写入文件报错:权限不够
    • 解决办法:root 用户 修改分区 /disk 所有者为 user1
    • 命令如下:
[root@localhost disk]# chown user1:root /disk        <--修改所属者
[root@localhost disk]# ll -d /disk                   <--查看所属者
drwxr-xr-x. 3 user1 root 4096 5月  14 07:31 /disk    <--修改成功,所属者变成 user1
  • 再次重新写入数据测试
[user1@localhost 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: 正在写入"/disk/testfile": 超出磁盘限额            <--写入报错,限制生效
记录了49+0 的读入
记录了48+0 的写出
51195904字节(51 MB)已复制,0.584917 秒,87.5 MB/秒
[user1@localhost disk]$ quota -uvs user1            <--查询写入情况
Disk quotas for user user1 (uid 500): Filesystem  blocks   quota   limit   grace   files   quota   limit   grace/dev/sdb1   50000*  40000   50000   6days       2       8      10   <--写入成功
  • 2)文件个数配额测试
[user1@localhost disk]$ ls
aquota.group  aquota.user  lost+found  testfile
[user1@localhost disk]$ touch 1
[user1@localhost disk]$ touch 2
[user1@localhost disk]$ touch 3
[user1@localhost disk]$ touch 4
[user1@localhost disk]$ touch 5
[user1@localhost disk]$ touch 6    <--加上testfile、aquota.user 共计8个文件
[user1@localhost disk]$ touch 7    <--加上testfile、aquota.user 共计9个文件,报警
sdb1: warning, user file quota exceeded.
[user1@localhost disk]$ touch 8
[user1@localhost disk]$ touch 9    <--加上testfile、aquota.user 共计11个文件
sdb1: write failed, user file limit reached.
touch: 无法创建"9": 超出磁盘限额
[user1@localhost disk]$ ls
1  2  3  4  5  6  7  8  aquota.group  aquota.user  lost+found  testfile
[user1@localhost disk]$ 

说明1:超出8个报警,超出10个限制不让创建。

说明2:至此,磁盘配额基本步骤已完成,下面是磁盘配额进阶操作。

5.2、磁盘配额进阶操作

  • 1、配额复制:

    • 作用:将A用户配额以同样的限制分配给其他用户。
    • 格式:[root@localhost ~]# edquota -p 原用户 -u 目标用户
      • -p:指定原用户
      • -u:指定目标用户
    • 注意:不适用直接写脚本
  • 举例:将用户 user1  的配额复制给用户 user2
[root@localhost ~]# edquota -p user1 -u user2    <--将user1 配额复制给 user2
[root@localhost ~]# repquota -avus               <--查看 user1 和 user2 配置
*** Report for user quotas on device /dev/sdb1
Block grace time: 7days; Inode grace time: 7daysBlock limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --      16       0       0              1     0     0
user1     +-   50000   40000   50000  6days       2     8    10
user2     --       0   40000   50000              0     8    10       <--user1 和 user2 磁盘配额一致
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 3
Used average: 3.000000
  • 2、非交互设定磁盘配额

    • 格式:[root@localhost disk]# setquota -u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名
    • 适用:特别适合写 Shell 脚本
  • 举例:给用户 user3 设置容量软限制 30M,容量硬限制 40M,文件软限制 5 个,文件硬限制 8 个。
[root@localhost disk]# setquota -u user3 30000 40000 5 8 /disk
[root@localhost disk]# quota -uvs user3
Disk quotas for user user3 (uid 502): Filesystem  blocks   quota   limit   grace   files   quota   limit   grace/dev/sdb1       0   30000   40000               0       5       8    
  • 3、修改宽限时间

    • 了解
    • 一般不修改,默认 7 天正好
[root@localhost disk]# edquota -t1 Grace period before enforcing soft limits for users:2 Time units may be: days, hours, minutes, or seconds3   Filesystem             Block grace period     Inode grace period4   /dev/sdb1                     7days                  7days
~                                                                      
  • 4、根分区 / 开启配额功能

    • 开启方法:修改 /etc/fstab 文件,开机默认挂载 usrquotagrpquota
[root@localhost disk]# vi /etc/fstab             <--修改跟分区 / 默认开机挂载
UUID=dd1a8899-21aa-4311-a8cc-bdf51c431a88 /   ext4    defaults,usrquota,grpquota        1 1

  • 重新挂载根分区 / ,使配置文件 /etc/fstab 生效
[root@localhost disk]# mount -o remount /
  • 建立配额配置文件
[root@localhost disk]# quotacheck -avugm        <--加 -m 强制扫描,否则报错
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 [/] done
quotacheck: Cannot stat old user quota file //aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file //aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old user quota file //aquota.user: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Cannot stat old group quota file //aquota.group: 没有那个文件或目录. Usage will not be substracted.
quotacheck: Checked 6379 directories and 72086 files
quotacheck: Old file not found.
quotacheck: Old file not found.
quotacheck: Quota for users is enabled on mountpoint /disk so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
  • 说明:

    • quotacheck 建立配置文件过程,需要先把分区挂载成只读,然后建立文件,再挂载回来。,
    • 根分区 / 已挂载成读写系统,且正在使用中
    • 不能直接在根分区 / 建立配置文件,必须加 -m 强制扫描才行。

六、小结

  • 知识总结

    • 磁盘配额
    • 基础配额步骤、
    • 磁盘配额进阶步骤、
    • 配额出错解决方法等
  • 目的:可以拿做复习之用。

01_Linux系统管理_基础知识_高级文件系统管理_磁盘配额(quota)相关推荐

  1. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  2. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  3. 11. Linux高级文件系统管理(1)

    目录 11.1 磁盘配额是什么 磁盘配额中的常见概念 11.2 磁盘配额启动前的准备工作 11.3 Linux扫描文件系统并建立磁盘配额记录文件(quotacheck命令) 11.4 Linux开启磁 ...

  4. 4块硬盘做raid几_Linux高级文件系统管理之RAID

    Linux高级文件系统管理之RAID 10.3 RAID(磁盘阵列) LVM最大的优势在于可以在不卸载分区和不损坏数据的情况下进行分区容量的调整,但是万一硬盘损坏了,那么数据定会丢失.我们现在要说的 ...

  5. linux 筛选文件,「Linux基础知识」grep文件内容筛选命令的使用

    原标题:「Linux基础知识」grep文件内容筛选命令的使用 grep命令用于从文档中抓取显示包含指定字符的行,grep命令的使用格式如下: grep [选项] 匹配模式 文件1 文件2 ...... ...

  6. ArcGIS基础知识之shape文件的构成

    ArcGIS基础知识之shape文件的构成 一般来说Shape文件主要由3个文件构成: 主文件.索引文件.数据文件.每个shapefile,都至少有这三个文件组成,其中: .shp 存储的是几何要素的 ...

  7. 【Linux系统管理】09 文件系统管理 高级文件系统管理

    一 文件系统管理 1.1 硬盘结构 1.1.1 硬盘的逻辑结构 每个扇区的大小事固定的,为512Byte.扇区也是磁盘的最小存贮单位.0 磁道,0 扇区 指的就是第一个磁道的第一个扇区.一般是磁盘的最 ...

  8. Linux高级文件系统管理

    如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁盘配额 (Quota) 就是一项非常有用的工具,另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文 ...

  9. 3011C语言_基础知识

    第一章  基础知识 1.1  基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { return 0: } //这是c语言的基本 ...

最新文章

  1. SAP MM MM17里不能修改物料主数据'Purchasing Value Key'字段值?
  2. java线程池队列场景,Java面试题汇总
  3. 趣谈网络协议笔记-二(第十一讲)
  4. linux 开启独立iptables日志
  5. Java中getMessage()和printStackTrace方法
  6. 本程序主要实现了一个方阵的求逆与实现了逆矩阵和原矩阵的乘积为单位矩阵
  7. 机器学习笔记(part1)--Frobenius范数与迹运算
  8. [Python3]Python面向对象的程序设计
  9. 如何做出好的文档 (要学习前人的经验,不要闭门造车)
  10. stm32 通用bootloader_stm32最简单的实现BootLoader
  11. 5G仿真-蒙特卡洛仿真方法
  12. 机器人示教器国产终端,功能图解
  13. 2021南京扬子中学高考成绩查询,2021年南京高考各高中成绩及本科升学率数据排名及分析...
  14. 数据结构如何申请一个空间的队列_如何用鞋柜来作为隔断,隔出一个玄关空间...
  15. 2010世界杯赛程表 收藏一下
  16. R语言数据对象与运算
  17. 深度相机 物体三维重建_基于深度相机的实时物体三维重建方法与流程
  18. 蓝牙AOA定位:如何通过AOA角度计算坐标
  19. ES6 findIndex()返回结果有true,却返回的索引位置一直是-1
  20. error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\link.exe' failed wit

热门文章

  1. hadoop.hbase查询结果Result[] results = table.get(list)为null包空指针异常解决方案
  2. 施努卡:机器视觉项目(机器视觉解决方案深圳)
  3. 交换机三层转发原理详解_ATM交换机技术原理是什么 ATM交换机技术原理简介【详解】...
  4. zigbee配置及常见错误总结---(Segment BANKED_CODE must be defined in a segment definition option)
  5. 【FPGA教程案例56】深度学习案例3——基于FPGA的CNN卷积神经网络之池化层verilog实现
  6. 外汇天眼:模拟盘赚钱实盘亏损,你中了什么魔咒?
  7. 三子棋小游戏思路及代码实现的详解
  8. 企业品牌营销从何做起
  9. sqlite constraint
  10. 基于MATLAB的OFDM系统仿真