磁盘接口的性能决定着磁盘数据传输的速率,一般磁盘设备接口的读写标准如下:
|
正如我们所知道的,不同的硬盘数据存储的性能和内部机制存在着大大小小的差异:
IDE:
l 指把控制器与盘体集成在一起的硬盘驱动器,我们常说的IDE 接口,也叫ATA接口(并行);
l 并行双通道;
SATA:
u SATA是Serial ATA的缩写,即串行ATA。它是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输之用。
u 串行高传输速率;
u 支持热插拔;
u 采用了点对点传输协议,每一个硬盘与主机通信时都独占一个通道,系统中所有的硬盘都是对等的,因此,在串行ATA中将不存在“主/ 从”盘的区别,用户也不用再费事去设置硬盘的相关跳线了。
SCSI:
一种总线型的系统接口,每个SCSI总线上可以连接包括SCSI控制卡在内的8/16个SCSI设备;
支持冗余磁盘阵列(RAID)等多种设备;
SCSI磁盘自身携带有类似与CPU的小型控制设备,可以解放CPU,结合独立总线使得SCSI设备的CPU占用率很低,大大的提高传输速率;
每个SCSI ID上最多有32个LUN,一个LUN对应一个逻辑设备;
窄SCSI接口(8 target)
控制器端也占用一个target。
当CPU向SCSI设备发送指令/存储数据时,SCSI设备怎么知道目标磁盘是哪一个?
CPU发来的数据的首部包含了目标设备的targetID和LUN ID等控制信息,通过控制器的解释后,控制器会一步步将该指令/数据定向到目标设备。
在小型计算机/服务器中,它们可以妥妥的满足用户/系统的需求;但是对于大型公司的数据存储,IO存取的速率会远远超过单个磁盘提供的的标准性能,这就这就形成了一个IO瓶颈。那么,这种瓶颈该如何打破呢?
RAID应运而生,它是指将多个独立的物理硬盘按照不同的方式组合起来,形成一个虚拟的硬盘;
如上所示,系统内部中的IDE磁盘性能较低,在无法满足系统正常运行所需需求的情况下,就需要对磁盘性能进行提升。特别是对于一些公司内部重要的服务器,正在运行中,但是又不可能停下来,换一块更大的硬盘,然后继续运行,这样的话,公司的损失是巨大的;那么只有在系统运行的情况下进行冗余技术和热备、热换;
我们可以在计算机的外部提供一个控制器,该控制器支持SCSI接口,通过SCSI接口的总线,我们可以接上更多的硬盘,这些硬盘是并行的,所以会大大提高传输速率;
但在与CPU来看,外部磁盘设备相当于一个整体,数据存储是通过控制器2来实现分发和镜像的。
根据RAID组织的不同方式可以将RAID分成不同的级别:
RAID 0:条带
l RAID0是以条带的形式将数据均匀分布在阵列的各个磁盘上
RAID 1:镜像
l RAID1以镜像为冗余方式,对虚拟磁盘上的数据做多份拷贝,放在成员磁盘上
RAID2:
l 采用校验冗余
à 把数据分散为位或块,加入汉明码,间隔写入到磁盘阵列的每个磁盘中
à 在成员磁盘上的地址都一样
l 采用了并行存取方式
l 花费大,成本昂贵
RAID 3:
数据块被分为更小的块并行传输到各个成员磁盘上,同时计算XOR校验数据存放到专用的校验磁盘上
RAID 4:校验码
数据被分为更大的块并行传输到各个成员磁盘上,同时计算XOR校验数据存放到专用的校验磁盘上
修复:假如其中一块磁盘坏掉了,可以使用一块新的磁盘代替坏掉的磁盘,并根据校验磁盘计算出坏掉磁盘的数据,并将数据写入新的磁盘,这个过程就叫磁盘修复
如果在磁盘修复过程中出现了差错,导致磁盘修复失败,那么磁盘中的数据将彻底丢失,永远无法找回
冗余能力:坏掉一块磁盘,可以修复;同时坏掉2+块磁盘,将无法修复
RAID 5:轮流校验码
采用独立存取的阵列方式,校验信息被均匀的分散到阵列的各个磁盘上
冗余能力:坏掉一块磁盘,可以修复;同时坏掉2+块磁盘,将无法修复
RAID 6:
l 带有两种分布存储的检验信息的磁盘阵列,它是对RAID5的扩展,主要是用于要求数据绝对不能出错的场合,使用了二种奇偶校验方法,需要N+2个磁盘
常用的RAID6技术:
l RAID6 P+Q
l RAID6 DP
RAID 7:Jbod
l 将多个小型磁盘叠加,组合成一个更大的磁盘
l 不提供数据校验和镜像备份
l 对数据存储速率没有提升,对数据的可用性也没有保障
RAID 10:
先镜像,再条带化
冗余能力:左右两边同时各坏掉至少一个编号不一致的磁盘,数据完全丢失
若左边/右边的磁盘全部坏掉了,可以通过相应磁盘的镜像恢复
RAID 01:
先条带化,再镜像
冗余能力:每组镜像磁盘各坏掉一个,数据可以恢复
假如其中一组中的所有磁盘都坏掉了,数据将完全丢失
RAID 50:
l RAID5和RAID0的结合,先实现RAID5,再条带化
冗余能力:
最强
常用RAID级别比较:
RAID 0 |
RAID 1 |
RAID 5 |
RAID JBOD |
性能提升: 读,写 冗余能力(容错能力): 无 空间利用率:n 至少2块盘
|
性能表现:写性能下降,读性能提升 冗余能力:有 空间利用率:1/2 至少2块盘 |
性能表现:读,写提升 冗余能力:有 空间利用率:(n-1)/n 至少需要3块
|
性能表现:无提升 冗余能力:无 空间利用率:100% 至少需要2块 |
RAID 01 |
RAID 10 |
RAID 50 |
|
性能表现:读、写提升 冗余能力:有 空间利用率:1/2 至少需要4块
|
性能表现:读、写提升 冗余能力:有 空间利用率:1/2 至少需要4块 |
性能表现:读、写提升 冗余能力:有 空间利用率:(n-2)/n 至少需要6块
|
|
硬件RAID和软件RAID:
通常情况下所说的RAID指的是硬件RAID,软件RAID是指模拟RAID创建的软件设备;
硬件RAID:
SATA+SAS/SCSI
可以提高读写速率,并保证数据的冗余
硬件RAID一般独立于计算机/服务器,属于外部独立设备,它是通过两个控制器之间的总线和计算机/服务器进行数据传输和通信的。
硬件RAID需要在BIOS进行配置,对于已经组合的RAID阵列磁盘,操作系统识别到的只是一个普通的磁盘设备,即/dev/sdaN;假如在BIOS已经配置好了RAID,操作系统却无法识别,很可能是RAID驱动的问题,这就需要联系硬件厂商获取RAID驱动了。
某些RAID芯片上带有缓存,可以提高数据读写的速率,但是遇到突然断电的情况,数据可能会丢失,所以还有一些更高级的RAID芯片,在内部嵌入电池,在突然断电情况下,依然可以保证数据全部都写入硬盘才关机,从而保证了数据的安全性。
软件RAID(逻辑RAID):
假设计算机内部存在多个磁盘,操作系统装载OS盘上,在其他磁盘格式化成文件系统之前,内核可以识别当前系统中的其他磁盘;
内核中又一个模块MD(multi disks),它可以读取磁盘的配置信息,并识别哪些磁盘可以用来组合成为RAID磁盘,然后将指定磁盘组合起来,形成RAID
逻辑RAID就是通过MD来实现的,Md模拟一个假的RAID设备,并创建对应的设备文件/dev/mdN;
存储数据时,内核读取配置文件识别该设备后,在内核内部由MD模块负责将数据以RAID设备的格式分别发送到各个磁盘上去。
逻辑RAID的实质
在用户空间和内核空间之间创建一个假的RAID设备,这个RAID设备可以模拟RAID设备工作;这个RAID设备对于用户看来,是一个RAID设备,但对于内核看来,还是N个独立的磁盘。
逻辑RAID性能取决于CPU
假设操作系统崩溃,内核也就没有了,此前配置的RAID信息也会消失,以RAID形式存储在磁盘上的数据也就不能访问了。
逻辑RAID数据安全性防范
逻辑RAID磁盘设备必须标识为fd类型,这样存储数据的时候,会在数据之外存储一些元数据(黄色小方块表示元数据),重装操作系统时,内核中的md模块可以通过重新扫描该fd设备,将该fd设备组合成原先的RAID设备。
逻辑RAID管理命令
madam命令:RAID管理工具
模式化的命令:
创建模式
-C
专用选项:
-l:级别
-n#: 设备个数
-a{yes|no}: 是否自动为其创建设备文件
-c:CHUNK大小, 2^n,默认为64K
-x#: 指定空闲盘个数
管理模式
--add,--remove, --fail,--stop
-a,-r, -f,-S
mdadm/dev/md# --fail /dev/sda7
监控模式
-F
增长模式
-G
装配模式
-A
查看RAID阵列的详细信息
mdadm -D/dev/md#
--detail
将当前RAID信息保存至配置文件,以便以后进行直接装配:
mdamd -D --scan > /etc/mdadm.conf
查看当前系统当前状态下所有启用的RAID设备信息:
cat /proc/mdstat
提高RAID阵列磁盘性能
Mke2fs –j –E stride=16 –b 4096 /dev/mdN
其中stride=CHUNK/block size