磁盘存储管理 LVM 逻辑卷 虚拟阵列
1.Linux系统中 磁盘使用 存在3个大问题:
1、灵活性
2、安全性
3、性能
2.解决办法RAID独立磁盘冗余阵列
RAID(Redundant Arrays of Independent Drives)独立磁盘的冗余阵列
1.RAID0
RAID0又称条带化、带区。
多块磁盘使用相同的容量组成raid0分区,多块磁盘空间同时、平均使用的,即存储文件时,是把文件平均分成多份同时存入多块磁盘,读取也是多块磁盘
同时读,因此,提升了读写性能。
不具备数据备份、恢复功能。
2.RAID1
RAID1又称镜像。
两块(或多块)磁盘建立raid1分区互为镜像,即相互备份关系
存入文件时,两块(或多块)磁盘,都完整的存储一份文件,且所有的增删改操作都要在所有磁盘上同时进行,每一份数据称为一份copy
优点:支持备份、恢复;
缺点:冗余度高,即磁盘空间浪费高
3.RAID4
4.RAID5
采用至少3块磁盘,采用校验的方案,即多块盘轮流存储数据和校验。
具体原理:
磁盘加入raid5后,会和raid0一样,将磁盘碎片化,分割成小块单位。存储数据时,多块磁盘,按分割的小块,轮流存数据,其中一块磁盘上的小块存放校验。
备份算法:一种特殊的奇偶校验算法,数据恢复时,采用逆运算
优点:支持备份、恢复
缺点:性能稍差。冗余度低
5.RAID6
采用至少4块磁盘,采用校验的方案,即多块盘轮流存储数据和校验。
具体原理:
磁盘加入raid6后,会和raid0一样,将磁盘碎片化,分割成小块单位。存储数据时,多块磁盘,按分割的小块,轮流存数据
备份算法:一种特殊的奇偶校验算法,数据恢复时,采用逆运算
优点:支持备份、恢复,冗余度高,允许2块磁盘出故障
缺点:性能稍差
3.复合RAID技术:
1.RAID10
采用两组(或多组)磁盘,组内(至少2快磁盘)使用raid1,组之间使用raid0
特点:
既提升读写速度,又实现备份恢复功能
能够解决不同组坏盘,不能解决坏组。
2.RAID01
两组(或多组)磁盘,组内使用raid0 组之间使用raid1
特点:
既提升读写速度,又实现备份恢复功能
能够解决组内坏多盘,不能解决不同组都有坏盘
3.RAID51
两组磁盘,组内使用raid5 组之间使用raid1
特点:解决50%的故障率
4.实现机制:
主板支持的RAID——firmware RAID
SCSCI卡支持的RAID(lsiLogic)——Independent RAID adapter
磁盘阵列
软件实现——LVM
mdadm
二.LVM逻辑卷管理
1.lvm基本思想:
操作系统不直接使用物理磁盘,而是将多个(至少一个)物理磁盘(整个磁盘或分区)组成一个组织,
像一个大的磁盘池子,然后从磁盘池中切出一部分(或全部)空间,用于操作系统使用。
优点:不增加额外的硬件(也意味着没有额外的硬件投资),可以实现系统的灵活、安全、高性能。
缺点:需要专门的软件;消耗额外的系统资源。
Linux系统支持LVM。
需要安装lvm软件包。还需要有相应的服务
2.基本概念 pv vg lv pe le lv
PV 物理卷,物理磁盘或分区;一块磁盘在LVM中必须初始化为PV才可以使用(Physical Volume)
VG 卷组,有一个或多个PV组成,意即包有PV的大池子 Volume Group
LV 逻辑卷,从VG中划分出一块存储空间,被操作系统使用。LV的空间可以跨越VG中的多个PV,LV允许扩容,但不允许跨越VG。
PE 物理单元,PV在加入到VG时,会按照VG事先设定或指定的统一大小,划分成许多小的存储单元,称为PE,是LVM管理PV的基本单位。
LE 逻辑单元,在VG中划分LV时,是按照LV的大小,给其划分出足够多的PE,PE在LV中的对应,称为LE,即LE是PE在LV中的映射。
3.CentOS7支持的LV类型:
线性卷
条带卷 strip strip size 64K
镜像卷
RAID卷:RAID0/1/4/5/6/10
通过LVM创建和管理的RAID逻辑卷利用了磁盘映射的内核驱动程序。
RAID 1映像可以暂时从RAID中分离出来,之后还可以合并回RAID中。
支持快照
精简卷:
快照卷:
LVM快照功能提供了在特定时刻创建设备的虚拟映像而不引起服务中断的能力。在拍摄快照后对原始设备进行更改时,快照功能会在更改之前创建已更改的数据区域的副本,以便它可以重建设备的状态。
精简卷的快照卷:
缓存卷:CentOS7.1之后发布的功能。
使用快速块设备(如固态盘)作为较大较慢块设备的写回应或写通过缓存的卷。用户可以创建缓存逻辑卷以提高其现有逻辑卷的性能,或者创建由小而快的设备组成缓存逻辑卷并与大而慢的设备组成的逻辑卷组合使用。
4.pv、vg、lv创建案例:
1、为虚拟机在线新增4块2G磁盘。
2、centOS7上检查lvm2软件是否安装,若没有安装,安装该软件。
3、新增磁盘建4个分区,每个分区大小为500M。注意指定分区的文件系统编号为8e,即分区类型为LVM;用sfdisk复制分区。
解释:LVM中PV可以是:磁盘、分区、一块镜像空间
别的磁盘使用sdb的格式:
sfdisk -d /dev/sdb >sdb.out --选项-d --dump 将指定设备的分区以sfdisk识别的、可以作为输入的格式转储出来
sfdisk -f /dev/sdc <sdb.out
或使用:
sfdisk -d /dev/sdb |sfdisk -f /dev/sdc
4、制作PV
pvcreate /dev/sdb1 ---把指定分区制作成PV
pvcreate /dev/sdc1
pvcreate /dev/sdd1
pvcreate /dev/sde1
pvdisplay ---查看本机所有PV
pvdisplay /dev/sda7 ---查看指定PV
5、创建VG,加入PV
vgcreate -s 2M vg01 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 ---创建VG,并加入指定PV
注:-s 指定PE的大小,不写,默认4M vg01是创建的VG的名字,自定义
vgdisplay ---查看本机所有VG
vgdisplay vg01 ---可识别:VG中PV数、活动PV数、PE大小、PE总数、已用PE数、空闲PE数
pvdisplay ---看见PV加入VG后的信息
6、从VG中划分出LV
lvcreate -L 400M -n lv01 vg01 ---创建LV
注:-L 指定LV大小 -l 指定LE数 -n 指定LV名字,自定义 vg01是从哪个VG中划分
也可以 lvcreate -L 400M -n lv01 vg01 /dev/sda8 ---指定从哪个PV上划分空间
lvdisplay ---查看本机所有LV
lvdisplay /dev/vg01/lv01 ---查看指定LV
lvdisplay -m /dev/vg01/lv01 ---查看指定LV信息及PE到LE的映射关系
vgdisplay ---可见PE的使用信息
pvdisplay
7、给LV制作文件系统,挂载使用
mkfs -t ext4 /dev/vg01/lv01 ---制作文件系统
mkdir /mnt/d1
mount /dev/vg01/lv01 /mnt/d1 ---挂载使用
vi /etc/fstab ---设置开机自动挂载,写入
/dev/vg01/lv01 /mnt/d1 ext4 defaults 1 2
5.扩容操作 案例
vgextend vg01 /dev/sda9 ---扩容VG,增加PV
lvextend -L +200M /dev/vg01/lv01 /dev/sda8 ---扩容LV
注:-L 表示按照大小做扩容,无+表示扩容到多大,有+表示增加多大 -l 表示按照LE数做扩容
LV要写绝对路径 /dev/sda8 从哪一块PV上划分新空间,不写会有默认操作
扩容后,新增空间并未制作文件系统,所以df -h 后见到的仍然是之前的可用大小
resize2fs /dev/vg01/lv01 ---重置LV大小,自动把新增空间制作文件系统
lvextend -L +200M -r /dev/vg01/lv01 /dev/sda8 ---扩容LV,-r表示自动把新增空间做文件系统
lvdisplay -m /dev/vg01/lv01 ---查看LE映射
总结:
文件系统,指格式化后,可用的存储空间,该空间的存储区域可以来自于一块磁盘,也可以来自于多块磁盘
用户使用的是文件系统。
由PE组成了LV的空间,制作文件系统时,其实是在PE内又划分了block块
如不给新增加的空间做文件系统,增加的磁盘空间不能使用。
6.缩容操作案例
vgreduce vg01 /dev/sda7 ---从VG中删除PV
lvreduce -L -200M /dev/vg01/lv01 ---缩容LV
注:
缩容LV后,超级块会丢失,则该LV上的文件系统不可再用,卸载再挂载就会报错
只能给LV重新做文件系统后才可以挂载使用
7.LVM清理案例
卸载LV=>删除LV lvremove =>删除VG vgremove => 删除PV pvremove => 删除分区
单词:
physical 物理 volume 卷(分区) logic 逻辑 extend 扩展 extent 单元 current 当前的 free 空闲的
total 总量
8.数据转移案例
pvmove /dev/sda7 /dev/sda9 ---把sda7上的所有LE映射的PE,转移到sda9上,并转移数据
pvmove /dev/sda8:75-87 /dev/sda9 ---转移sda8上的指定PE,格式上,指定的是PE号
数据转移的应用场景:
有故障盘时,转移故障盘上的数据到新盘
均衡VG中各PV的使用,即让LV均衡的分布在所有PV上
9.swap虚拟内存 案例
虚拟内存:当内存空间不足时,系统会在磁盘上开辟一块空间,临时当做内存使用
在Linux中称为swap空间,即交换空间
其他称谓:页面文件(windows中) 换页空间(UNIX)
free -h ---查内存系统的信息
swapon -s查看swap分区
把空间格式化为swap识别的类型:
mkswap 名字 [-L 卷标 ]
swapon -a 用作swap的空间;将/etc/fstab文件中所有设置为swap的设备,启动为交换区
创建新的swap空间
方式一:用新分区做swap
fdisk /dev/sda
新建分区,指定文件系统类型:82 linux swap
mkswap /dev/sda10 ---制作swap文件系统
swapon /dev/sda10 ---启用swap分区
free -h ---可见
swapoff /dev/sda10 ---关闭swap分区
方式二:用LV做swap
lvcreate -L 500M -n lv_swap vg01 /dev/sda9
mkswap /dev/vg01/lv_swap ---制作swap文件系统
swapon /dev/vg01/lv_swap ---启用swap分区
重启生效
vi /etc/fstab
/dev/sda10swap swap defaults 0 0
/dev/vg01/lv_swapswap swap defaults 0 0
lvcreate -L 300M --type raid1 vg0 -n lvm
10.给LV配置raid案例
其实,我们的LVM管理,就支持制作raid功能的LV,具体如下:
1.制作raid0功能的LV
因为raid0的工作原理是给磁盘划分区块后,多块磁盘轮流存入数据,所以对现有的已经制作好文件系统的LV,无法升级为raid0级LV,所以只能在创建LV时设定为raid0状态。过程如下:
1、创建VG
首先:清空raid后,重建sda[789]三个分区,并设定为LVM的文件系统
vgcreate /vg01 /sda[789]
2、VG中创建raid0LV
lvcreate -L 300M -i 2 -I 64K -n lv_r0 vg01
3、查看信息
lvdisplay
lvs –a ---查看LV信息,功能类似于display,但可见到raid类型
lvs -a -ovg_name,name,devices,size ---指定显示列查看
注:-a 显示所有lv信息,-o 指定显示的列
2.制作raid1功能的LV
我们也可以在创建LV时,直接指定创建为带镜像功能的LV,即raid1级LV。
lvcreate -L 400M -m 1 -n lv_r1 vg01 ---创建raid1级LV
参数:-m 表示增加1个镜像,即做几个备份mirror
注:镜像又称为mirror,给源数据增加一份镜像,又称为增加一个mirror
lvdisplay -m/dev/vg01/lv01 ---可见raid1镜像信息
lvs -a -o+devices
注:+devices是在lvs原有的显示结果后增加devices列,即显示所在设备。
3.创建raid10功能的LV
lvcreate -L 300M -m 1 -i 2 -I 64K -n lv_r10 vg01
L --大小 m--1个镜像卷 i--两个磁盘组成strip条带 I--条带块大小
4.查看raid类型LV的属性
lvs -a -o name,segtype,devices
segtype:类型
devices:所占设备名
11.raid1级LV故障修复(更换坏盘)
当raid1出现故障时,我们的解决思路是:先通知LV去除镜像功能,把raid1中故障盘上的mirror删除。再从VG中的一个可用PV上,重新与LV建立镜像关系,重建mirror,或重新加入新PV到VG中,恢复镜像。具体模式实验如下:
1.破坏磁盘
dd if=/dev/zero of=/dev/sda7 bs=100M count=3 ---模拟sda7故障
2.查看磁盘
lvs -a -o +devices ---再次查看会发现故障盘,显示为unknown未知状态
pvdisplay ---查看PV,也会见到丢失的磁盘
其实,当前的LV中的sda7数据是丢失的,在有丢失磁盘(miss或unknown状态)的情况下,VG、LV是不可删除、清理的,我们可以自行用lvremove、vgremove尝试下,会发现命令是不能正确执行的。
3.剔除故障磁盘
所以必须先把故障磁盘剔除后,VG、LV才可以正常操作。
vgreduce --removemissing --force vg01 ---把丢失的磁盘从vg中清除
pvdisplay ---再次查看会发现丢失的磁盘不见了
lvs -a -o +devices ---查看LV会发现某个镜像无磁盘存放
4.增加新磁盘
pvcreate /dev/sdc2
vgextend vg1 /dev/sdc2 --增加新磁盘
lvconvert --repair vg1/lvms /dev/sdc2 --将lvms迁到sdc2上
lvs -a -o +devices --再次查看,恢复正常
重建mirror的过程,其实也是给现有LV增加mirror,升级成raid1级LV的过程,命令操作基本一样
说明:以上我们所讲解的创建带raid功能LV的过程,仅介绍了LV的配置管理,其实LV创建成功后,仍然需要制作文件系统,再挂载使用。同样需要编辑/etc/fstab配置文件,让其开机自动挂载。
12.卷组分离与结合
vgsplit --卷组分离
vgmerge --卷组结合
三.虚拟阵列
1.基本概念
CentOS Linux中另外实现存储数据的技术是虚拟阵列,即采用软件方式模拟raid阵列的工作。
虚拟阵列软件为mdadm。
管理虚拟阵列的命令为mdadm。
mdadm将物理磁盘或磁盘分区初始化为阵列中的磁盘。需要至少2块磁盘或磁盘分区,然后将阵列中的磁盘组织为虚拟磁盘,虚拟磁盘用于系统使用。阵列中若使用磁盘分区,分区的类型必须为"Linux raid auto",类型编号为 fd
目前,CentOS Linux支持的虚拟磁盘有线性磁盘,raid 0(条带)、raid 1(镜像)、raid 4、raid 5、raid 6、raid 10、多路径磁盘等多种类型磁盘。
多路径磁盘不是一种软件RAID机制,而是涉及多个设备:每个设备都存在通往一个公共物理存储设备的路径。Cen()tOS不建议使用虚拟阵列管理Multipath,因为它没有很好的支持并且不再进行开发。建议使用基于设备映射器(Device Mapping)的多路径工具。
2.mdadm命令的格式为:
mdadm [模式] 虚拟磁盘 [选项] 物理磁盘1 物理磁盘2 ... 物理磁盘n
3.案例
1.安装mdadm软件
yum -y install mdadm
2.创建新分区
sda7 600M sda8 800M sda9 1000M
设置文件系统类型:fd raid
3.创建raid分区 查看分区
mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sda7 /dev/sda8 /dev/sda9
--- -C 创建raid分区,后面写raid分区名字,名字必须mdX格式,X表示本机内第几个raid分区的编号,从0开始
-a yes 表示自动创建分区设备 -l 指定raid等级: 0 1 5
-n 指定创建几个copy,-x指定有几块热备盘 后面列举出所用的磁盘,最后一个为热备盘
cat /proc/mdstat ---查看本机内所有的raid分区
mdadm -D /dev/md0 ---查看指定raid分区的详细信息,可见存储盘(active sync) 热备盘(spare)
4.制作文件系统挂载使用
mkfs -t ext4 /dev/md0
mkdir /mnt/d1
mount /dev/md0 /mnt/d1
4.raid管理
1.停止分区和自动挂载
mdadm -S /dev/md0 ---停止raid分区,实质上是删除了整个分区,若要再用,必须重新创建
若想永久存在,必须把raid分区的创建,写到配置文件中,/etc/mdadm.conf ,该文件默认不存在
设置开机自动创建raid分区
mdadm -Ds /dev/md0 >> /etc/mdadm.conf ---生成raid分区的信息,导入到配置文件
vi /etc/mdadm.conf开头第一行写入:
device /dev/sda7 /dev/sda8 /dev/sda9 ---指定创建raid分区的设备
保存退出
vi /etc/fstab ---设定自动挂载
/dev/md0 /mnt/d1 ext4 default 1 2
2.raid分区启用
mdadm -S /dev/md0 --停止并删除
mdadm -As /dev/md0 --恢复并启用 -A 恢复并启用 -s 到/etc/mdadm.conf文件中查找到目标raid分区
mdadm -A --scan --自动扫描配置的磁盘,并启动虚拟磁盘。
3.模拟修复故障盘
假设发现sda8故障了
mdadm /dev/md0 -f /dev/sda8 ---指定sda8为故障盘
mdadm -D /dev/md0 ---查看信息可见热备盘变为数据盘
mdadm /dev/md0 -r /dev/sda8 ---从raid分区中删除故障盘
mdadm /dev/md0 -a /dev/sda8 ---添加新盘为热备盘,假设sda8修好了
注:修复完故障后,需要手动更改/etc/mdadm.conf中的device设置
4.raid监控
功能:配置mdadm,当发生故障盘后,给管理员发送邮件做通知
mdadm --monitor --mail=root@localhost --delay=300 /dev/md0 & ---后台执行监控程序,监控指定的raid分区
--monitor启动监控程序 --mail指定发现故障后给谁发邮件 --delay指定每隔多少秒,检查一次分区