磁盘配额Quota

磁盘配额(Quota)的作用:

  在Linux系统中,由于是多用户、多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占掉了硬盘空间的话,那肯定影响其他用户的使用权限。因此管理员应该适当限制硬盘的空间给用户,以妥善分配系统资源。


磁盘配额的一般用途

   比较常使用的几种用途:

    针对www server,例如:每个人的网页空间的容量限制。

    针对mail server,例如:每个人的邮件空间限制。

    针对file server,例如:每个人最大的可用网络磁盘空间。

    限制某一用户组所能使用的最大磁盘配额


配置配额系统:

   在内核中执行

   以整个文件系统为单位启用(即该目录必须有独立的挂载目录)

   对不同组或者用户的策略不同

   根据块或者节点进行限制

    执行软限制(soft limit)

    硬限制(hard limit)


初始化命令:

   分区挂载选项:usrquota、grpquota

   初始化数据库:quotacheck


为用户设定配额

   开启或者取消配额:quotaon、quotaoff

   直接编辑配额:edquota username

   在shell中直接编辑:

    etquota usename 4096 5120 40 50 /foo

   定义原始标准用户

    edquota -p user1 user2


配额选项意义:

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第1张图片

User:用户名

---Block limits

used:已使用的磁盘空间

soft:软上限,默认7天内可以超过这个磁盘上限

hard:硬上限,一定不能超过的磁盘上限

grace:当存储超过soft的上限的时候,这个就是倒计时


---File limits

used:已经存放的文件的数量

soft:文件的软上限,跟上面的soft差不多意思

hard:文件的硬上限,跟上面的soft差不多意思

grace:当文件超过soft的上限的时候,这个就是倒计时


报告配额状态

   用户调查:quota USERNAME

   配额概述:repquota /MOUNTZ_POINT

   其它工具:warnquota


示例:给/home目录创建一个磁盘配额

确认/home目录是否为独立分区,此处不为独立分区,所以需要先把家目录设置成独立分区

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第2张图片

此处创建一个/dev/sda6的分区,并且挂载到/mnt/home,然后赋值/home目录的所有文件到/mnt/home目录下面,然后把/dev/sda6目录挂载到/home,之后取消挂载/mnt/home,然后切换到普通用户测试家目录是否正常,如果一切正常就可以进行下一步的操作

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第3张图片

启用配额挂载选项

vim /etc/fstab  加上,usrquota,grpquota

创建配额数据库

quotacheck  -cug /home,-c表示创建配额数据,-u表示user,-g表示组

如图,centos6创建的时候提示权限受限,这个时候输入setenforce 0可以暂时解除限制,这个限制是SeLinux限制的

启用数据库

quotaon -p /home 查看是否启用数据库

quotaon  /home 启用数据库

配置配额项

edquota wan

编辑soft为100000,约为100m,hard为120000约为120m     

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第4张图片

edquota -p wan mage 让mage的用户复制wan用户的数据

wKiom1fFUF2CPB8PAAAQcHs34nY934.png

wKioL1fFUF2CPT6AAAAVsgCudpQ378.png

setquota wangcai 80000 120000 0 0 /home

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第5张图片

测试磁盘配额是否生效

查看用户的磁盘配额设置 quota wan

查看整个目录的磁盘配额设置repquota /home

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第6张图片

用dd工具创建大文件写入数据测试

因为该用户限制的文件大小是,软的100M,硬的120M

当创建80M大小的文件的时候,系统不会有任何提示

当创建大于100M小于120M的文件的时候,系统会提示配额的块超标,但是依然能把文件写入

当创建大于120M的文件的时候,因为硬设置上限是120M,写入文件失败

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第7张图片

取消quota


磁盘阵列---RAID


什么是RAID?

RAID:Redundant Arrays of Inexpensive(Independent)Disks

1988年由加利福尼亚大学伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”。

多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供


常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD


RAID作用

提高IO能力:

   磁盘并行读写

提高耐用性;

   磁盘冗余来实现

级别:多块磁盘组织在一起的工作方式有所不同


RAID实现的方式:

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID:主板集成RAID控制器

   安装OS前在BIOS里配置

软件RAID:通过OS实现


RAID级别及其作用

RAID-0:条带卷,strip

    读、写性能提升;

    可用空间:100%全部磁盘总容量

    无容错能力

    最少磁盘数:2, 2

工作原理:把数据平分放在各硬盘空间,RAID-0磁盘当其中一个磁盘坏掉的时候,所以的数据都会丢失



RAID-1: 镜像卷,mirror

    读性能提升、写性能略有下降;

    可用空间:50%磁盘总容量

    有冗余能力

    最少磁盘数:2, 2N

工作原理:把数据同时存放在多个硬盘冗余备份


RAID-4

    多块数据盘异或运算值,存于专用校验盘

    有容错能力

    最少磁盘数:3

    容量:N-1

工作原理:其中一块硬盘用来做校验,其他盘用户分散存储数据,但是当有磁盘坏的时候,更换新的硬盘上面,需要校验同步数据,压力较大,校验盘压力较大容易坏


RAID-5:

    读、写性能提升

    可用空间:(N-1)*min(S1,S2,...)

    有容错能力:允许最多1块磁盘损坏

    最少磁盘数:3, 3+

工作原理:把数据和校验数据平分存放在各硬盘,但是当有磁盘坏的时候,更换新的硬盘上面,需要校验同步数据,压力较大

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第8张图片

RAID-6

    读、写性能提升

    可用空间:(N-2)*min(S1,S2,...)

    有容错能力:允许最多2块磁盘损坏

    最少磁盘数:4, 4+

工作原理:把两个校验的数据和数据平分存放在其他硬盘

RAID-10

    读、写性能提升

    可用空间:50%

    有容错能力:每组镜像最多只能坏一块

    最少磁盘数:4, 4+

工作原理:先做RAID1,再做RAID0

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第9张图片

RAID-01

    读、写性能提升

    可用空间:50%

    有容错能力:每组镜像最多只能坏一块

    最少磁盘数:4, 4+

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第10张图片


RAID-50

    读、写性能提升

     有容错能力,每组镜像最多只能坏一块

    可用空间:N-2

    最少磁盘数:6, 6+

工作原理:先做RAID5,再做RAID0



RAID7:可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的RAID模式


JBOD:Just a Bunch Of Disks

功能:将多块磁盘的空间合并一个大的连续空间使用

可用空间:sum(S1,S2,...)


软RAID

   mdadm:为软RAID提供管理界面

   为空余磁盘添加冗余

   结合内核中的md(multi devices)

   RAID设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3等等


软件RAID的实现

   mdadm:模式化的工具

   命令的语法格式:mdadm[mode] [options]

   支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10

   模式:

    创建:-C

    装配: -A

    监控: -F

    管理:-f, -r, -a

   : /dev/md#

   : 任意块设备


madam常用选项

   -C: 创建模式

   -n #: 使用#个块设备来创建此RAID

   -l #:指明要创建的RAID的级别

   -a {yes|no}:自动创建目标RAID设备的设备文件

   -c CHUNK_SIZE: 指明块大小

   -x #: 指明空闲盘的个数

   -D:显示raid的详细信息;

    mdadm -D /dev/md#

   管理模式:

    -f: 标记指定磁盘为损坏

    -a: 添加磁盘

    -r: 移除磁盘

   观察md的状态:

    cat /proc/mdstat


软RAID配置示例

使用mdadm创建并定义RAID设备

   #mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

用文件系统对每个RAID设备进行格式化

   #mke2fs -j /dev/md0

使用mdadm检查RAID设备的状况

   #mdadm --detail|D /dev/md0

增加新的成员

   #mdadm –G /dev/md0 –n4 -a /dev/sdf1


软RAID测试和修复

模拟磁盘故障

   #mdadm /dev/md0 -f /dev/sda1

移除磁盘

   #mdadm /dev/md0 –r /dev/sda1

从软件RAID磁盘修复磁盘故障

   替换出故障的磁盘然后开机

   在备用驱动器上重建分区

   mdadm /dev/md0 -a /dev/sda1

mdadm、cat /proc/mdstat及系统日志信息


示例1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录


1.首先创建3个1G的磁盘,System ID为fd,如下图所示

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第11张图片

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第12张图片

2.创建RAID1,-l 1表示raid 1,-n 2b表示使用两个磁盘,-x 1表示其中一个是备用的。

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第13张图片

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第14张图片

wKioL1fFhY_wcmyBAABWSZq3vHA762.png

3.格式化成ext4格式 mkfs.ext4 /dev/md0

wKioL1fFfT7SIzVmAAATyaR4u4Q652.png

4.写入/etc/fstab

5.写入/etc目录下配置raid的信息,不然下次登陆的时候raid就没了

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第15张图片


示例2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

  1. 创建3个2G大小的磁盘,system ID 为fd

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第16张图片

2.创建raid5,-a yes自动创建raid设备文件,-l 5表示raid 5 ,-n 3表示使用3个磁盘,-c 256表示chunk块大小为256k

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第17张图片

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第18张图片

3.格式化/dev/md1

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第19张图片

4.写入/etc/fstab配置挂载目录

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第20张图片5.写入/etc/mdadm.conf文件

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第21张图片


逻辑卷管理器(LVM)

什么是LVM?

   LVM(Logical Volume Manager,逻辑卷管理)的重点在于可以弹性的调整filesystem的容量!而并非在于数据的存储效率及安全上面。需要文件的读写效能或者是数据的可靠性是RAID所考虑的问题。LVM可以整合多个尸体partition在一起,让这些partition看起来就像是一个磁盘一样。而且,还可以在未来新增或移除其他的实体partition到这个LVM管理的磁盘当中,如此一来,整个磁盘空间的使用上,具有相当的弹性。

LVM允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小

LVM允许在多个物理设备间重新组织文件系统

   将设备指定为物理卷

   用一个或者多个物理卷来创建一个卷组

   物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的

   在物理卷上创建的逻辑卷是由物理区域(PE)组成

   可以在逻辑卷上创建文件系统


LVM介绍

LVM: Logical Volume Manager,Version: 2

dm: device mapper:将一个或多个底层块设备组织成一个逻辑设备的模块

设备名:/dev/dm-#

软链接:

   /dev/mapper/VG_NAME-LV_NAME

   /dev/mapper/vol0-root

   /dev/VG_NAME/LV_NAME    

   /dev/vol0/root

wKioL1fH_XDQTZCpAAAgYgaJqAg699.png

LVM可以弹性的更改LVM的容量

通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LV中以加大容量


删除逻辑卷

注意:删除逻辑卷必须先删除LV,再删除VG,最后删除PV


pv管理工具


显示pv信息

   pvs:简要pv信息显示

   pvdisplay


创建pv

   pvcreate /dev/DEVICE


复制老卷组的内容到其他卷组

   pvmove PhysicalDevicePath


删除pv

   pvremove


vg管理工具


显示卷组

   vgs

   vgdisplay


创建卷组

  vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

    -s 指定块大小,默认是4Mib


管理卷组

   扩容 vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

   减容 vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]


删除卷组

   先做vgmove,再做pvremove


lv管理工具


显示逻辑卷

   lvs

   Lvdisplay


创建逻辑卷

   lvcreate -L #[mMgGtT] -n NAME VolumeGroup


删除逻辑卷

   lvremove /dev/VG_NAME/LV_NAME


重设文件系统大小

   fsadm [options] resize device [new_size[BKMGTEP]]

   resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]


lv扩展和缩减逻辑卷

扩展逻辑卷:

   lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

    此处-L可以指定容量,或者使用+1G这种表示方式来扩容

   resize2fs /dev/VG_NAME/LV_NAME

    扩容后需要同步磁盘,不然df挂载显示里面还是扩容前的容量


缩减逻辑卷:(必须按照以下步骤先后来操作,不然会丢失数据)

   1.umount /dev/VG_NAME/LV_NAME

   2.e2fsck -f /dev/VG_NAME/LV_NAME

   3.resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

   4.lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME


创建逻辑卷实例

创建物理卷

   pvcreate /dev/sda3

为卷组分配物理卷

   vgcreate vg0 /dev/sda3

从卷组创建逻辑卷

   lvcreate -L 256M -n data vg0

   mke2fs -t ext4 /dev/vg0/data

   mount /dev/vg0/data /mnt/data


逻辑卷管理器快照


快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝

对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。

快照只有在它们和原来的逻辑卷不同时才会消耗空间。

   在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

   当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。

   快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

   建立快照的卷大小只需要原始逻辑卷的15%~20%就够了。也可以使用lvextend放大快照。


快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第22张图片

由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须要要在同一个VG上!系统恢复的时候的文件数量不能高于快照区的实际容量。


使用LVM快照

为现有逻辑卷创建快照

   lvcreate -l 64 -s -n snap-data -p r /dev/vg0/data

挂载快照

   mkdir -p /mnt/snap

   mount -o ro /dev/vg0/snap-data /mnt/snap    

删除快照

   umount /mnt/databackup

   lvremove /dev/vg0/databackup


LVM实战示例

示例1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

1.先找两个空的磁盘

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第23张图片

2.创建pv盘

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第24张图片

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第25张图片

3.创建pe大小为16M,名为testvg的vg

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第26张图片

4.从testvg空间里面创建名字为testlv,大小为5G的lv盘,

5.格式化新建的lv盘

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第27张图片

6.挂载

wKiom1fH3vnzH8cuAAAU10zG7Pw648.png

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第28张图片

wKiom1fH3vnikLpBAAAMOsoJQVM569.png

wKioL1fH3vrDZMDzAAAOlmLJ_s0621.png


示例2:新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

wKiom1fH4rjyM8hDAAANYDHYW0A510.png

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第29张图片


示例3:扩展testlv至7G,要求archlinux用户的文件不能丢失fr

-L 可以直接指定扩展至的容量,或者使用 +2G 这样的方式来执行

-l +100%FREE DEVICE 可以直接扩容所有的容量

-r 等于 resize2fs,这一步必须执行,不然硬盘挂载显示跟扩容显示会不一致。

wKioL1fH-PORkDavAAARr4QhhKE626.png


示例4:收缩testlv至3G,要求archlinux用户的文件不能丢失


示例5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

确认现有的lv卷

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第30张图片

创建快照,并且-p r的意思是这个快照只读,然后把快照挂载到/mnt/testlv-snapsht目录下面

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第31张图片

可以发现这个目录下面有文件了,这些文件是跟/users目录下面是一样的

wKiom1fILorz2QdBAAAcxtjyxck703.png

查看一下快照,可以发现有两个快照

wKiom1fILozSiZx5AAAcqpxhrz8529.png

此时可以发现,testlv有一个test-snapshot的快照lv

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第32张图片

此时查看快照lv,可以看见此快照是为testlv的做快照。虽然这个磁盘上面显示有东西,但是大家仔细看的话,会发现下面Allocated to snapshot是0,说明快照里面其实没有文件,文件夹里面的文件只是暂时映射/users里面的文件,好让用户能看见当前备份的文件。

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第33张图片

此时查看两个目录,并且把testlv挂载的目录/users里面的所有文件删除掉。但是我们发现快照目录的文件依然存在!这就相当于做了备份,如果需要的话,我们只需要从快照的目录里面把备份文件复制出来即可。

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第34张图片

此时查看快照的lv,会发现已经占用了一点空间,说明快照已经保存了我们已经修改过的文件,所以就占用掉了快照lv卷的一部分空间。此时,说明快照的实验已经成功!

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第35张图片


示例6:删除容量小的pv,并且保留数据

创建3个pv

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第36张图片

用/dev/sdd1创建一个testvg

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第37张图片

创建一个lv

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第38张图片

挂载lv到/users目录下面,并且复制文件到该目录下面

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第39张图片

因为原有的1g的vg太小,现在再加一个1g的vg,一共2g的vg

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第40张图片

lv卷扩容到最大的2g

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第41张图片

由于2g的空间用完了,这时候,我们想着淘汰这两个 1g的磁盘,此时加入一个4g的磁盘/dev/sdb1

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第42张图片

为了保留vgtest里面的数据,先把旧的pv卷里面/dev/sdc1的数据移动到其他盘

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第43张图片

移动完数据以后,删除/dev/sdc1

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第44张图片

删除/dev/sdc1以后,可以看到只剩下两个pv卷,vg卷也对应减少到4g

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第45张图片

然后再把/dev/sdd1的数据移动到其他空闲的pv,然后再删除该pv

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第46张图片

把其他盘删除以后,我们看看lv卷里面,发现数据还在,实验成功

8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用_第47张图片