首先,我们都知道Linux是多用户多任务的操作系统。所以可能出现多人共用一块磁盘的情况,如果其中有几个少数使用者占用了大量的硬盘空间的话,那势必会压缩其他使用者的使用空间。因此管理员因该适当的限制硬盘的容量给使用者,以妥善分配系统资源。
一、如何进行磁盘配额(Quota)
- Quota 的一般用途
quota 比较常使用的几个情况是:
- 针对 WWW server ,例如:每个人的网页空间的容量限制!
- 针对 mail server,例如:每个人的邮件空间限制。
- 针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见)
新版的 CentOS 使用的 xfs 不但无须额外的 quota 纪录档,也能够针对文件 系统内的不同目录进行配置。
- Quota 的规范设置项目:
quota 这玩意儿针对 XFS filesystem 的限制项目主要分为下面几个部分:
- 分别针对使用者、群组或个别目录 (user, group & project):
XFS 文件系统的 quota 限制中,主要是针对群组、个人或单独的目录进行磁盘使用率的限 制!
- 容量限制或文件数量限制 (block 或 inode):
说到文件系统主要规划为存放属性的 inode 与实际文件数据 的 block 区块,Quota 既然是管理文件系统,所以当然也可以管理 inode 或 block ! 这两 个管理的功能为:
- 限制 inode 用量:可以管理使用者可以创建的“文件数量”;
- 限制 block 用量:管理使用者磁盘容量的限制,较常见为这种方式。
- 柔性劝导与硬性规定 (soft/hard):
既然是规范,当然就有限制值。不管是 inode/block ,限制值都有两个,分别是 soft 与 hard。 通常 hard 限制值要比 soft 还要高。举例来说,若限制项目为 block ,可以限制 hard 为 500MBytes 而 soft 为 400MBytes。这两个限值的意义为:
- hard:表示使用者的用量绝对不会超过这个限制值,以上面的设置为例, 使用者所能使 用的磁盘容量绝对不会超过 500MBytes ,若超过这个值则系统会锁住该用户的磁盘使用 权;
- soft:表示使用者在低于 soft 限值时 (此例中为 400MBytes),可以正常使用磁盘,但 若超过 soft 且低于 hard 的限值 (介于 400~500MBytes 之间时),每次使用者登陆系统 时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间 (grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下, 则宽 限时间会停止。
- 会倒数计时的宽限时间 (grace time):
1、限制用户和群组磁盘空间
修改文件系统:
语法格式:xfs_quota -x -c "指令" [挂载点]
选项与参数:
-x :专家模式,后续才能够加入 -c 的指令参数!
-c :后面加的就是指令,这个小节我们先来谈谈数据回报的指令
指令:
print :单纯的列出目前主机内的文件系统参数等数据
df :与原本的 df 一样的功能,可以加上 -b (block) -i (inode) -h (加上单位) 等
report:列出目前的 quota 项目,有 -ugr (user/group/project) 及 -bi 等数据
state :说明目前支持 quota 的文件系统的信息,有没有起动相关项目等
语法格式:xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name"
语法格式:xfs_quota -x -c "timer [-ug] [-bir] Ndays"
选项与参数:
limit :实际限制的项目,可以针对 user/group 来限制,限制的项目有
bsoft/bhard : block 的 soft/hard 限制值,可以加单位
isoft/ihard : inode 的 soft/hard 限制值
name : 就是用户/群组的名称啊!
timer :用来设置 grace time 的项目喔,也是可以针对 user/group 以及 block/inode 设置
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
eg1:设置好用户们的 block 限制值
eg2:设置好 myquotagrp群组 的 block 限制值
eg3: 设置一下 grace time 变成 14 天
2、限制目录磁盘空间
修改配置文件
规范目录、专案名称(project)与专案 ID
指定专案识别码与目录的对应在 /etc/projects
规范专案名称与识别码的对应在 /etc/projid
初始化专案名称
实际设置规范与测试: 要将 /home/myquota 指定为 500M 的容量限制,那假设到 450M 为 soft 的限制好了
3、XFS quota 的管理与额外的指令
- disable:暂时取消 quota 的限制,但其实系统还是在计算 quota 中,只是没有管制而已!应该算最有用的功能!
- enable:就是回复到正常管制的状态中,与 disable 可以互相取消、启用!
- off:完全关闭 quota 的限制,使用了这个状态后,你只有卸载再重新挂载才能够再次的启动 quota !也就是说, 用了 off 状态后,你无法使用 enable 再次复原 quota 的管制!注意不要乱用这个状态!一般建议用 disable 即可,除非你需要执行 remove 的动作!
- remove:必须要在 off 的状态下才能够执行的指令~这个 remove 可以“移除”quota 的限制设置,例如要取消 project 的设置, 无须重新设置为 0 。只要 remove -p 就可以 了!
eg1:暂时关闭 XFS 文件系统的 quota 限制功能
二、软件磁盘列阵(RAID)
RAID-0 (等量模式, stripe):性能最佳
RAID-1 (映射模式, mirror):完整备份
RAID 1+0,RAID 0+1
RAID 5:性能与数据备份的均衡考虑
Spare Disk:预备磁盘的功能:
1、软件磁盘列阵的设置
语法格式:mdadm --detail /dev/md0
mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk=NK --raid-devices=N --spare-devices=N /dev/sdx /dev/hdx...
选项与参数:
--create :为创建 RAID 的选项;
--auto=yes :决定创建后面接的软件磁盘阵列设备,亦即 /dev/md0, /dev/md1...
--chunk=Nk :决定这个设备的 chunk 大小,也可以当成 stripe 大小,一般是 64K 或 512K。
--raid-devices=N :使用几个磁盘 (partition) 作为磁盘阵列的设备
--spare-devices=N :使用几个磁盘作为备用 (spare) 设备
--level=[015] :设置这组磁盘阵列的等级。支持很多,不过建议只要用 0, 1, 5 即可
--detail :后面所接的那个磁盘阵列设备的详细信息
三、逻辑卷管理
1、什么是 LVM: PV, PE, VG, LV 的意义
LVM 的全名是 Logical Volume Manager,中文可以翻译作逻辑卷轴管理员。LVM 的作法是将几个实体的 partitions (或 disk) 通过软件组合成为一块看起来是独立的大磁盘 (VG) ,然后将这块大 磁盘再经过分区成为可使用分区 (LV), 最终就能够挂载使用了。
- Physical Volume, PV, 实体卷轴
实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别 码),然后再经过 pvcreate 的指令将他转成 LVM 最底层的实体卷轴 (PV),,之后才能够将 这些 PV 加以利用。
- Volume Group, VG, 卷轴群组
所谓的 LVM 大磁盘就是将许多 PV 整合成这个 VG 的东西就是啦!所以 VG 就是 LVM 组合 起来的大磁盘!
- Physical Extent, PE, 实体范围区块
LVM 默认使用 4MB 的 PE 区块,他是整个 LVM 最小的储存区块,也就是说,其实我们的文件数据都是借由写入 PE 来处理的。
- Logical Volume, LV, 逻辑卷轴
最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分区。LV 不可以随意指定大小,既然 PE 是整个 LVM 的最小储存单位,那么 LV 的大小就与在此 LV 内的 PE 总数有关。
2、LVM的实际操作
1. PV 阶段
要创建 PV 其实很简单,只要直接使用 pvcreate 即可
- pvcreate :将实体 partition 创建成为 PV ;
- pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
- pvdisplay :显示出目前系统上面的 PV 状态;
- pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
2. VG 阶段
- vgcreate :就是主要创建 VG 的指令!他的参数比较多。
- vgscan :搜寻系统上面是否有 VG 存在?
- vgdisplay :显示目前系统上面的 VG 状态;
- vgextend :在 VG 内增加额外的 PV ;
- vgreduce :在 VG 内移除 PV;
- vgchange :设置 VG 是否启动 (active);
- vgremove :删除一个 VG !
语法格式:vgcreate [-s N[mgt]] VG名称 PV名称
选项与参数:
-s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)
3. LV 阶段
- lvcreate :创建 LV !
- lvscan :查询系统上面的 LV ;
- lvdisplay :显示系统上面的 LV 状态!
- lvextend :在 LV 里面增加容量!
- lvreduce :在 LV 里面减少容量;
- lvremove :删除一个 LV !
- lvresize :对 LV 进行容量大小的调整!
语法格式:lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
选项与参数:
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最相近的容量。
-l :后面可以接 PE 的“个数”,而不是数量。若要这么做,得要自行计算 PE 数。
-n :后面接的就是 LV 的名称!
4.文件系统阶段
通过这样的功能,我们现在已经创建好一个 LV 了!你可以自由的应用 /srv/lvm 内的所有资源。
3、放大 LV 容量
放大文件系统时, 需要下面这些流程的:
- VG 阶段是否有剩余的容量,没有就加硬盘。
- LV 阶段产生更多的可用容量:如果 VG 的剩余容量足够了, 此时就可以利用 lvresize 这 个指令来将剩余容量加入到所需要增加的 LV 设备内。
- 文件系统阶段的放大。
文件系统的容量的更新可以线上直接处理,并不需要特别给他 umount,然后使用 xfs_growfs 来处理一下。