RAID (Redundant Arrays of Independent Disks )
Level仅代表磁盘组织方式不同,没有优劣之分,是速度和可用性的折中
==========================================
0条带
1mirror
4校验码(异或,校验码固定存储在一块磁盘上。)
5校验码(异或,校验码分散在各个盘上,各磁盘轮流做校验码盘。)
6校验码(异或,两块校验盘。)
01先条带后镜像(从下往上看),称为01
10先镜像后条带(从下往上看),称为10
RAID级别(level:0~6)
RAID-0:条带卷,stripe
数据被分散到各个独立磁盘,没有冗余,可靠性差。
IO性能:读写性能提升;
冗余能力:无
最少磁盘数2,2+
可用空间为N*min(S1,S2,S3...);
RAID-1:镜像卷,mirror
IO性能:写性能无提升,读数据有提升;
冗余能力:有
最小磁盘数2,2+
可用空间N*min/2;
RAID-2:不常见
RAID-3:不常见
RAID-4:一份校验数据,有一个盘作为校验盘(固定)
RAID-5:一份校验数据,可轮流作为校验盘
IO性能:读写提升
冗余能力:有
最少磁盘数目3
可用空间(N-1)*min;
RAID-6: 两份校验数据,轮流作为校验盘
RAID01:先做成RAID0,再做成RAID1
IO性能:读写提升
冗余能力:有
最小磁盘数:4
RAID10:先做成RAID1,再做成RAID0
IO性能:读写提升
冗余能力:有
最小磁盘数:4
JBOD:Just a Bunch Of Disks
功能:将多块磁盘的空间合并成一个大的连续空间使用。一个磁盘写满后接着写下一块磁盘。
不解决速度问题(因为顺序读写)和冗余(可用性)问题。
Hadoop推荐使用JBOD,而非RAID
==========================================================================
硬RAID:通过磁盘阵列卡来完成对磁盘阵列的管理,卡上有专门的ASIC。
软RAID:通过软件模拟硬件完成对磁盘阵列的管理,内核模块模
md(multi disks)拟RAID控制器,计算机上的多块硬盘(or 分区)可以组成RAID。
/dev/md#
mdadm (将任何块设备做成RAID
)模式化的命令
mdadm [mode] <RAID_Device> [options] <component device>
--create |
-C
创建模式
-l --level= 级别
-n --raid-devices= 设备个数
-x --spare-devices= 空闲盘个数
-a --auto={yes|no} 是否自动为其创建设备文件,即:md#
-c chunk大小,2^n
mdadm --create /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sda{5,6,7,8,9}
查看刚刚建立的RAID阵列详细信息,可以使用如下命令:
mdadm -D /dev/md0
cat /proc/mdstat
--manage
管理模式
-a --add 热插一个设备(模拟添加一个component device)
-r --remove 热拔一个非active的设备(模拟拔除一个component device)
-f --fail 将某设备标记为faulty(模拟损坏 component device )
mdadm --manage /dev/md0 -f /dev/sda8
mdadm --manage /dev/md0 -r /dev/sda8
mdadm --manage /dev/md0 -a /dev/sda10
--manage可以省略,使用如下格式:
mdadm [options] RAID_Device [options] Component_Device
mdadm -f /dev/md0 /dev/sda8
mdadm -r /dev/md0 /dev/sda8
mdadm -a /dev/md0 /dev/sda10
mdadm -D /dev/md0
mdadm /dev/md0 -f /dev/sda8
mdadm /dev/md0 -r /dev/sda8
mdadm /dev/md0 -a /dev/sda10
杂项模式
mdadm --detail RAID_Device 或 -D 显示RAID设备(md设备)详细信息
mdadm --stop RAID_Device 或 -S 停止使用某RAID设备(md设备) ----->
stop md#设备后,/dev下再也找不到md#,只有重建。
执行 mdadm –D –-scan >> /etc/mdadm.conf 得到配置文件,然后mdadm -A 可以激活设备(前提是原raid成员都还在,或存在数量能够具有恢复能力)
-S 停掉 raid 后,原 raid member 设备上有元数据存留,若以后不再使用该raid,用
mdadm --zero-superblock /dev/sdb1 ,可以将其抹掉(填充0)。
-F 监控模式:
-G 增长模式:
mdadm –G /dev/md0 –n4 -a /dev/sdf1
增加 RAID 成员后,也要同步文件系统,使用 resize2fs 或 xfs_growfs
-A 装配模式:
--add,--del 管理模式:
软RAID制作完成后,经过格式化和挂载,就能够被使用了。删除软RAID的顺序正好相反:umount--->stop RAID_Device--->
将当前RAID信息保存至配置文件,以便以后进行装配:
mdadm -D --scan > /etc/mdadm.conf
watch 周期性地执行一个命令,并把结果全屏显示出来
watch -n 'COMMAND'(单引号)
-n # 单位为s,默认为2s
===============================================================
LVM(Logical Volume Manager)
LVM被设计用来实现弹性调整文件系统的容量,而不是数据的读写性能及安全性方面。
LV技术可以被认为是一种介于文件系统和内核之间的一层,lsblk -f 可以看到 LV 的文件系统在其之上。这样文件超级块中记录的磁盘信息,就不是真正的磁盘信息,而是LV那一层抽象给文件系统的。
---------------------------------------------------------------------------------------------------------
PV(physical volume 划分为PE
) ---> pvcreate, pvs, pvdisplay, pvremove, pvmove
创建PV的时候,可以用分区,磁盘,meta device 或loopback文件
1. 如果MBR分区的type不是8e会怎样? 如果GPT分区的type不是8e00会怎样? <--- 并不影响
2. 分区粒度,如果存在文件系统,会怎样? <--- LVM会检测到,并给出询问是否抹除;
3. 磁盘粒度,如果MBR 或 GPT 分区表还存在的话会怎样? 如果分区表和分区同时存在,为了防止数据被破坏,不会创建PV。如果只存在MBR分区表,则LVM会检查 MBR 512Byte 结尾的魔术字是否为0x55aa,如果是,则会提示有分区表存在。如果只存在GPT分区表,则不会创建PV。
pvs的结果如何得到的?---> pvs遍历磁盘,找到LVM2_member类型的分区或设备
pvcreate PARTITION
pvmove SRC_PV [DST_PV] 将PE从一个PV移出(需要有足够空间装这些来源PE),不指定DST_PV,则系统会自动分配. <--- 在线还是离线?影响LV工作否?
===============================================================
VG (volume group)---> vgcreate, vgextend, vgreduce, vgs, vgdisplay,
vgcreate VG_NAME Physical_Device_Path [PhysicalVolume...]
-s 指定
PE 大小,默认4M
vgextend VG_NAME Physical_Device_Path [PhysicalVolume...] 扩展VG, 即增加PV
vgreduce VG_NAME Physical_Device_Path [PhysicalVolume...] 缩减VG,即移出PV
VG 迁移
可以将 VG 从一台计算机迁移到另一台计算机,如果被迁移磁盘仅仅含属于该 VG 的 PE
1. 将属于该 VG 的 LV 卸载(umount)
2.
vgchange -a n my_VG <--- 即设置活动状态为no,执行后可用 lvdisplay 验证下,LV 的状态已经是 not available 了
3.
vgexport my_VG <--- 即导出 VG,可用 vgdisplay 验证下,VG 的状态已经是 exported
4. 移出相关磁盘到新的计算机
5. 新的计算机上
vgimport my_VG
6.
vgchange -a y my_VG
7. 如果使用该 LV,则挂载之
===============================================================
LV (logical volume)---> lvcreate, lvextend,
lvcreate
lvcreate -L LV_SIZE -n LV_NAME VG_NAME [PV_NAME] <--- 选项 L 指定size, l 指定PE个数
创建完成后设备文件位于:
/dev/VG_NAME/LV_NAME 或
/dev/mapper/VG_NAME-LV_NAME
lvextend
<--- 只能增加
lvextend -L [+]# /dev/VG_NAME/LV_NAME [PV_NAME]
lvextend 后,若有filesystem,其也要extend,ext文件系统使用
resize2fs /dev/VG_NAME/LV_NAME
<--- resize2fs 等工具的作用可以对比操作前后的超级快中的数据
xfs文件系统使用xfs_grofs /dev/VG_NAME/LV_NAME
xfs_growfs /dev/VG_NAME/LV_NAME
fsadm 则同时支持 ext,xfs,ReiserFS
fsadm resize /dev/VG_NAME/LV_NAME new_size //注意xfs 只能扩容不能缩容
或者 lvextend 加上
-r 选项可以同时 extend LV 和 filesystem
lvreduce
<--- 只能缩减
lvreduce -L [-]# /dev/VG_NAME/LV_NAME <--- 不能指定PV,万一PV里面有filesystem数据呢
-r 选项同样可以同时reduce LV 和 filesystem
缩减lv不是问题,关键是文件系统的缩减。先缩减文件系统尺寸,然后缩减 LV 尺寸。
lvresize
<--- 可增加可缩减
-r 选项同样可以同时reduce LV 和 filesystem
===============================================================
LV 快照
快照是一种特殊的逻辑卷,与源 LV 处于同一个 VG 中
创建
lvcreate -L 200M -n my_snap_on_LV -p r -s /dev/my_VG/my_LV <--- 创建完成后自动同步文件系统,不需要格式化
-s OriginalLogicalVolume 为源 LV 制作快照,快照和源 LV 处于同一个 VG 中
-p { r | rw } 设置逻辑卷 permission,默认rw。快照建议为 r ,或者 rw 但在挂载时设置为只读,避免人为写入数据。
恢复
恢复前,先解挂要恢复的逻辑卷
lvconvert --merge /dev/
my_VG/my_snap_on_LV