linux Raid 和 Lvm 高级磁盘管理
1、 Raid 介绍
Raid:Redundant Arrays of Inexpensive(Independent)Disks,多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供。
提高 IO 能力:
磁盘并行读写
提高耐用性:
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同
Raid-0、Raid-1、Raid-2 … Raid-5、Raid-6、Raid-10、Raid-01
Raid 实现的方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内接式 Raid:主板集成 Raid 控制器,安装 OS 前在 BIOS 里配置
软件 Raid:通过 OS 实现
2、Raid 的工作原理
Raid-0(条带卷):
Raid-1、Raid-4:
Raid-5:
Raid-6:
Raid-10:
Raid-01:
Raid-50:
JBOD:
Raid-7:
可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行,理论上性能最高的 RAID 模式。
常用级别:
Raid-0、Raid-1、Raid-5、Raid-10、Raid-50、JBOD
3、软 Raid 的实现
1> mdadm:为软 Raid 提供管理界面
为空余磁盘添加冗余
结合内核中的 md(multi devices)
Raid 设备可命名为/dev/md0、/dev/md1、/dev/md2、/dev/md3 等
2> mdadm:模式化的工具
mdadm [mode] <raiddevice> [options] <component-devices> 支持的 Raid 级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10 模式: 创建模式:-C -n # 使用#个设备来创建此 RAID -l # 指明要创建的 RAID 的级别 -a {yes|no} 自动创建目标 RAID 设备的设备文件 -c CHUNK_SIZE 指明块大小,单位 K -x # 指明空闲盘的个数 装配:-A 监控:-F 显示:-D # 显示 RAID 的详细信息(mdadm -D /dev/md#) 管理: -f:标记指定磁盘为损坏 -r:移除磁盘 -a:添加磁盘
观察 md 的状态:cat /proc/mdstat <raiddevice>:/dev/md# <component-devices>:任意块设备
3> 软 RAID 配置示例
(1)使用 mdadm 创建并定义 RAID 设备
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
(2)用文件系统对每个 RAID 设备进行格式化
mkfs.xfs /dev/md0
(3)测试 RAID 设备
(4)使用 mdadm 检查 RAID 设备的状况
mdadm-D/dev/md0
(5)增加新的成员
mdadm -G /dev/md0 -n4 -a /dev/sdf1
4> 软 RAID 测试和修复
(1)模拟磁盘故障
mdadm /dev/md0 -f /dev/sda1 # 标记指定磁盘为损坏
(2)移除磁盘
mdadm /dev/md0 -r /dev/sda1
(3)从软件 RAID 磁盘修复磁盘故障
替换出故障的磁盘然后开机
在备用驱动器上重建分区
mdadm /dev/md0 -a /dev/sda1 # 添加磁盘
(4)mdadm、/proc/mdstat 及系统日志信息
5> 软 RAID 管理
生成配置文件:mdadm -D -s >> /etc/mdadm.conf
停止设备:mdadm -S /dev/md0
激活设备:mdadm -A -s /dev/md0 激活
强制启动:mdadm -R /dev/md0
删除 RAID 信息:mdadm –zero-superblock /dev/sdb1
4、逻辑卷管理器(LVM)
允许对卷进行方便操作的抽象层,包括重新设定文件系统大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷
用一个或者多个物理卷来创建一个卷组
物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
在物理卷上创建的逻辑卷是由物理区域(PE)组成
可以在逻辑卷上创建文件系统
设置卷组的时候要设置 PE 大小,卷组显示有多少 PE,扩的时候也要以 PE 往进添加。底层硬盘设置 RAID。
1> 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
2> LVM 更改文件系统的容量
LVM 可以弹性的更改 LVM 的容量,通过交换 PE 来进行资料的转换,将原来 LV 内的 PE 转移到其他的设备中以降低 LV 的容量,或将其他设备中的 PE 加到 LV 中以加大容量。
3> 创建逻辑卷(分区和硬盘的组合→物理卷→卷组→逻辑卷)
创建新分区(要想使用分区当逻辑卷来用,要改 id 为 8e [t 选项]),硬盘不用;
将分区、硬盘变成物理卷:
pvs # 查看当前物理卷 pvdisplay # 查看当前物理卷 pvcreate /dev/sd{b1,c} # 将/dev/sdb1 和 /dev/sdc 变成物理卷 pvs # 或者 pvdisplay 查看当前所创建的物理卷
将所创建的物理卷变成卷组:
vgs # 查看当前卷组 vgdisplay # 查看当前卷组 vgcreate [卷组名] [物理卷 pv1 pv2…] [-s 6M 指定 PE 大小默认 4M] # 创建卷组 vgcreate vg0 /dev/sd{b1,c} # 将/dev/sdb1 和 /dev/sdc 创建为卷组 vgs 或 vgdisplay 查看 vg0 卷组 在/dev/vg0
创建逻辑卷:
lvs # 或者 lvdisplay 查看当前逻辑卷 lvcreate -n [lvname] -L [指定多大的逻辑卷] [vg 卷组名] # -l [以 PE 个数为单位] lvcreate -n mysql -L 8G vg0 lvs # 或者 lvdisplay 查看当前逻辑卷 /dev/vg0/mysql 等同于 /dev/mapper/vg0-mysql
创建文件系统:
mkfs.xfs /dev/vg0/mysql
挂载:
mount /de/vg0/mysql /mnt/mysql
4> 扩展逻辑卷(将卷组剩余的空间给逻辑卷分配)
lvextend -l +100%free /dev/vg0/mysql # 将卷组剩余空间100%全给 mysql 逻辑卷 vgdisplay # 查看卷组,发现空间全用光了 加了空间,新加的空间没有文件系统,所以 df 看不到,需要同步文件系统 同步文件系统: xfs_growfs /dev/vg0/mysql # 同步新添的逻辑卷空间
如果卷组上也没空间了,新添硬盘,将新添硬盘先变成物理卷 pvcreate /dev/sdd
将物理卷加入卷组 vg0 vgextend vg0 /dev/sdd # 将 vg0 扩展至/dev/sdd
再新建一个逻辑卷 lvcreate -n binlog -L 10G vg0 lvs 或 lvdisplay # 查看新添逻辑卷
格式化:
mkfs.ext4 /dev/vg0/binlog 挂载:
mount /de/vg0/binlog /mnt/binlog 再扩展:
lvextend -l 1000 /dev/vg0/binlog # 扩展前看一下卷组有多少剩余空间
df 看不到,同步文件系统: resize2fs /dev/vg0/binlog
扩展并同步文件系统: lvextend -r -l +500 /dev/vg0/mysql # 加 -r 选项
缩减逻辑卷:(xfs 文件系统不能缩减,ext 系列可以),缩减必须离线缩减(取消挂载) 先缩文件系统大小,在缩减逻辑卷大小 resize2fs /dev/vg0/binlog 10G # 缩减文件系统到 10G lvreduce -L 10G /dev/vg0/binlog # 缩减逻辑卷大小
缩减完再挂载
5> 跨主机迁移卷组
源主机上:
在旧系统中,umount 所有卷组上的逻辑卷
禁用卷组: vgchange -an vg0 lvdisplay
导出卷组: vgexport vg0 pvscan vgdisplay 拆下旧硬盘
目标主机上:
在新系统中安装旧硬盘,并导入卷组:vgimport vg0 vgchange -ay vg0 mount 所有卷组上的逻辑卷
6> 将卷组上的硬盘搬家
pvmove /dev/sdd # 将 pv 逻辑卷 sdd 搬家到同一卷组上的其他 pv 成员上(先看现有卷组空间够不够) vgreduce vg0 /dev/sdd # 将/devsdd 从 vg0 中移除 pvremove /dev/sdd # 将/dev/sdd 从物理卷中移除
7> 删除逻辑卷
先取消挂载,删逻辑卷(lvremove),再删除卷组(vgremove),再删物理卷 pvremove
8> 逻辑卷管理器:快照
快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝;
对于需要备份或者复制的现有数据临时拷贝以及其它操作来说,快照是最合适的选择;
快照只有在它们和原来的逻辑卷不同时才会消耗空间。
在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间;
当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中;
快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据;
建立快照的卷大小小于等于原始逻辑卷,也可以使用 lvextend 扩展快照。
使用 LVM 快照:
为现有逻辑卷创建快照: lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
挂载快照: mkdir -p /mnt/snap mount -o ro /dev/vg0/data-snapshot /mnt/snap
恢复快照: umount /dev/vg0/data-snapshot umount /dev/vg0/data lvconvert --merge /dev/vg0/data-snapshot
删除快照: umount /mnt/databackup lvremove /dev/vg0/databackup
xfs 快照实验:
lvcreate -s -n mysql_snapshot -L 1G /dev/vg0/mysql # -s:snapshot,-n:起个名字,针对于/dev/vg0/mysql 创建快照 mount -o nouuid /dev/vg0/mysql_snapshot /mnt/mysql_snapshot/ # 挂载查看数据(可以指定-p r 只读不能挂载;快照的 uuid 和原本 lv 逻辑卷一样) 更改数据,取消逻辑卷和快照的挂载 lvconvert --merge /dev/vg0/mysql_snapshot # 合并逻辑卷和快照 再挂载逻辑卷
ext4 快照实验:
lvcreate -s -n binlog_snapshot -L 1G -p r /dev/vg0/binlog mount /dev/vg0/binlog_snapshot /mnt/binlog_snapshot # ext4 允许 uuid 重复 更改数据,取消逻辑卷和快照的挂载 lvconvert –merge /dev/vg0/binlog_snapshot # 合并逻辑卷和快照 再挂载逻辑卷