磁盘配额
概述
Linux系统作为一个多用户的操作系统,在生产环境中,会发生多个用户共同使用一个磁盘的情况,会造成Linux根分区的磁盘空间耗尽,导致Linux系统无法建立新的文件,从而出现服务程序崩溃、系统无法启动等故障现象。
为了避免这种情况,解决方法就是 ,对用户在指定文件系统中使用磁盘空间、文件数量进行限制,防止用户占用大量的磁盘空间,从而保持系统存储空间可以稳定使用。
如果要针对某个目录进行配额限制的话,XFS文件系统支持 Project Quota 功能,通过该特性,可以支持目录级别的配额限制。本文将对ext4和xfs这两种linux文件系统进行磁盘配额的详细配置
实现条件
- 磁盘配额要求Linux内核支持磁盘配额技术,centos7默认支持
- 磁盘配额只对一般用户有效,对管理员(root)来说是没有任何作用限制的
- 安装 xfsprogs 和 quota 软件包
EXT4和XFS的区别
ext4 文件系统 | xfs 文件系统 |
---|---|
无法对单一目录 | 可对单一目录 |
quota工具 | xfs_quota工具 |
quota默认不开启 | 默认开启 |
需要创建配额配置文件 | 不需要创建配额配置文件 |
Ext4 文件系统
Ext4 文件系统(扩展文件系统)是 Ext 文件系统家族的第四代,其起源可以追溯到 1987 年首次推出的 Minix 操作系统。Ext 文件系统是第一个支持 Linux 内核的文件系统。早在 1992 年。它在 2008 年与 Linux 2.6.28 一起出现。接替其前身 ext3。
Ext4 完美地管理了许多小文件并确保元数据被正确写入,即使写入缓存断电。
一目了然,它的主要特点包括:
- 支持大文件大小 - Ext4 支持高达 16 TiB (Tebibytes) 的单个文件大小,而 XFS 支持高达 8 exbibytes 的最大文件大小。
- 基于范围的延迟分配以加快文件分配。
- 向后兼容性——使用 Ext4 文件系统的另一个好处是它向后兼容Ext3 和 Ext2系统。这提高了性能和灵活性,因为某些 Ext4 功能也可以在 Ext3 和 Ext2 文件系统中实现。此外,Ext3 和 Ext2 文件系统可以作为 Ext4 挂载。
- 分配改进 - 存储块在写入磁盘之前由 Ext4 文件系统更有效地分配。这大大提高了读写性能。
- 日志校验和 - Ext4 文件系统利用校验和选项将文件损坏的风险降至最低。校验和选项执行频繁的检查以探测块卷中的错误。这样做可以减少日志记录时间并降低性能。
- 更快的文件系统检查 - 除了日志校验和,Ext4 产生更快的文件系统检查,例如,与早期版本(如 Ext3 和 Ext2)相比,fsck 命令将运行得更快并在更短的时间内给出结果。
- 改进的时间戳——Ext4 实现了以纳秒为单位测量的时间戳,这是对基于秒的时间戳的粒度的改进,后者被认为是不够的。此外,时间戳还增加了 408 年,以解决 2038 年的上限。
- 无限数量的子目录——Ext4 文件系统不限制可以在单个目录中创建的子目录的数量,除了目录大小本身。在 Ext3 中,一个目录最多只能有 32,000 个子目录。Ext4 引入了 HTreeindices 功能以增加可以存储在目录中的条目。
- 透明加密 - 早在 2015 年 6 月,Linux 内核 4.1 中的 Ext4 文件系统就实现了对透明加密的支持。
XFS 文件系统
XFS 文件系统最初由 Silicon Graphics 于 1993 年开发,它以稳定和高性能的 64 位日志文件系统而自豪。XFS 文件系统旨在支持高达 18 EB 的大型文件系统和超大文件。该文件系统专为具有大型磁盘阵列、大型 CPU 以及需要存储大型文件的系统而设计。
XFS 以提供高 I/O 线程的可扩展性以及在处理大文件方面的出色性能而广为人知。
XFS 文件系统是 RHEL、CentOS 和其他 RHEL 发行版(如 Oracle Linux、Rocky Linux 和 AlmaLinux)中的默认文件系统。
主要特点包括:
- 支持更大的文件系统 - XfS 支持高达 1PiB 的文件系统大小,而 Ext4 支持高达 50TiB。支持的文件系统大小可能因 Linux 发行版版本而异。
- 延迟分配 - 使用惰性评估技术进行文件分配。块分配仅在数据最终刷新到磁盘时发生,有助于减少碎片并提高性能。
- 在线碎片整理和文件系统增长
- 复杂的元数据预读算法
- 元数据日志 - 元数据日志是一项功能,可在突然断电或系统崩溃的情况下保证文件系统的一致性。
- 配额日志——这消除了在系统崩溃后进行冗长的配额一致性检查的需要。
- 支持扩展属性——这使系统能够为每个文件关联几个额外的名称/值对。
- 在线碎片整理和增长 - 您可以在挂载和活动时对文件系统进行碎片整理和扩大。
- 存储可扩展性——XFS 文件系统在支持大型文件系统、大型目录和高达 EB 容量的海量文件方面发挥了惊人的作用。
- 高效的磁盘空间管理——XFS 还通过 B-Tree 索引为高效的磁盘空间管理提供可扩展性。
实现步骤
1、关闭selinux
2、修改/etc/fstab,对所选文件系统激活配额选项
3、重新挂载设备
4、用quotacheck命令生成基本配额文件(xfs跳过)
5、启动磁盘配额功能(xfs跳过)
6、用quota或者xfs_quota对具体用户或者目录设置配额
磁盘配额设置
确认selinux已关闭
sestatus -v
如果是enable表示开启,需要修改selinux的配置文件,设置完需重启,如图:
mount -o usrquota,grpquota /dev/sdb3 /opt #临时带配额参数挂载
写进/etc/fstab配置文件,实现永久挂载
xfs_quota -x -c 'limit -u bsoft=50M bhard=60M isoft=6 ihard=8 jerry' /opt/
xfs_quota命令
-x:启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用
-c:直接调用管理命令,如limit,report等
管理命令limit后相关:
-u:对用户限制
-g:对组限制
bsoft:磁盘容量软限制
bhard:磁盘容量硬限制
isoft:文件数量软限制
ihard:文件数量硬限制
给/opt授权
chmod 777 /opt
验证磁盘配额
quota -u [username]
dd if=/dev/zero of=/opt/123.txt bs=10M count=12
取消磁盘配额
xfs_quota -x -c 'disable -up' /data
tip:
/dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。
/dev/zero : 在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。
其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。