高级文件系统管理之mdadm与lvm的创建
※配置配额系统
磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间,比如一些网盘就是基于这个功能来做的,分配给用户固定的空间,花钱买,可以将空间设置的更大。
功能作用
磁盘配额可以限制指定账户能够使用的磁盘空间,这样可以避免因某个用户的过度的使用磁盘空间造成其它用户无法运行或工作甚至影响系统运行。这个功能不止是linux有,windows系统当中也有磁盘配额。
综述
它是在内核中运行的,以文件系统为单位启用,对不同组合用户的策略不同,根据块或者节点进行限制
执行软限制(soft limit)
硬限制(hard limit)
初始化
分区挂载选项:usrquota、grpquota
当你相对某个分区做磁盘配额时,需要在/etc/fstab中的挂载选项写上这两项才能做磁盘配额,完成之后需要重新挂载(mount -o remount device mount_point)
初始化数据库:quotacheck
quotacheck [ -gubcfinvdMmR ] [ -F quota-format ] -a | filesystem
选项:
-c:创建
-u:对某个用户设置磁盘配额
-g:对某个组设置磁盘配额
-m:不用重新挂载
例如我想对/home做磁盘配额就需要初始化数据库
quotacheck -cumg /home
初始化完成后会在/home目录下生成两个文件aquota.group,aquota.user
启用配额
quotaon mount_point
关闭配额
quotaoff mount_point
编辑配额:通过打开文件编辑内容
Disk quotas for user hadoop (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/VolGroup-lv_home 2048 0 0 12 0 0
blocks:当前目录下的文件总大小
soft:触发警告的初始值,最低容量限制
hard:允许储存最大的容量限制
inodes:当前目录的文件数量
soft:文件的最小值
hadr:单个文件大小的最大值
当我们相对hadoop用户设置磁盘配置时只需要更改blocks后面的soft和hard限制,大小根据自己的实际情况来定,也可以定义创建单个文件的大小
命令行直接编辑
setquota username 4096 5120 40 50 /home
这里的限制容量大小的默认值为字节
示例
setquota hadoop 4096 5120 40 50 /home
有时候需要批量设置某些用户的磁盘配额,一个个重新创建太麻烦,这里介绍一种批量创建的方法:
edquota -p user1 user2将user1设定要的配额值给user2同样设定
edquota -p xxxx `awk -F: '$3 >499 {print $1}' /etc/passwd`
查询磁盘配额
quota
repquota -a
假如有多个分区为quota,可用repquota -u 挂载点 查询单个分区的使用情况
※RAID
什么是RAID?
RAID(Redundant Arry of Inexpensive Disk)称为廉价磁盘冗余阵列。RAID的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格贵的磁盘,目前RAID技术大致分为两种:基于硬件的RAID技术和软件实现的RAID,其中linux下通过自带的软件(mdadm)就能实现RAID的功能,所以它配置灵活、管理方便。同时使用RAID,还可以实现将几个屋里磁盘合并成为一个更大的虚拟设备,从而达到性能改进和数据冗余的目的,当然基于硬件的RAID解决的方案比基于软件RAID技术在使用性能上稍胜一筹,具体表现在检测和修复多为错误的能力、错误磁盘自动检测和阵列重建等方面。
作用
提高IO能力,磁盘并行读写
提高耐用性,磁盘冗余来实现
级别,多块磁盘组织在一起的工作方式有所不同
RAID实现的方式
外接式磁盘整理额:
通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器,安装OS前在BIOS中配置
软RAID,例如mdadm
RAID级别
RAID-0
也称为为条带模式,即把连续的数 据分散到多个磁盘上存取,如图所示,当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求,这种数据上的并行操作可以充 分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入实在设备上并行完成的,读取和写入性能将会增加这通常是运行RAID-0的原因,但RAID-0没有数据冗余,如果磁盘出现故障,那么僵无法恢复任何数据。成本低,要求至少两个磁盘,一般只是在那些对数据安全性要求不高的情况下才被使用。
容错性 | 无 | 冗余 | 无 |
热备盘 | 无 | 读性能 | 高 |
随机写性能 | 高 | 连续写性能 | 高 |
需要的磁盘数 | 2或2N个 | 可用容量 | 100% |
典型应用 | 无故障的迅速读写,要求安全性不高,如图形工作站 |
RAID-1
RAID-1又称为镜像,一个具有全冗余的模式,如图,RAID可以用两个或2n个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘,这种阵列可靠性高,但其有效容量减小到总容量的一般,同时这些磁盘的大小应该相等,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,出现硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩,更换新盘后原有数据会需要很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降,RAID 1磁盘控制器的负载相当大,用多个磁盘控制器可以提高数据的安全性和可用性。
容错性 | 有 | 冗余 | 有 |
热备盘 | 有 | 读性能 | 高 |
随机写性能 | 低 | 连续写性能 | 低 |
需要的磁盘数 | 2或2N个 | 可用容量 | 50% |
RAID-4
RAID4在一个磁盘上保存校验信息,兵役RAID0的方式将数据写入其他磁盘,如果一个磁盘出现故障,可以使用校验信息来重建所有数据,如果两个磁盘出现故障,那么所有数据豆浆丢失,RAID4不常使用,原因是将校验信息存储在同一个磁盘上,每次写入其他磁盘时,都必须更新这些信息,大致大写的写入数据容易造成校验判的瓶颈。
容错性 | 有 | 冗余 | 有 |
热备盘 | 有 | 读性能 | 高 |
随机写性能 | 低 | 连续写性能 | 低 |
需要的磁盘数 | 2或以上 | 可用容量 | (n-1)/n |
RAID-5
RAID可以理解为是RAID0和RAID1的折中方案,但没有完全使用RAID1的镜像理念,而是使用了就奇偶校验信息来作为数据恢复的方式,没有单独指定的校验盘,而是交的存取数据及奇偶校验信息与所有磁盘上,在读写性能上都提升了,对于RAID5来说大部分数据传输只对一块磁盘操作,可进行秉性操作,在RAID5中有写损失,即每一次写操作,将产生四个实际的读写操作,其中两次读旧的数据及就信息,两次写心得数据及奇偶信息。
容错性 | 有 | 冗余 | 奇偶校验 |
热备盘 | 有 | 读性能 | 高 |
随机写性能 | 低 | 连续写性能 | 低 |
需要的磁盘数 | 3个或3个以上 | 可用容量 | (n-1)/n |
典型应用 | 队数据传输要求安全性高如金融,数据库,存储 |
RAID6
RAID6是RAID家族中的新技术,是在RAID5的基础上扩展而来的,所以同RAID5一样,数据和校验码都是被分成数据块然后分贝存储到磁盘阵列的各个硬盘上。RAID加入了一个独立的校验磁盘,它把分布在磁盘上的校验码都备份在一起,这样在磁盘整列就允许多个磁盘同时出现故障,但消耗了太多的磁盘空间。
容错性 | 有 | 冗余 | 奇偶校验 |
热备盘 | 有 | 读性能 | 高 |
随机写性能 | 低 | 连续写性能 | 低 |
需要的磁盘数 | 4个或4个以上 | 可用容量 | (n-2)/n |
典型应用 | 队数据传输要求安全性高如金融,数据库,存储 |
RAID-10
RAID-10是一个RAID0与RAID1的组合体,它是利用奇偶校验实现条带及镜像,所以它记性了RAID0的快速和RAID1的安全,我们知道,RAID1在这里就是一个冗余的备份阵列,而RAID0则负责数据的读写速度,更多的情况是从主通路分出两路,做Striping操作,即把数据分割,而这分出来的每一路则再分两路,做Mirroring操作,即互做镜像
容错性 | 有 | 冗余 | 奇偶校验 |
热备盘 | 有 | 读性能 | 高 |
随机写性能 | 高 | 连续写性能 | 高 |
需要的磁盘数 | 4个或4个以上 | 可用容量 | 50% |
典型应用 | 队数据传输要求安全性高如金融,数据库,存储 |
RAID-01
RAID-01以四个磁盘组成的RAID 0+1为例,其数据存储方式如图所示:RAID 0+1是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。由于RAID 0+1也通过数据的100%备份功能提供数据安全保障,因此RAID 0+1的磁盘空间利用率与RAID 1相同,存储成本高。当镜像盘的中任意一个磁盘坏带,数据将会丢失
软RAID
通过软件的方式来实现raid各个级别的功能,性能没有硬件raid那么强大,但它可以用来在测试环境当中使用。linux当中使用mdadm这个工具来实现raid的功能
mdadm:为软RAID提供管理界面
为空余磁盘添加冗余,结合内核中的md(mutil devices),RAID设备可命令为/dev/md0、/dev/md1等等
mdadm:模式化的工具
语法格式:mdadm [mode]
支持的RAID级别:Linux supports LINEAR md devices, RAID0 (striping), RAID1 (mirror-
ing), RAID4, RAID5, RAID6, RAID10, MULTIPATH, FAULTY, and CONTAINER.
模式:
创建模式 -C
专用选项
-l 指定raid级别
-n 指定设备数量
-a 自动为其创建设备文件 yes|no
-c 指定chunk大小一般设定为2^n,默认为64k
-x 指定空闲盘个数,当其中某个盘坏掉,自动顶上去
管理模式 -F
-a -add 添加磁盘
-r -remove 删除磁盘
-f -fail 模拟损坏磁盘
mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md0 -r /dev/sdb2
mdadm /dev/md0 -f /dev/sdb3
监控模式 -F
查看软raid的状态,相当于查看/proc/mdstat
增长模式 -G
比如我要想某个raid设备当中添加一块新磁盘以扩大raid的容量
mdadm -G /dev/md0 -n4 -a /dev/sdf1
装配模式 -A
当raid设备时停止的状态时,可以使用此模式将其激活
mdadm -A /dev/md0 /dev/sdb1 /dev/sdb2 /dev/sdb3
查看RAID的阵列的详细信息
mdadm -D /dev/md0或者查看文件/proc/mdstat
停止阵列
mdadm -S /dev/md0
将当前RAID信息保存至配置文件,以便以后进行装配
mdadm -D -s >/etc/mdadm.conf
删除raid
在raid之前必须要先停止raid设备,然后删除raid信息
mdadm -zero-superblock /dev/sdb1
mdadm -zero-superblock /dev/sdb2
mdadm -zero-superblock /dev/sdb3
示例:
创建一个可用空间为1G的RAID1设备,要求其chunk大小为128k,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
由于RAID1的利用率是100%,所以这里只需要创建一块空间大小为1G的分区,将分区类型改为fd,然后创建raid,然后又要求需要一块空闲盘,所以还得创建一个大小同为1G的分区,分区类型也得改为fd,开机需要自动挂载,这是需要将条目写到/etc/fstab d当中去
第一步、分两个区大小都为1G,完成后更改分区的类型为fd Linux auto raid类型
第二步、创建raid mdadm -C /dev/md0 -a yes -c 128k -l 1 -n 1 -x 1 /dev/sdc{5,6}
第三步、格式化 mke2fs -t ext4 /dev/md0
第四步、将条目写到/etc/fstab中去,实现开机自动挂载
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
※逻辑卷管理
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时 遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)
好处
允许对卷进行方便操作的抽象层,包括重新设定文件系统大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷,用一个或多个物理卷来创建一个卷组
lvm可以弹性的更改lvm的容量
LVM基本术语
物理存储介质:这里指系统的存储设备如/dev/sda /dev/sdb等等
物理卷:物理卷就是指硬盘分区或逻辑上与磁盘分区具有同样的功能
卷组:LVM卷组类似于lvm系统中的物理硬盘,其有物理卷组成。可以在卷组上创建一个或多个lvm分区,lvm卷组由一个或多个物理卷组成
逻辑卷:lvm的逻辑卷类似于硬盘分区,在逻辑卷之上可以建立文件系统
PE(physical extend)每个一个物理卷被划分为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元,默认为4MB,可以更改
LE:逻辑卷也被划分成为LE的可被寻址的基本单位,在同一卷组中,LE的大小和PE是相同的。
简单的说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区
dm:device mapper:将一个或多个底层设备组织成一个逻辑设备的模块
设备名:/dev/dm-#
软连接
/dev/mapper/Vg_name-Lv_name
/dev/mapper/vol0-root
/dev/Vg_name_Lv_name
/dev/vol0/root
pv管理工具
pvs:简要查看pv信息
pvdisplay:详细查看pv信息,也可在后面跟某个设备,查看某个pv的详细信息
创建pv
pvcreate
pvcreate [-commandprofile ProfileName] [-d|-debug] [-h|-help] [-t|-test]
[-v|-verbose] [-version] [-f[f]|-force [-force]] [-y|-yes] [-labelsector]
[-bootloaderareasize size] [-M|-metadatatype type] [-[pv]metadatacopies Num-
berOfCopies] [-metadatasize size] [-metadataignore {y|n}] [-dataalignment
alignment] [-dataalignmentoffset alignment_offset] [-restorefile file]
[-norestorefile] [-setphysicalvolumesize size] [-u|-uuid uuid] [-Z|-zero
{y|n}] PhysicalVolume [PhysicalVolume…]
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
vg管理工具
显示卷组
vgs:简要显示vg信息
vgdisplay:详细显示vg信息
创建卷组
vgcreate
vgcreate [-s|-physicalextentsize PhysicalEx- tentSize[bBsSkKmMgGtTpPeE]] [-shared] [-systemid SystemID] [-t|-test] [-v|-verbose] [-version] [PHYSICAL DEVICE OPTIONS] VolumeGroupName PhysicalDe-vicePath [PhysicalDevicePath…]
vgcreate vg0 /dev/sdb1 /dev/sdb2 /dev/sdb3
管理卷组
vgextend 拉伸卷组
vgextend vg0 /dev/sdc1 /dev/sdc2
删除卷组
vgremove,先将数据移动到指定的设备上,然后再删除,将底层存在pv上的数据移动到其他硬盘,pvmove /dev/sdb{1,2,3} /dev/sdc{1,2,3}
vgreduce vg0 /dev/sdb{1,2,3} 将卷组上的pv移除
vgremove vg0 最后移除卷组
lv管理工具
lvs:简要显示逻辑卷的信息
lvdisplay:详细显示逻辑卷的信息
创建逻辑卷
lvcreate
lvcreate [-a|-activate [ [-cachesettings key=value] [-c|-chunksize ChunkSize] [{-l|-extents]LogicalExtentsNumber[%{FREE|PVS|VG}] | -L|-size LogicalVolumeSize}[-i|-stripes Stripes [-I|-stripesize StripeSize]]] [-h|-?|-help][-s|-snapshot] [-t|-test] [-type SegmentType] [-v|-verbose]
lvcreate -L [mMgGtT] -n lv_name vgname
-l # :使用多少个PE的容量来创建逻辑卷
-L :直接指定使用多大容量来创建卷组
重新设定文件系统的大小
fsadm[options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
扩展逻辑卷
lvextend -L [+]#[mMgGtT] / dev/VG_NAME/LV_NAME 扩大物理边界
resize2fs /dev/VG_NAME/LV_NAME 扩大逻辑边界
示例:
1、创建一个至少有两个PV组成的大小为10G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
第一步分两个分区,并且大小为10G更改分区类型为8e
第二步、创建pv pvcreate /dev/sdc2 /dev/sdc3
第三步、创建卷组 vgcreate vg0 -s 16M /dev/sdc2 /dev/sdc3
第四部、创建卷组 lvcreate -L 20G -n testvg vg0
第五步、格式化挂载 mke2fs -t ext4 /dev/vg0/testlv ,mount /dev/vg0/testlv /users (如果目录实现不存在需要创建)
第六步、为了开机能够挂载写到/etc/fstab 当中去
2、扩展testlv至7G,要求archlinux用户的文件不能丢失
要扩展必须先要查看testlv他的卷组当中的剩余空间还够不够,如果卷组当中的剩余空间不够的,需要再创建一个分区,然后拉伸卷组的空间,之后扩展逻辑卷,使用lvextend之后只是拉伸了物理空间,而逻辑空间的还是没有改变,这里需要执行resize2fs device这条命令来动态拉伸逻辑卷的空间
第一步、查看卷组所剩空间大小vgdisplay vg0查看FREE PE那一项还有没有空间,正好我这里是有的
第二步、拉伸逻辑卷 lvextend -L +2G /dev/vg0/testlv
第三步、使其生效 resize2fs /dev/vg0/testlv