您的位置:首页 > 运维架构 > Linux

Linux 磁盘管理 高级篇 -- quota,RAID,LVM

2017-08-24 14:47 471 查看
1 概述本文对配额,RAID,LVM的概念和具体创建过程做了介绍2 配额2.1 配额概念
在内核中执行以文件系统为单位启用对不同组或者用户的策略不同根据块或者节点进行限制执行软限制(soft limit)硬限制(hard limit)实现控制用户使用磁盘空间,防止某个用户无限制使用磁盘空间,对系统造成损害配额要对磁盘独立分区进行控制,而且只能针对文件系统来进行配额,不能对文件夹进行控制,文件系统挂载选项要具备quota功能,在fstab里添加usrquota,grpquota2.2 搬移目录数据到独立分区假设原来家目录/home和根目录在同一磁盘上,当用户在自己家目录下无限使用空间,可能会导致磁盘空间不够,对系统造成严重的损害,因此,迁移旧磁盘/home的数据到独立的磁盘上,步骤如下1新建一个磁盘/dev/sdb1,格式化后分区挂载到系统上,如挂载点/mnt/home2数据迁移完成了,发通知告诉所有用户说明我们什么时间要维护系统,如取消旧目录/home挂载,系统暂时不能使用3切换到单用户模式下进行操作init 1,确保所有用户不再对/home继续数据写入。4迁移数据cp-a/home/* /mnt/home注意。这里我们明确home下都是用户的家目录,没有隐藏文件,所以我们就用/home/*形式进行拷贝5建议提前做备份,如果确认数据迁移都完成,第4步操作完成后,数据都在磁盘/dev/sdb1下了清空旧目录数据rm-rf/home/*6.卸载掉/dev/sdb1在原来的挂载点/mnt/home。重新挂载到/home下mount/dev/sdb1 /mnt/homeumount/dev/sdb1/home这一步建议写入配置文件/etc/fstab里vim/etc/fstab/dev/sdb1/home ext4 defaults 0 0到这里数据迁移完成,/home已经在独立的分区/dev/sdb1上2.3 启用分区配额功能1.在fstab里对应挂载分区的挂载选项添加usrquota,grpquota生效配置,重新挂载分区mount –a remount /home2创建磁盘配额数据库配额是放到二进制的数据库里quotacheck -cug/home在home里会生成两个quota的二进制文件,c是创建的意思,u对应usrquota,g对应grpquota执行语句后,发现在/home下生成了两个二进制的文件,执行命令file /aquota.*查看新生成的文件的类型如果出现如下的报错,请坚持selinux是否开启,getenforce,如果开启请关闭,setenforce0


3开启数据库quotaon /home4查看配额设置是否已经生效,如果显示on,表示已经生效quotaon -p /home5针对每个用户设置配额这里的blocks单位就是1k。block是目前已经暂用多少空间,不可以通过设置得到。
inodes是当前已经创建文件的数量,后面的hard soft才是对文件数的现在,不可以通过设置得到。grace是指宽限期,超出soft现在后,才会出现的日期,表示超过soft多少天后,即使没有超过hard现在,超过时间也是会导致不能创建任何的文件。可以通过edquota -t这个命令修改block或者是inode的值edquota wang//针对sunny用户来修改配额


另外,edquota是交互式的命令,可以通过setquota实现非交换的配额设置
setquota sunny80000 100000 175 180 /home前面两个数字80000100000分别对应block的soft和hard,后面的0 0是inode的现在,0 0表示不对文件数进行限制到这里,quato针对用户的设置已经完成。接下来测试6测试切换到对应用户账号,然后在家目录下创建文件su -wangdd if=/dev/zero of=test1bs=1M count=65正常创建dd if=/dev/zero of=test2bs=1M count=85出现报警,但是还是可以成功dd if=/dev/zero of=test2bs=1M count=105失败,文件大小为上限100M如果要针对用户去掉配额限制,只要把配合对应的hard和soft都调整为0就可以文件占用的空间的大小是根据所有者来设置的。以下例子,把f1所有者改为mage后,可以看到files数量就少了一个


edquota –p wang mage 复制wang的磁盘配额设置给到mage这个账号


2.4针对组进行配额
组管理配额是针对整个组所有用户的空间或者文件数量使用总和进行限制对组quota进行配置edquota -g quota,限制如下


实验截图




管理员账号下repquato可以查看配额使用情况


2.5 xfs文件系统配额
XFS基于目录配额的Project Quota配置,和ext4是根据用户和组创建方法不一样。关于xfs_quota的详细介绍,建议manxfs_quota查看,里面有详细的例子和各个参数的介绍/etc/projectsMapping ofnumeric project identifiers to directories trees./etc/projidMapping ofnumeric project identifiers to project names.这里简要介绍步骤1.分区和挂载见ext4格式的例子2.建立一个使用配置文件的ProjectQuota文件目录并设置配额mkdir -p /home/appecho 42:/home/app >>/etc/projectsecho application:42 >>/etc/projidxfs_quota -x -c 'project -s application'/homexfs_quota -x -c 'limit -p bhard=100Mapplication' /home/xfs_quota -x -c 'report /home/app'xfs_quota -x -c 'limit -p bsoft=80Mapplication' /home/3.查看配额报告信息xfs_quota -x -c 'report /home/app


4. 测试,在/app下创建大于100M的文件,就会报警


3 RAID
3.1 RAID概念raid每个硬盘取出的空间大小是要一致的假设有一个3个硬盘组成的raid0,一个100M的文件要放到raid0里,该大文件会分成很多chunk(小块),然后分别将这些块放到raid的三块硬盘上写入。raid1防止的是硬件损坏,如果在其中一块盘修改数据,另一块盘也会被修改。同步的。raid4具有容错性和性能提高,一块当做校验的硬盘,但是raid4的问题是校验位固定往一块硬盘上写入的,根据经验,该校验位的硬盘损坏频率很高。raid5.和raid4差不多,使用率也是(n-1)/n,但是校验位是平均放到其他硬盘上的,没有固定在一块硬盘,这样同一机器上硬盘的使用频率就差不多,所以损坏频率就都一样,也叫带有奇偶校验位的磁带机。当坏掉一块硬盘后,服务器的性能会下降,因为要去反正算错校验位的数据,对系统造成了压力。所以为了应对这种情况,raid5还有一个spare disk,要在机器上准备一个备用的硬盘。平常不参与raid工作。即spare disk。当发现有故障的硬盘,这块备用的硬盘会立即使用raid6有两个校验位.使用率为(n-2)/n。坏掉两块硬盘也不会有问题。raid10,先1后0,假设8块盘,先两两做成1,再把4组做成0,相对raid01容错性好,所以生产环境一般用raid10



raid01即先0后1,假设有8块硬盘,先4块4块做成raid0,然后再把两组raid0做成了raid1.



3.2 创建raid5
1.做raid先分区,类型选择raid注意,这里如果整块硬盘都拿来做raid,可以不用做分区,更不存在选择类型raid。测试一下整块盘拿来用的情况2.mdadm –C创建mdadm-C /dev/md0-a yes-l 5-n 3-x 1 /dev/sd{c,d,e,f}1注意,这个创建过程比较慢可以用cat/ proc/mdstatmdadm -D /dev/md0查看raid的状态3.写入配置文件,系统默认没有mdadm.conf的文件,需要手动生成mdadm -Ds> /etc/mdadm.conf这里的s是小写字母s,这个配置文件如果不生成,那么当禁用raid后,想要再次重启就起不来了/etc/mdadm.conf语法如下


4. 格式化新的raid分区文件
mkfs.ext4/dev/md0


5 挂载
mount /dev/md0 /mnt/raid写入配置文件vim /etc/fstab/dev/md0 /mnt/raid ext4 defaults 0 0到这里raid就创建完成了。
3.3 测试性能和容错性3.3.1 测试写性能raid5写性能并没有提高太多dd if=/dev/zero of=/dev/raid/bigfile bs=1M count=10243.3.2 测试读性能raid5读性能相对普通硬盘有较大的提高dd if=/dev/raid/bigfile of=/dev/null3.3.3 测试容错性模拟逻辑故障mdadm /dev/md0-f/dev/sdc1


移除损坏的sdc1mdadm /dev/md0-r/dev/sdc1
添加硬盘mdadm /dev/md0- a /dev /sdc1模拟物理性的损坏,硬盘故障后,raid的性能会严重降低直接移除一个硬盘,在虚拟机上,直接移除掉一块硬盘,如果要添加回去用,添加硬盘后,执行mdadm /dev/md0 -a /dev /sdc13.4 增加新的成员#mdadm –G /dev/md0 –n4 -a /dev/sdf1这样就会在增加一块硬盘到raid里,由原来的3块硬盘变成了4块硬盘做raid5.如果要加一块是spare,即备用的盘,spare状态的盘可以有很多块,执行如下语句mdadm /dev/md0 -a /dev/sdf2.3.5 停止raid1.取消挂载,umount,同时把配置文件/etc/fstab里的对应md0信息删掉2.停止raid ,mdadm -S /dev/md0//注意,这里-S是大写字母S这里如果要重新激活,可以用语句mdadm -A -s /dev/md0 激活,然后才能重新挂载3.清掉生成的配置文件rm –rf /etc/mdadm.conf4.清除raid上元数据mdadm --zero-superblock /dev/sd{b,c,d,e}删掉raid后,raid的信息还在,如果不清,这些盘就不能用,重启机器后这些盘还会启用raid,所以要清除raid数据。注意,如果这些数据不清除,即使做了1—3步骤,当重启机器后,就会变成md127的raid。处理办法是先停掉md127: mdadm-S /dev/md127,然后在通过blkid把查出来之前做raid的盘全部用第4步的方法清空。这里如果没有清干净,下次重新给这些盘分区,分区还是会显示旧的raid原信息。所以拿掉raid建议都做一下这步,如果比较顽强,重启后还是出现,再次执行这个清空步骤,把对应的分区raid旧的元数据清掉清除raid,如果停raidmd0后,执行mdadm--zero-superblock /dev/sd{b,c,d,e},这个raid md0又复活了,如下,多次停掉还是一样的问题,这个情况可能是raid里某个分区处于忙碌状态,导致整个raid都不能被清空,建议直接删掉raid对应的每个分区,然后同步硬盘,看看是否同步磁盘partprobe后,看看磁盘是否正常被清掉了,用blkid查看对应分区的相同UUID是否没了,如果没了,就正常。如果同步还是有问题,在具体看是哪个盘有问题,可以重复清空对应分区的元数据,已经删掉分区进行同步处理


备注,特殊情况下,清掉raid有时比较麻烦,可以通过清空元数据,重启,清空对应分区,三个方式进行处理。如果再次重启,没有启动raid,说明已经完成卸载raid的工作。
3.6 创建raid10以下仅介绍创建raid的方法,分区,格式化和挂载需读者自行创建方法一,先建1后建0mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdb{1,2}mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdc{1,2}
mdadm -C /dev/md2 -a yes -l 0 -n 2 /dev/md{0,1}
方法二,直接创建mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sdb{1,2} /dev/sdc{1,2}4 LVM
4.1 LVM概念创建成物理卷后相当于给分区贴了一个标签,告诉系统这些硬盘以后可以用来创建LV,然后要把物理卷组合在一起,创建卷组,卷组的空间为物理卷空间的总和。然后再将卷组创建为逻辑卷。扩容的时候,就是要将新的硬盘建成物理卷,然后再加到对应的卷组,则卷组的空间就扩展了。逻辑卷的读写性能不比物理分区差LVM的LV的容量默认是256G,原因是一个lv里面PE最多是65536个,每个PE默认大小是4M,所以65536*4M/1024=256G,因为PE数量调整不了,所以我们可以通过调整PE的大小来进行调整,在创建VG的时候用选项-s来指定PE的值,如将PE=16M,那么LV的最大总量就可以达到1TB的容量。LVM的相关指令汇总如下


4.2 创建逻辑卷
1.分区,选择类型是8e,这里组合的分区的大小可以不一样大2.pvcreate /dev/sdb1 /dev/sdc13 pvs或pvdisplay进行查看4创建卷组vgcreate vg0 /dev/sd{b,c}15 vgs或vgdisplay查看卷组6创建逻辑卷lvcreate -n lv0 -l 50%vg vg0这里-L也可以跟大小10G7查看lvdisplayll /dev/vg0/*可以看到有链接文件


8格式化,给文件创建系统
mkfs.xfs /dev/vg0/lv09挂载,写入配置文件到这里,创建成功4.3 扩展LVM空间扩展是先扩展逻辑卷后再同步文件系统先用vgdisplay查看空间。看看剩余有多少卷组空间可以分配,4.3.1 如果有剩余空间扩展逻辑卷,两个写法,如下lvextend -l +2000 /dev/vg0/lv0lvextend -L +5G /dev/vg0/lv0注意大写L和小写l后面跟的单位不一样,大写L后面跟单位,多少M或G等,小写的l跟多少个逻辑卷单位


增加完成后,用lvdisplay查看空间增加情况
然后用df –h查看逻辑卷目前的文件系统空间情况,因为新增加的空间还没有创建文件系统,所以用df看不到新增加后的大小。需要同步如果是xfs文件系统,同步命令为xfs_growfs /mnt/lv0后面跟着的是挂载点,将同步新增加的空间的文件系统,xfs的文件系统只能增加,不能减少如果是ext文件系统的同步用resize2fs /dev/vg0/lv17G如果出现如下的报错,建议同步语句中不要写扩容后的大小,命令resize2fs /dev/vg0/lv1[root@localhost lv0]# resize2fs /dev/vg0/lv0 9.6Gresize2fs 1.41.12 (17-May-2010)resize2fs: Invalid new size: 9.6Gext4文件系统可以缩减空间,但是一般生产环境不缩减空间,如果要缩减,要先做好原来数据备份后再进行缩减4.3.2 步骤如下1.分出一块分区,类型选择逻辑卷sda7fdisk/dev/sda--> n-->7-->+3G-->t—8e->w2.pvcreate /dev/sda73.vgextend vg0 /dev/sda74.扩展逻辑卷lvextend -L 7G /dev/vg0/lv15.同步文件系统resize2fs /dev/vg0/lv1注意,这里扩展逻辑卷和同步文件系统,可以直接用一条命令创建,如下lvextend -r -L +500M /dev/vg0/lv14.4 缩减空间缩减则是先缩减文件系统再缩减逻辑卷,注意缩减前要先把数据做好备份,才能做缩减,否则数据可能丢失,如果,当前数据量大于要减少后的盘的大小,则数据会部分丢失,步骤如下:umount /mnt/lv1e2fsck -f /dev/vg0/lv1//系统强制要求的步骤resize2fs /dev/vg0/lv1 5Glvreduce -L 5G /dev/vg0/lv1mount-a4.5 迁移逻辑卷首先要确保要迁移的逻辑卷和新的机器上已有的逻辑卷名称不一样,可以重命名1.umount /mnt/lv0
2.确保逻辑卷的名字和新机器上的逻辑卷不同名,同名就直接改掉lvrename /dev/vg0/lv0 newlv0vgrename vg0 newvg03.改成非活动状态,pvdisplay查看vgchange -an newvg04.导出逻辑卷vgexport newvg05.拆除硬盘,把拔下来的硬盘插入目标主机,这边虚拟机上操作硬盘移除和插入新主机,主要是把硬盘文件移动到新主机的目录下,新主机添加硬盘选择已有的磁盘,选中对应的移动过来的硬盘文件.vmk,完成硬盘的添加6.在新主机上用pvscan扫描,这步可以不操作7.导入硬盘vgimport newvg08.激活新增加的硬盘vgchange -ay newvg09.挂载mount /dev/newvg0/newlv0 /mnt/newlv0完成迁移4.6 从逻辑卷里删除正在使用的物理分区pvdisplay看看要移走的分区是否有人用,有人用的话,pvdispaly查看到如果total PE和free PE一样大,表示没人用,可以直接移走4.6.1 没有数据,方法如下1.从逻辑卷里移走vgreduce vg0 /dev/sda72.去掉物理卷标签pvremove /dev/sda73.直接删掉分区fdisk/dev/sda -->d-->7如果用pvdiskpaly查看到有数据,表示有人用,就要迁走数据到同一卷组的其他可用的PE上执行pvmove /dev/sda6移走sda6上的PE到同一卷组的剩余PE后才能拆掉空间,这里要确认同一卷组还有多余的空间,即PE,才能移走数据4.6.2 如果同一卷组没有多余的空间,要先加卷组空间1.新建一块分区fdisk/dev/sda->n-->7-->t—8e-->w2.pvcreate /dev/sda73.vgextend vg0 /dev/sda74.有空间后就可以移走数据,pvmove命令会在同一卷组里找到其他空闲空间进行数据的存放pvmove /dev/sda65.从vg0里删掉/dev/sda6这块盘vgreduce vg0 /dev/sda66.删掉空间pvremove /dev/sda67.通过fdisk移除分区
4.7 逻辑卷快照
逻辑卷快照相当于是把当前的状态记录下来,有备份的效果,但是不能代替备份,因为备份可以备份到其他机器上,快照都是在本地磁盘下逻辑卷快照的原理是在同一个卷组里也要创建一个快照逻辑卷,快照会占用一定大小的空间。快照之所以快,原因是没有真正拷贝数据,而是分配了一定的空间来使用,但是后期数据有变更时,旧的数据就会被推送到快照空间,即快照存放最旧的数据,当前的逻辑卷存放最新的数据,没有变更的数据就不会存放到快照里。但是快照会导致服务器性能下降,因为快照会做备份的操作,导致快照会导致服务器性能下降,所以一般用于测试环境。新建快照速度很快4.7.1 创建LVM快照创建快照命令如下,-s表明是做快照,-p指定属性为只读lvcreate -n lv1-snapshot -s -L 100M -p r /dev/vg0/lv1挂载快照mount /dev/lv1-snapshot/mnt /snap测试在数据还没修改前,/mnt/snap看到的快照数据实际是lv1上的原始数据,此时还没做任何备份操作1.当在lv1上修改数据,一旦数据被修改后,/mnt/snap就保存旧的数据,新的数据在lv1上2.将原来的lv1删掉一个文件,则被删掉的文件就会被复制到snap上3.在lv1上新建一个文件,snap上不会生成有新的文件4.7.2 恢复LVM备份1.取消逻辑卷和快照的挂载2.合并数据,恢复后,快照会被删掉。lvconvert --merge /dev/vg0/lv1-snapshot如果没有取消挂载,就进行数据恢复,就会出现如下对的报错[root@localhost ~]# lvconvert --merge /dev/vg0/lv0-snap3Can't merge over open origin volumeCan't merge when snapshot is openMerging of snapshot lv0-snap3 will start next activation.然后,即使取消挂载,要再次恢复原始数据时候,就会出现如下的报错[root@localhost ~]#lvconvert --merge /dev/vg0/lv0-snap3Snapshot lv0-snap3 is already mergingUnable to merge LV "lv0-snap3" intoits origin.如果遇到这样的报错,查看还是出现异常,因为lv0还没被恢复到原始数据,但是重启发现就正常了,出现这个报错,原因是未取消快照盘的挂载就执行了恢复的操作所以,要恢复快照,即恢复原始数据,一定要取消挂快照的挂载后才能进行恢复如果不重启机器,解决办法是同时取消快照盘和lv0盘的挂载,将lv0设为未激活,然后再次激活,最后重新挂载,就可以恢复到快照时的数据umount /mnt/lv0
umount /mnt/snaplvchange -an /dev/vg0/lv0lvchange -ay /dev/vg0/lv0mount /dev/vg0/lv0 /mnt/lv0


4.8 删除逻辑卷
1.取消挂载,2.删除逻辑卷,如果逻辑卷上有快照,系统会提示先删快照再删逻辑卷,此次操作,会清空数据lvremove /dev/vg0/lv1


3.删卷组
vgremove vg04.删除物理卷pvremove /dev/sd{a,b,c}5.通过fdisk删掉之前创建逻辑卷的分区,达到彻底删除的效果5 附录
创造一个即有LVM的的优点,弹性调整filesystem的大小,同时又具备磁盘阵列的效能和备份功能的文件系统思路先建raid再建LVM1.用fdisk分区sd{b,c,d,e,f}1,五个2.将多个分区通过命令mdadm创建一个raid5的磁盘阵列,并生成配置文件mdadm -C /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sd{b,c,d,e,f}1mdadm -Ds >/etc/mdadm.conf3.创建PG,VG,LVpvcreate /dev/md0vgcreate sunny_raid_vg /dev/md0lvcreate -L 10G -n sunny_raid_lv sunny_raid_vg4.格式化lv文件系统mkfs.ext4 /dev/sunny_raid_vg/sunny_raid_lv5.挂载mkdir /dev/raidlvmount /dev/sunny_raid_vg/sunny_raid_lv /mnt/raidlv移除设备思路卸载lv的挂载后,先拆除lv,后停掉raid步骤如下umount /dev/raidlvlvremove /dev/sunny_raid_vg/sunny_raid_lvvgchange -an sunny_raid_vgvgremove sunny_raid_vgpvremove /dev/md0mdadm -S /dev/md0rm -rf /etc/mdadm.confmdadm --zero-superblock /dev/sd{b,c,d,e,f}1用fdisk将对应的分区删掉到此,实验完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RAID LVM 配额