什么是 RAID
RAID:RedundantArrays of Inexpensive(Independent)Disks 廉价的独立磁盘
1988 年由加利福尼亚大学伯克利分校(University of California-Berkeley)"A Case for Redundant Arrays of Inexpensive Disks"
多个磁盘合成一个 "阵列" 来提供更好的性能, 冗余, 或者两者都提供
RAID
提高 IO 能力
磁盘并行读写
提高耐用性
磁盘冗余来实现
级别: 多块磁盘组织在一起的工作方式有所不同
RAID 实现的方式:
外接式磁盘阵列: 通过扩展卡提供适配能力
内接式 RAID: 主板集成 RAID 控制器
安装 OS 前在 BIOS 里配置
软件 RAID: 通过 OS 实现
RAID 级别
RAID-0: 条带卷, strip
RAID-1: 镜像卷, mirror
- RAID-2
- ...
- RAID-5
- RAID-6
- RAID-10
- RAID-01
- RAID-0:
读, 写性能提升;
可用空间: N*min(S1,S2,...)
无容错能力
最少磁盘数: 2, 2+
RAID-1:
读性能提升, 写性能略有下降;
可用空间: 1*min(S1,S2,...)
有冗余能力
最少磁盘数: 2, 2N
RAID-4:
多块数据盘异或运算值存于专用校验盘
RAID-5:
读, 写性能提升
可用空间: 6 力: 允许最多 1 块磁盘损坏
最少磁盘数: 3, 3+
RAID-6:
读, 写性能提升
可用空间:(N-2)*min(S1,S2,...)
有容错能力: 允许最多 2 块磁盘损坏
最少磁盘数: 4, 4+
RAID-10:
读, 写性能提升
可用空间: N*min(S1,S2,...)/2
有容错能力: 每组镜像最多只能坏一块
最少磁盘数: 4, 4+
组合 RAID
RAID-01
多块磁盘先实现 RAID0, 再组合成 RAID1
RAID-50
多块磁盘先实现 RAID5, 再组合成 RAID0
JBOD:Just a Bunch Of Disks
功能: 将多块磁盘的空间合并一个大的连续空间使用
可用空间: sum(S1,S2,...)
RAID7
可以理解为一个独立存储计算机, 自身带有操作系统和管理工具, 可以独立运行, 理论上性能最高的 RAID 模式
常用级别:
RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD
软 RAID
mdadm: 为软 RAID 提供管理界面
为空余磁盘添加冗余
结合内核中的 md(multi devices)
RAID 设备可命名为 / dev/md0,/dev/md1,/dev/md2,/dev/md3 等
软件 RAID 的实现
mdadm: 模式化的工具
命令的语法格式: mdadm[mode] <raiddevice> [options] <component-devices>
支持的 RAID 级别: LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
模式:
创建:-C
装配: -A
监控: -F
管理:-f, -r, -a
- <raiddevice>: /dev/md#
- <component-devices>: 任意块设备
-C: 创建模式
- -n #: 使用 #个块设备来创建此 RAID
- -l #: 指明要创建的 RAID 的级别
-a {yes|no}: 自动创建目标 RAID 设备的设备文件
-c CHUNK_SIZE: 指明块大小, 单位 k
-x #: 指明空闲盘的个数 简称备用
-D: 显示 raid 的详细信息
mdadm-D /dev/md#
管理模式:
-f: 标记指定磁盘为损坏
-a: 添加磁盘
-r: 移除磁盘
观察 md 的状态:
cat /proc/mdstat
软 RAID 配置示例
使用 mdadm 创建并定义 RAID 设备
mdadm-C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
用文件系统对每个 RAID 设备进行格式化
mke2fs -j /dev/md0
测试 RAID 设备
使用 mdadm 检查 RAID 设备的状况
mdadm--detail|D/dev/md0
增加新的成员
mdadm-G /dev/md0 -n4 -a /dev/sdf1
软 RAID 测试和修复
模拟磁盘故障
mdadm /dev/md0 -f /dev/sda1
移除磁盘
mdadm /dev/md0 -r /dev/sda1
从软件 RAID 磁盘修复磁盘故障
替换出故障的磁盘然后开机
在备用驱动器上重建分区
mdadm /dev/md0 -a /dev/sda1
mdadm,/proc/mdstat 及系统日志信息
软 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
问题: 如何创建一个软 RAID5 添加一个硬盘备用????????
机器可使用的硬盘:
sdb 8:16 0 50G 0 disk
sde 8:64 0 30G 0 disk
sdc 8:32 0 40G 0 disk
sdd 8:48 0 30G 0 disk
将磁盘分区好:
sdb 8:16 0 50G 0 disk
sdb1 8:17 0 30G 0 part
sde 8:64 0 30G 0 disk
sde1 8:65 0 30G 0 part
sdc 8:32 0 40G 0 disk
sdc1 8:33 0 30G 0 part
sdd 8:48 0 30G 0 disk
sdd1 8:49 0 30G 0 part
partx -a /dev/sdb sde sdc sdd 同步
创建 RAID:
mdadm -C /dev/md0 -a yes -l5 -n3 -x1 /dev/sd{b,c,d,e}1
用于查看创建的 RAID 设备:
mdadm -D /dev/md0
创建文件格式类型:
mkfs.ext4 /dev/md0 -L raid5 -L: 添加卷标
创建与挂载出:
- vim /etc/fstab
- UUID=6f246919-9fc5-4854-9982-8e7f11c16318 /mnt/raid ext4 defaults 0 0
- mkdir /mnt/raid
mount -a 启用
注意: 在使用 RAID 的时候建议最好生成一个 RAID 的配置文件以防下次停止使用时无法读取 RAID 设备
如果要停止 RAID 设备时要先取消挂载才可操作
测试一下 RAID5 的性能: 本人使用的都是固态硬盘所以........
写入的速度测试:
- [root@localhostcentos6 ~]# dd if=/dev/zero of=/data/f1 bs=1M count=1024 本机的普通硬盘写入的性能
- 1024+0 records in
- 1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.46875 s, 240 MB/s
- [root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/raid/f1 bs=1M count=1024 RAID5 写入的性能
- 1024+0 records in
- 1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.47991 s, 433 MB/s
读的速度测试:
- [root@localhostcentos6 ~]# dd if=/data/f1 of=/dev/null 本机的普通硬盘的读取性能
- 2097152+0 records in
- 2097152+0 records out
1073741824 bytes (1.1 GB) copied, 4.17335 s, 257 MB/s
- [root@localhostcentos6 ~]# dd if=/mnt/raid/f1 of=/dev/null RAID5 读取的性能
- 2097152+0 records in
- 2097152+0 records out
1073741824 bytes (1.1 GB) copied, 2.14119 s, 501 MB/s
那么如何停用和启用 RAID 呢????
umount /mnt/raid/
mdadm -S /dev/md0 停用 RAID
mdadm -A /dev/md0 启用 RAID
mount -a
查看 RAID 状态:
mdadm -D /dev/md0
模拟一块硬盘损坏另外一个自动顶替
mdadm /dev/md0 -f /dev/sdc1 模拟 / dev/sdc1 的磁盘损坏
mdadm -D /dev/md0 查看状态
Rebuild Status : 18% complete 备用硬盘自动启动填上去
即便是坏了一硬盘数据还是可访问的有容错性
如何将损坏 / dev/sdc1 的硬盘移走呢????
mdadm /dev/md0 -r /dev/sdc1
还是可以添加回来的 不过成为备用的
mdadm /dev/md0 -a /dev/sdc1
新加的硬盘一般都没有文件系统硬盘空间无法使用该如何解决呢???
centos6:resize2fs /dev/md0 同步文件系统, 只支持 ext 文件格式
centos7:xfs_growfs /mnt/raid 同步文件系统, 支持 xfs 文件格式 注意路径要写挂载的路径
LVM: 逻辑卷管理
允许对卷进行方便操作的抽象层, 包括重新设定文件系统的大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷
用一个或者多个物理卷来创建一个卷组
物理卷是用固定大小的物理区域 (Physical Extent,PE) 来定义的
在物理卷上创建的逻辑卷
是由物理区域 (PE) 组成
可以在逻辑卷上创建文件系统
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
LVM 更改文件系统的容量
LVM 可以弹性的更改 LVM 的容量
通过交换 PE 来进行资料的转换, 将原来 LV 内的 PE 转移到其他的设备中以降低 LV 的容量, 或将其他设备中的 PE 加到 LV 中以加大容量
pv 管理工具
显示 pv 信息
pvs: 简要 pv 信息显示
pvdisplay
创建 pv
pvcreate /dev/DEVICE
vg 管理工具
显示卷组
vgs: 显示卷组的空间
vgdisplay: 显示详细的卷组信息
创建卷组
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
管理卷组
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
删除卷组
先做 pvmove, 再做 vgremove
lv 管理工具
显示逻辑卷
- lvs
- Lvdisplay
创建逻辑卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylvtestvg
lvcreate -l 100%FREE -n yourlvtestvg
删除逻辑卷
lvremove/dev/VG_NAME/LV_NAME
重设文件系统大小
- 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
- lvresize-r -l +100%FREE /dev/VG_NAME/LV_NAME
缩减逻辑卷:
- umount/dev/VG_NAME/LV_NAME
- e2fsck -f /dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME #[mMgGt]
- lvreduce-L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
- mount
跨主机迁移卷组
源计算机上
1 在旧系统中, umount 所有卷组上的逻辑卷
2 vgchange-a n vg0
- lvdisplay
- 3 vgexportvg0
- pvscan
- vgdisplay
拆下旧硬盘
在目标计算机上
4 在新系统中安装旧硬盘, 并 vgimportvg0.
5 vgchange-ay vg0
6 mount 所有卷组上的逻辑卷
创建逻辑卷示例
创建物理卷
pvcreate /dev/sda3
为卷组分配物理卷
vgcreate vg0 /dev/sda3
从卷组创建逻辑卷
lvcreate -L 256M -n data vg0
- mke2fs -j /dev/vg0/data
- mount /dev/vg0/data /mnt/data
逻辑卷管理器快照
快照是特殊的逻辑卷, 它是在生成快照时存在的逻辑卷的准确拷贝
对于需要备份或者复制的现有数据临时拷贝以及其它操作来说, 快照是最合适的选择
快照只有在它们和原来的逻辑卷不同时才会消耗空间
在生成快照时会分配给它一定的空间, 但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
当原来的逻辑卷中有所改变时, 会将旧的数据复制到快照中.
快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据
建立快照的卷大小只需要原始逻辑卷的 15%~20% 就够了, 也可以使用 lvextend 放大快照
快照就是将当时的系统信息记录下来, 就好像照相一般, 若将来有任何数据改动了, 则原始数据会被移动到快照区, 没有改动的区域则由快照区和文件系统共享
由于快照区与原本的 LV 共用很多 PE 的区块, 因此快照与被快照的 LV 必须在同一个 VG 中. 系统恢复的时候的文件数量不能高于快照区的实际容量
使用 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
小实例:
在硬盘上做两个 LVM 的分区 / dev/sdb1,/dev/sdc1 大小各 2G
将普通的硬盘分区变成物理卷呢:
pvcreate: 用于创建物理卷
pvdisplay: 查看物理卷看比较详细
pvs 用于查看物理卷
pvcreate /dev/sdb1 创建物理卷
pvcreate /dev/sdc1 创建物理卷
创建卷组:
vgs: 查看现有的卷组
vgdisplay: 查看更详细的卷组
- vgcreate -s 18M vg1 /dev/sdb1
- vgcreate -s 18M vg2 /dev/sdc1
创建逻辑卷:
lvcreate -n lv1 -l 100 vg1
lvdisplay: 查看创建的逻辑卷
将剩余的逻辑卷全部用完:
lvcreate -n lv2 -l 100%FREE vg1
100%FREE: 将分区里的剩余空间全部用完
创建文件格式:
- mkfs.ext4 /dev/vg1/lv1
- mkfs.ext4 /dev/vg1/lv2
挂载设备:
- UUID=d60bf3e2-dede-4507-9e58-c16a46c45a63 /mnt/lv1 ext4 defaults 0 0
- UUID=3894bb11-c5e7-4be5-b4c3-ef4ce4461b27 /mnt/lv2 ext4 defaults 0 0
- mkdir /mnt/lv1
- mkdir /mnt/lv2
mount -a 启用挂载
测试性能:
- [root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/lv1/f1 bs=1M count=10241024+0 records in
- 1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.09417 s, 118 MB/s
如遇到逻辑卷空间不足如何增加空间:
首先加一块新的硬盘:
在添加硬盘之后须执行: 我加了一个 20G 的新硬盘名称:/dev/sdd
echo '- - -'> /sys/class/scsi_host/host2/scan 扫描识别新添加的硬盘
直接用整块硬盘做, 可直接做成物理卷:
pvcreate /dev/sdd
添加进之前的 vg1 卷组:
- [root@localhostcentos6 ~]# vgextend vg1 /dev/sdd
- Volume group "vg1" successfully extended
- [root@localhostcentos6 ~]# pvs 或 vgdisplay 用于查询
PV VG Fmt Attr PSize PFree
- /dev/sdb1 vg1 lvm2 a--u 2.00g 0
- /dev/sdc1 vg1 lvm2 a--u 2.00g 0
/dev/sdd vg1 lvm2 a--u 19.99g 19.99g
将刚添加的新硬盘添加进 / mnt/lv1:
lvextend -L +10G /dev/vg1/lv1
注意: 添加完之后 df 中的添加的 10G 空间释放必须要同步一下即可:
resize2fs /dev/vg1/lv1
其实也可以直接带参数选项:
lvextend -r -l +100%FREE /dev/vg1/lv1
-r: 同步
-l +100%FREE: 硬盘下的剩余空间
当遇到逻辑卷空间比较大时可以缩减的 centos7 是不行的用于 centos6:
缩减 5G:
e2fsck -f /dev/vg1/lv1 先检查完整性才可执行缩减
resize2fs /dev/vg1/lv1 5G
缩减逻辑卷: 注意可能会损坏数据
lvreduce -L 5G /dev/vg1/lv1
mount -a 将 / mnt/lv1 挂载回去
RAID 和逻辑卷管理器(LVM)
来源: http://www.bubuko.com/infodetail-2618293.html