首页 yabo88狗亚app 服务器 大yabo88狗亚app--任意三数字加yabo.com直达官网 存储 IT 安全 物联网 软件 商品

存储

存储频道旗下栏目:

磁盘的可靠性其实很低,这种yabo88狗亚app--任意三数字加yabo.com直达官网可靠性技术可以解决

来源:itworld123 ??发布时间:2019-08-30
摘要:在我们日常的认识中,磁盘是非常可靠的。作者03年自己组装的电脑的磁盘现在还在用着,想想都快二十年了。很多人可能会想,消费级的磁盘都这么靠谱,那企业级的岂不是更加厉害。其实并非如此,其实磁盘是很容易出现故障的。 作者有幸参观过一个大型的yabo88狗亚app--任意三数字加yabo.com直达官网中

在我们日常的认识中,磁盘是非常可靠的。作者03年自己组装的电脑的磁盘现在还在用着,想想都快二十年了。很多人可能会想,消费级的磁盘都这么靠谱,那企业级的岂不是更加厉害。其实并非如此,其实磁盘是很容易出现故障的。

作者有幸参观过一个大型的yabo88狗亚app--任意三数字加yabo.com直达官网中心,发现成堆的故障磁盘。据说,该yabo88狗亚app--任意三数字加yabo.com直达官网中心每天有几十块磁盘出现故障。谷歌在设计其分布式文件系统GFS的时候,也是将磁盘作为非常不可靠部件进行考虑的,因此在其架构中通过多副本保证其可靠性。

想想其中的原因,大概是使用频度的差异造成的错觉吧。我们平时使用的磁盘平均下来每天应该不会超过一小时,而且大部分时间都没有yabo88狗亚app--任意三数字加yabo.com直达官网读写。而yabo88狗亚app--任意三数字加yabo.com直达官网中心磁盘则是7*24小时运行,且负载很重。试想,如果让你7*24小时不歇着,估计...

好了,废话少说。既然磁盘这么不靠谱,我们今天就给大家介绍一下存储领域保证磁盘可靠性的技术。为了方便大家理解和日后学习,我们就以Linux内核为例进行介绍,其实技术是相通的,大家可以迁移过去。在Linux操作系统下提升磁盘可靠性的技术就是RAID技术。具体实现有两种,一种是通过MD实现的多磁盘设备,另外一种是LVM。今天我们主要介绍一下通过MD实现的RAID技术。

一、RAID的原理及基本操作

人类认识事物的客观规律是具体的比抽象的容易理解。因此,为了让大家更加容易理解本文介绍的内容,我们先从具体的内容开始。

1. RAID的基本原理

RAID的全称为廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks),从字面可以看出其基本原理就是通过廉价的磁盘组成一组磁盘,从而提高磁盘的整体可靠性。在Linux操作系统层面,其实就是将物理磁盘通过软件抽象为逻辑磁盘。以RAID1(两块磁盘存储相同的yabo88狗亚app--任意三数字加yabo.com直达官网,在出现一块磁盘故障的情况下,yabo88狗亚app--任意三数字加yabo.com直达官网不丢失)为例,通过Linux内核中的软件创建一个虚拟的块设备,而该块设备中记录了底层对应的物理设备及相关参数。

图1 RAID示意图

因此,从用户层面来看就是一块普通的磁盘设备,而在底层却是2个独立的物理硬盘。当用户向逻辑磁盘写yabo88狗亚app--任意三数字加yabo.com直达官网的时候,其中的软件会通过参数进行计算,并将yabo88狗亚app--任意三数字加yabo.com直达官网重新定向到底层的物理设备。通过这种方法可以保证即使出现某个物理磁盘损坏,用户的yabo88狗亚app--任意三数字加yabo.com直达官网仍然完好无损。

2. Linux下RAID管理

在Linux操作系统下可以通过mdadm工具非常方便的创建RAID。我们以RAID1为例演示一下如何创建。可能很多同学没有多块物理磁盘,其实没有关系,我们可以通过虚拟机创建虚拟磁盘或者loop设备模拟的方式创建RAID。

为了方便大家练习,本文就通过loop设备模拟磁盘来创建RAID。首先需要创建2个loop设备。具体执行如下命令:

图2 创建loop设备

成功运行上述命令后,在/dev目录下就多出2个设备,分别是loop0和loop1。我们可以将这两个设备当做磁盘来使用。下面我们就可以创建RAID了,非常简单,通过一条命令就可以了。

  1. mdadm?--create?/dev/md1?--level=1?--raid-devices=2?/de?

在上面命令中/dev/md1表示创建的新设备的名称,level=1表示是RAID1,后面分别是物理设备的数量和具体的物理设备路径。

除了创建RAID之外,mdadm还支持很多功能,比如获取RAID的详细信息(mdadm --detail /dev/md1)。

图3 RAID的详细信息

该命令的功能很多,我们就不一一介绍了。这里只是抛砖引玉,具体内容大家自行学习就行。后面我们重点从原理和实现层面介绍一下Linux的RAID技术。

3. RAID软件架构

Linux的RAID实现在用户态和内核态都有涉及。其中用户态主要进行RAID的管理,而内核态一方面配合用户态进行RAID管理,另外一方面则实现对IO的处理,这部分才是RAID最为核心的内容。

图4 软件架构

对于基于SCSI物理磁盘的RAID来说,Linux环境下整个软件架构如图4所示。其中虚线以上的为用户态的软件模块,虚线以下的为内核态的软件模块。这里比较核心的是RAID公共层,在这里主要创建md设备,该设备是一个逻辑设备,也是用户可以看到的RAID设备。其下则是具体的RAID模块,用于实现不同的RAID级别(算法)。

再往下就是通用SCSI驱动层了,也就是图中的SCSI磁盘驱动这一层的内容。该层其实是SCSI系统的上层驱动(SCSI子系统分为上中下三层)。RAID模块通过调用该层的yabo88狗亚app--任意三数字加yabo.com直达官网访问接口就可以实现物理磁盘yabo88狗亚app--任意三数字加yabo.com直达官网读写了。

这里需要说明的是,这里的物理磁盘并不一定是本地磁盘。由于基于SAN或者其它协议的磁盘可以通过光纤或者SAS线连接到主机,并呈现为物理硬盘。这种物理硬盘与本地物理硬盘没有任何差异。

二、RAID的代码浅析

针对Linux内核的具体实现,我们简单介绍一下其中的代码。关于代码部分我们以RAID1为例介绍两部分的内容,一部分是关于创建RAID的逻辑;另一部分是请求处理逻辑。理解了上述内容,也就理解了关于RAID代码逻辑的大部分内容。

1. 关于RAID的超级块

接触过Linux文件系统的同学应该对超级块不会陌生。在RAID中也有超级块(superblock),并且作用与文件系统类似。RAID超级块的作用类似,可以将超级块理解称为RAID的地图。RAID软件对底层物理磁盘的一切操作都以该超级块为依据。

Linux的RAID有多个版本,包括0.9、1.0、1.1和1.2四个版本,且版本之间并不能保证兼容性。对于1.2版本的RAID,其超级块位于开始4KB偏移的位置。我们可以通过dd或者其它工具将该yabo88狗亚app--任意三数字加yabo.com直达官网导出到文件中,并通过二进制工具查看。

图5 RAID的超级块

如图5是作者导出的上面创建的RAID1的超级块信息及yabo88狗亚app--任意三数字加yabo.com直达官网结构(mdp_superblock_1)对比图。如果看不清楚也没关系,大家可以自行获取上述进行,并对比。

RAID的超级块内容非常多,在本文不可能一一介绍。这里大家只要知道这里面包含创建时间、RAID级别、设备大小及同步信息等内容即可。后续我们可能会专门介绍超级块中每个成员的具体作用。

2. 创建RAID核心流程