磁盘配额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
配额选项意义:
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目录是否为独立分区,此处不为独立分区,所以需要先把家目录设置成独立分区
此处创建一个/dev/sda6的分区,并且挂载到/mnt/home,然后赋值/home目录的所有文件到/mnt/home目录下面,然后把/dev/sda6目录挂载到/home,之后取消挂载/mnt/home,然后切换到普通用户测试家目录是否正常,如果一切正常就可以进行下一步的操作
启用配额挂载选项
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
edquota -p wan mage 让mage的用户复制wan用户的数据
setquota wangcai 80000 120000 0 0 /home
测试磁盘配额是否生效
查看用户的磁盘配额设置 quota wan
查看整个目录的磁盘配额设置repquota /home
用dd工具创建大文件写入数据测试
因为该用户限制的文件大小是,软的100M,硬的120M
当创建80M大小的文件的时候,系统不会有任何提示
当创建大于100M小于120M的文件的时候,系统会提示配额的块超标,但是依然能把文件写入
当创建大于120M的文件的时候,因为硬设置上限是120M,写入文件失败
取消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+
工作原理:把数据和校验数据平分存放在各硬盘,但是当有磁盘坏的时候,更换新的硬盘上面,需要校验同步数据,压力较大
RAID-6
读、写性能提升
可用空间:(N-2)*min(S1,S2,...)
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+
工作原理:把两个校验的数据和数据平分存放在其他硬盘
RAID-10
读、写性能提升
可用空间:50%
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+
工作原理:先做RAID1,再做RAID0
RAID-01
读、写性能提升
可用空间:50%
有容错能力:每组镜像最多只能坏一块
最少磁盘数:4, 4+
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]
支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
模式:
创建:-C
装配: -A
监控: -F
管理:-f, -r, -a
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,如下图所示
2.创建RAID1,-l 1表示raid 1,-n 2b表示使用两个磁盘,-x 1表示其中一个是备用的。
3.格式化成ext4格式 mkfs.ext4 /dev/md0
4.写入/etc/fstab
5.写入/etc目录下配置raid的信息,不然下次登陆的时候raid就没了
示例2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
创建3个2G大小的磁盘,system ID 为fd
2.创建raid5,-a yes自动创建raid设备文件,-l 5表示raid 5 ,-n 3表示使用3个磁盘,-c 256表示chunk块大小为256k
3.格式化/dev/md1
4.写入/etc/fstab配置挂载目录
逻辑卷管理器(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
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放大快照。
快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。
由于快照区与原本的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.先找两个空的磁盘
2.创建pv盘
3.创建pe大小为16M,名为testvg的vg
4.从testvg空间里面创建名字为testlv,大小为5G的lv盘,
5.格式化新建的lv盘
6.挂载
示例2:新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
示例3:扩展testlv至7G,要求archlinux用户的文件不能丢失fr
-L 可以直接指定扩展至的容量,或者使用 +2G 这样的方式来执行
-l +100%FREE DEVICE 可以直接扩容所有的容量
-r 等于 resize2fs,这一步必须执行,不然硬盘挂载显示跟扩容显示会不一致。
示例4:收缩testlv至3G,要求archlinux用户的文件不能丢失
示例5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能
确认现有的lv卷
创建快照,并且-p r的意思是这个快照只读,然后把快照挂载到/mnt/testlv-snapsht目录下面
可以发现这个目录下面有文件了,这些文件是跟/users目录下面是一样的
查看一下快照,可以发现有两个快照
此时可以发现,testlv有一个test-snapshot的快照lv
此时查看快照lv,可以看见此快照是为testlv的做快照。虽然这个磁盘上面显示有东西,但是大家仔细看的话,会发现下面Allocated to snapshot是0,说明快照里面其实没有文件,文件夹里面的文件只是暂时映射/users里面的文件,好让用户能看见当前备份的文件。
此时查看两个目录,并且把testlv挂载的目录/users里面的所有文件删除掉。但是我们发现快照目录的文件依然存在!这就相当于做了备份,如果需要的话,我们只需要从快照的目录里面把备份文件复制出来即可。
此时查看快照的lv,会发现已经占用了一点空间,说明快照已经保存了我们已经修改过的文件,所以就占用掉了快照lv卷的一部分空间。此时,说明快照的实验已经成功!
示例6:删除容量小的pv,并且保留数据
创建3个pv
用/dev/sdd1创建一个testvg
创建一个lv
挂载lv到/users目录下面,并且复制文件到该目录下面
因为原有的1g的vg太小,现在再加一个1g的vg,一共2g的vg
lv卷扩容到最大的2g
由于2g的空间用完了,这时候,我们想着淘汰这两个 1g的磁盘,此时加入一个4g的磁盘/dev/sdb1
为了保留vgtest里面的数据,先把旧的pv卷里面/dev/sdc1的数据移动到其他盘
移动完数据以后,删除/dev/sdc1
删除/dev/sdc1以后,可以看到只剩下两个pv卷,vg卷也对应减少到4g
然后再把/dev/sdd1的数据移动到其他空闲的pv,然后再删除该pv
把其他盘删除以后,我们看看lv卷里面,发现数据还在,实验成功