1 RAID (独立冗余磁盘阵列)

RAID 技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段之后分别存在各个不同的物理硬盘设备上,然后利用分散读写计数来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

RAID的优点是: 非常好的数据冗余备份功能,降低了磁盘损坏后的丢失数据的机率,还提升了硬盘的读写速度。

缺点: 增加成本支出。

  常见的 RAID磁盘阵列方案:

1)RAID0

RAID0:把多块物理硬盘通过硬件或软件的方式串联在一起,组成一个大的卷组,并把数据依次写到各个物理硬盘中。RAID0能够有效提升硬盘数据的读写速度,但是不具备数据备份和错误修复能力)。如下图所示,数据会被分别写入到不同的硬盘设备中,即disk1和disk2依次轮流存储数据,提升了读写速度,但任一个盘发生故障整个系统的数据都会破坏。

  

2) RAID1

RAID1 把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可看作备份或镜像)。当其中一个硬盘发生故障后,一般会立即自动以热交换方式来恢复数据的正常使用。RAID1没有提供读写速度,硬盘空间真实可用率减半,数据安全性提高。

3) RAID5

RAID5 技术是把硬盘设备的数据奇偶校验信息保存到其他的设备中。这样的好处是其中任何一个设备损坏后不至于出现致命的缺陷,原因是:当硬盘设备出现故障之后通过奇偶校验信息来尝试重建损坏的数据。 RAID5兼顾了硬盘设备的读写速度、数据安全性和存储成本问题。

4) RAID10

RAID10是RAID1+RAID0技术的一个组合体。RAID10技术需要至少4块硬盘来组建,其中分别两两制成RAID1磁盘阵列,以保证数据的安全性,然后在对两个RAID1磁盘阵列实施RAID0技术,进一步提高硬盘设备的读写速度。

只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

5)部署磁盘阵列

mdadm命令

mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为mdadm [模式] <RAID设备名称> [参数] [成员设备名称]。



例程:用mdadm命令来创建RAID10,名称为"/dev/md0".编写脚本。

#!/bin/bash
# example for create RAID10 ##先关闭虚拟机,然后新建立4个硬盘,大小可以自定义。
ls /dev/sd*
#create RAID10 ,命名为/dev/md0,由4个盘组成,显示创建过程且自动创建设备文件
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
#格式化md0为ext4格式
mkfs.ext4 /dev/md0
#创建挂载点
mkdir /RAID
#把MD0挂载到RAID上
mount /dev/md0 /RAID
#查看挂载状态和硬盘使用量信息,可以看到,4个硬盘组成RAID 10
df -h
#查看/dev/md0磁盘阵列的详细信息
mdadm -D /dev/md0
#往/etc/fstab文件中追加挂载信息,实现永久挂载
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

6)损坏磁盘阵列及修复

例程2:在例程1上模拟磁盘损坏和修复。

#!/bin/bash
# example for RAID10磁盘阵列损坏和修复,这里接上个实验 ##这里是模拟磁盘损坏,可以直接删除某个磁盘,也可以使用软件移除硬盘
#这里假设sdd硬盘损坏 #把/dev/sdd从磁盘阵列/dev/md0中移除,软件移除
mdadm /dev/md0 -f /dev/sdd
#查看磁盘这列/dev/md0详细信息,发现/dev/sdd状态从active变为faulty
mdadm -D /dev/md0 #重启系统,
reboot
###下面的命令不会执行,需要手动执行或另外写文件重启后执行
# 卸载/RAID目录
umount /RAID #如果磁盘直接被删除,则关闭虚拟机再添加一块硬盘 ,如果使用命令移除则不需要。
#查看新加的磁盘
ls /dev/sd*
#把新硬盘添加到RAID磁盘阵列中
mdadm /dev/md0 -a /dev/sdd
#查看磁盘阵列/dev/md0详细信息,/dev/sdd正在 spare rebuilding,然后变回active
mdadm -D /dev/md0
#重新挂载
mount -a

7)磁盘阵列+备份盘

例程3:创建一个带备份的RAID5磁盘阵列。

#!/bin/bash
# example for 创建RAID5磁盘阵列+备份功能 ##关闭虚拟机创建4个硬盘。大小自定义 #查看新建的硬盘
ls /dev/sd*
#用3块硬盘创建RAID 5磁盘阵列,再用1块作为备份盘
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[c-f]
#查看磁盘阵列详细信息,显示3个盘为actvie,1个盘为spare,RAID类型为RAID 5
mdadm -D /dev/md0
#格式化md0
mkfs.ext4 /dev/md0
#往/etc/fstab文件追加挂载信息,以实现永久挂载
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
#创建挂载点
mkdir /RAID
#刷新挂载
mount -a
#故意移除RAID 5阵列中的其中一个盘(active的盘)
mdadm /dev/md0 -f /dev/sdd
#再查看磁盘阵列/dev/md0详细信息,显示备份盘自动定提上去并开始数据同步(spare rebuilding)。
mdadm -D /dev/md0

LVM(逻辑卷管理器)

RAID可以有效提高硬盘的读写速度和安全性,但是却无法调整硬盘分区的大小。LVM可以允许用户对硬盘资源大小进行动态的调整。

LVM技术是在硬盘的分区和文件系统之间添加一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样用户不用关系物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。



PE(Physical Extent):表示最小的物理单元,分区之后的逻辑卷必须是PE的整数倍。也可以理解为一个单位。

PV(物理卷,Physical Volume):物理卷,表示实际硬盘的大小,处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。

VG(卷组,Volume Group):建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷;大小是总和。

LV(逻辑卷,Logical Volume):逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间;

1)部署逻辑卷



部署 LVM的顺序是:配置物理卷 --> 配置卷组 -->配置逻辑卷。

例程1:编写shell脚本。先新建2个物理卷组,再对硬盘进行卷组合并,接着切割150M的逻辑卷设备 -->把逻辑卷设备格式化为Ext4文件系统后挂载使用。

#!/bin/bash

#测试LVM程序,生成逻辑卷

ls /dev/sd*                     	#查看硬盘情况
pvcreate /dev/sdb /dev/sdc #建立物理卷管理
vgcreate storage /dev/sdb /dev/sdc #建立卷组管理
vgdisplay #显示卷组管理
#建立逻辑卷管理,大小可以使用-L 150M直接指定,
#也可以使用 -l 37 来指定基本单元的个数,基本单元默认大小为4MB
lvcreate -n vo -l 37 storage
lvdisplay #显示建立的逻辑卷
mkfs.ext4 /dev/storage/vo #格式化
mkdir /share
mount /dev/storage/vo /share #挂载
df -h #查看状态
echo "/dev/storage/vo /share ext4 defaults 0 0" >>/etc/fstab #直接写入文件配置,永久挂载

2)扩容逻辑卷

注意:扩容之前先卸载设备和挂载点的关联。

1、扩容逻辑卷(lvextend)。

2、检查磁盘完整性(e2fsck),并重置硬盘容量(resize2fs)。如果明明执行了多次e2fsck命令还是提示“运行e2fsck命令”,重启系统再试。

3、重新挂载硬盘设备并查看挂载的状态。

例程:将上面的例程种的逻辑卷vo扩展到400M.

umount /linuxprobe                  #卸载设备和挂载点关联
lvextend -L 400M /dev/storage/vo #扩容逻辑卷vo至400M
e2fsck -f /dev/storage/vo #检查硬盘完整性
resize2fs /dev/storage/vo #重置硬盘容量,如果明明执行了多次e2fsck命令还是提示“运行e2fsck命令”,重启系统再试。
mount -a #重新挂载
df -h #查看挂载状态

3)缩小逻辑卷

注意:缩容之前先卸载设备和挂载点的关联。

1、检查磁盘完整性(e2fsck)。

2、先向系统报备一下即将要执行的逻辑卷的缩容操作(resize2fs),再缩容逻辑卷(lvreduce)。

3、重新挂载硬盘设备并查看挂载的状态。

例程:将上面的例程种的逻辑卷vo缩容到120M.

umount /linuxprobe                  #卸载
e2fsck -f /dev/storage/vo #检查文件系统完整性
resize2fs /dev/storage/vo 120M #先通知系统,即将要执行对逻辑卷vo缩容到120M的操作,看有没有问题
lvreduce -L 120M /dev/storage/vo #把逻辑卷vo缩容至120M
mount -a #重新挂载
df -h #查看挂载状态

4)逻辑卷快照

LVM快照:类似于虚拟机软件的还原时间点功能。

可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。

LVM的快照卷功能有两个特点:

  • 快照卷的容量必须等同于逻辑卷的容量;
  • 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。不过一个逻辑卷可以做多个快照卷。

实例:承接上面例子,往逻辑卷设备新建一个文件。然后为逻辑卷创建快照卷。再在逻辑卷目录生成一个垃圾文件。后先卸载逻辑卷与挂载点关联,再尝试快照还原操作(lvconvert --merge),再重新挂载,查看逻辑卷目录是否回到创建快照前的状态。

vgdisplay 		#查看卷组信息
echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt #往逻辑卷设备写入一个文件
ls -l /linuxprobe #查看逻辑卷目录的内容
lvcreate -L 120M -s -n SSS /dev/storage/vo #为逻辑卷vo生成一个快照卷,命名为SSS,指定切割大小为120M,
lvdisplay #查看逻辑卷详细信息,可以看到SSS是vo的快照卷(snapshot)
dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M #在逻辑卷vo的目录下创建一个100M的文件
lvdisplay #查看逻辑卷详细信息,可以发现vo的空间占用量上升
umount /linuxprobe #卸载逻辑卷与挂载点关联
lvconvert --merge /dev/storage/SSS #对逻辑卷vo进行快照还原操作
mount -a #重新挂载
ls /linuxprobe/ #查看逻辑卷目录,可以发现创建快照后再创建的100M文件不见了,逻辑卷恢复成设置快照前的状态

5)删除逻辑卷

删除LVM前记得提前备份。

删除逻辑卷,要依次删除逻辑卷(lvremove )、卷组(vgremove )、物理卷设备(pvremove ),顺序不可颠倒。

实例:承接上面例子,删除逻辑卷。

umount /linuxprobe                               #卸载
vim /etc/fstab

/dev/storage/vo /linuxprobe ext4 defaults 0 0 #删除挂载信息

lvremove /dev/storage/vo                         #删除逻辑卷,要按y确认
vgremove storage #删除卷组
pvremove /dev/sdb /dev/sdc #删除物理卷

参考:

https://www.cnblogs.com/kaminwu/p/10916161.html#no0202

最新文章

  1. Npm install failed with “cannot run in wd”
  2. php 图片验证码生成 前后台验证
  3. MVC 知识点学习2
  4. Web Form 和asp.net mvc 差别
  5. Linux环境安装jdk
  6. 在Silverlight中实施RESTful调用
  7. poi excel文件上传并解析xls文件
  8. 实现AJAX局部刷新以及PageMethod方法的使用
  9. aMule代码分析(2)——CFileDataIO类和CFile类
  10. Libevent(2.1.8)中的事件结构和管理
  11. pycharm的list的应用
  12. day 15 模块、起别名、from导入
  13. Xshell 连接Linux服务器自动中断问题
  14. &lt;T extends Comparable&lt;? super T&gt;&gt;什么意思
  15. OpenCV不同类型Mat的at方法访问元素时该如何确定模板函数的typename(转)
  16. (转)WebSocket学习
  17. Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值
  18. MyBean-关于单实例插件
  19. (转)代号为Purley的新一代服务器平台
  20. MySQL Proxy 实现MySQLDB 读写分离

热门文章

  1. selenium控制超链接在当前标签页中打开或重新打开一个标签页
  2. 利用Python读取图片exif敏感信息
  3. nginx 安装第三方模块(lua)并热升级
  4. 回顾Python装饰器
  5. django 基础1
  6. boost与MFC的冲突(new)
  7. 20180610模拟赛T1——脱离地牢
  8. dedecms手机站和PC站共用同一数据库的方法
  9. 排序算法-快速排序(Java)
  10. Utterance-level Aggregation for Speaker Recognition in The Wild