RAID 和 LVM 简单学习笔记
RAID
RAID 简介
RAID: Redundant Arrays of Inexpensive (Independent) Disks 廉价(独立)的磁盘冗余阵列。1988 年由加利福尼亚伯克利分校一个研究人员提出。多个磁盘组成一个’阵列’来提供更好的性能、冗余,或者两者都提供,当然可以提供更大的存储空间。
RAID 实现的方式
- 外接式磁盘阵列,通过扩展卡提供适配能力
- 内接式磁盘阵列,主板集成 RAID 控制器,安装操作系统前在 BIOS 中进行配置
- 软件磁盘阵列,通过操作系统实现
RAID 级别
这里的级别是指,多块磁盘组织在一起的工作方式。
- RAID-0: 条带卷,strip
- RAID-1: 镜像卷,mirror
- RAID-5
- RAID-6
- RAID-10
- RAID-01
一般根据需要使用 RAID-0、RAID-1、RAID-5、RAID-6、RAID-10。
RAID-0
该级别是加速的方式,即读写文件数据时,会把数据切割成以 ‘chunk’ 为单位的数据,按照一定的次序分别写入组成的磁盘中(磁盘数量 N >= 2 )。但是缺点是没有容错性,只有其中的一块硬盘出问题,所有的数据无效。
RAID-1
该级别是冗余的方式,即在写入数据时,同时在组成的磁盘中写入相同的数据(N >=2),这时具有容错性,但是磁盘空间只有一半,写速度没有提升,读性能有提升。
RAID-5
该级别是改进了 RAID-4 的基础上出现的,至少需要三块磁盘,每次写入数据时,也需要进行指定大小的切割,然后在组成磁盘数量按次序写入,但是有一块磁盘不是用于存放数据,而是用于存放其他几个磁盘数据的校验数据,且存放校验的磁盘是按照次序轮流的。
这样,读写性能提升,也有冗余。但是磁盘的使用率是 (N -1)/N。
RAID-6
该级别是在 RAID-5 基础上,增加了一个用于校验的磁盘,容错性更好。但是磁盘至少 4 块,其利用率为 ‘(N-2)/N’。
RAID-10
这是结合 RAID-1 和 RAID-0 两种方式。即先进行镜像式组合,然后再条带时组合。至少 4 块磁盘,利用率 50%。一般来说,这个容错性更好。
RAID-10
这是结合 RAID-0 和 RAID-1 两种方式。即先进行镜像式组合,然后再条带组合。至少 4 块磁盘,利用率 50%。
RAID-50
组合使用 RAID-5 和 RAID-0,容错性更好,但是利用率降低了。
JBOD
JBOD: Just a Bunch of Disks
其实现将多块硬盘的空间逻辑上合并成一个大的连续的空间。
逻辑卷管理器(LVM)
LVM: Logical Volume Manager,允许对卷进行方便操作的抽象层。包括可以重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统等。
其能够把多个物理磁盘组成到一个卷组中,且如果需要可以随时增加磁盘来扩充空间。
实现过程:
- 指定设备为物理卷
- 使用一个或多个物理卷来创建一个卷组,物理卷使用固定大小的物理区域(Physical Extent, PE)来定义
- 在物理卷上创建的逻辑卷,是由 PE 组成的
- 在逻辑卷上创建文件系统并挂载
第一个逻辑卷对应的设备名为 /dev/dm-N
。‘dm: device mapper’,将一个或多个底层块设备组成一个逻辑设备的模块。
以上的设备名不便于记忆,在 CentOS 6 开始使用软连接,以下两种都存在:
/dev/mapper/VGNAME-LVNAME
/dev/VGNAME/LVNAME
在CentOS 5 上是使用这种名称,不是软连接。
示例:
/dev/mapper/vo10-root
/dev/vo10/root
实现逻辑卷
先准备几个分区或硬盘,可以使用 fdisk
来实现,注意其分区类型是 ‘8e’(Linux LVM),例如创建了 ‘sdd1, sdd2, sde1’。
如果没有 pvcreate
命令可用,需要安装 lvm2
包。
dnf -y install lvm2
pv、vg、lv 管理工具
-
物理卷管理
显示物理卷(pv, Physical volume)信息
# 简要显示信息 pvs # 显示详细信息 pvdisplay
创建物理卷
pvcreate /dev/sdd1 /dev/sdd2 ...
移动
pv
pvmove /dev/devicename
删除
pv
pvremove /dev/deviecname
-
卷组管理
显示卷组信息
vgs vgdisplay
创建卷组 vg
vgcreate vg_mysql /dev/sdd1 /dev/sdd2
扩展卷组
vgextend vg_mysql /dev/sde1
-
逻辑卷管理
显示逻辑卷
lvs lvdisplay
创建逻辑卷
lvcreate -n lv_data -L 500M vg_mysql # 此时生成的设备名 /dev/vg_mysql/lv_data ll /dev/vg_mysql/lv_data ... /dev/vg_mysql/lv_data -> ../dm-0 ll /dev/mapper/vg_mysql/lv_data ... /dev/mapper/vg_mysql/lv_data -> ../dm-0
扩充逻辑卷的空间
lvextend -l +100%free /dev/vg_mysql/lv_data # 另一种格式 lvextend -l +100%vg_mysql /dev/vg_mysql/lv_data
查看并扩充文件系统的空间
blkid /dev/vg_mysql/lv_data # 对于 ext4 文件系统使用 resize2fs /dev/vg_mysql/lv_data # 对于 xfs 文件系统使用 xfs_growfs /dev/vg_mysql/lv_data
使用选项
-r
可以同时扩展逻辑卷空间并调整文件系统的空间lvextend -r -L +1G /dev/vg_mysql/lv_data
从以下实验室可知,使用逻辑卷的性能比普通分区要好多了。
dd if=/dev/zero of=/dev/sda2/image bs=1M count=1024
dd if=/dev/zero of=/dev/vg_mysql/lv_data/image bs=1M count=1024
其实物理卷可以使用 RAID 技术,这样的结合,不仅有冗余,性能也好。
注意:想要缩减逻辑卷,必须要取消挂载才能操作及文件系统必须是 ‘ext’ 系列,‘xfs’ 不支持缩减,并且,缩减的空间不能出现比现有数据需要的空间少的情况。
为了确保数据的安全性,建议缩减前对数据进行备份。
# 取消挂载
umount /dev/VGNAME/LVNAME
# 检查文件系统
e2fsck -f /dev/VGNAME/LVNAME
# 缩小文件系统空间大小
resize2fs /dev/VGNAME/LVNAME N[mMgGtT]
# 缩减逻辑卷大小
lvreduce -L [-]N[mMgGtT] /dev/VGNAME/LVNAME
# 重新挂载
mount ...
如果想要把已经使用的物理磁盘拆除或更换,需要把该磁盘已被使用的 ‘pe’ 移动到同一个卷组的 ‘pe’ 上去。条件是这些要移动的空间在同一个卷组中是空间可以存放的。
# 移走
pvmove /dev/sde1
# 从组中删除
vgreduce vg0 /dev/sde1
# 删除物理卷
pvremove /dev/sde1
跨主机迁移卷组
源计算机上
-
umount
所有卷组上的逻辑卷 -
禁用卷组
vgchange -a n vg0 lvdisplay
-
到处卷组
vgexport vg0 pvscan vgdisplay
-
拆下所有的旧硬盘并装入目标电脑,并导入卷组
vgimport vg0
-
启用
vgchange -ay vg0
-
mount
所有卷组上的逻辑卷
逻辑卷快照
逻辑卷快照原理
快照是特殊的逻辑卷。在创建逻辑卷快照时,创建一个与源卷相同或较小的快照空间,此时该卷是空的,只有在源卷发生改变时才把发生变化的原始文件拷贝出来。对于不断发生变化的卷中,想要复制或备份现有数据,快照时最合适的选择。对于没有发生变化的数据,两个卷是共享的。
由于快照区与原卷的 lv 共享很多 PE 块,因此快照与原卷的 lv 必须在同一个 vg 中,系统恢复时的文件大小不能高于快照区的实际大小。
实现逻辑卷快照
示例:
mkfs.ext4 /dev/vg0/data
mount /dev/vg0/data /mnt/data
# 为现有逻辑卷创建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vgo/data
# 或者
lvcreate -l 64 -s -n data-snapshot /dev/vgo/data
# 挂载快照
mkdir -p /mnt/snap
# 在 xfs 文件系统中需要选项 -o nouuid
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 /dev/databackup
lvremove /dev/vg0/databackup