Ubuntu 上成立常用磁盘阵列

RAID原理基础: 内存的速度可以达到5G每秒。甚至更高
现代硬盘的缺陷:IO性能极弱,稳定性极差;
RAID:廉价磁盘冗余阵列技术是通过该多磁盘并行运行来提高计算机的存储IO性能。
RAID分为很多种类,称之为RIAD级别。现代RIAD共有7类,常用的有以下四类:
RAID 0 读写性能 RAID 1 读取性能、冗余性(空间利用率最高,性能最高) RAID
5 读写性能、冗余性 (最多损坏1块硬盘) RAID 6 读写性能、冗余性
(最多损坏2块硬盘) RAID 0 最少使用 2
块硬盘;将数据分开读写到多块硬盘的方式来提高读写性能。读写速度是所有硬盘的速度之和。空间利用率也是所有硬盘空间之和、没有冗余能力。
RAID 1 也是最少使用 2
块硬盘。写数据时,将数据复制写到多块硬盘。读数据时,为了提供冗余性,同时从多块硬盘读取数据,提高了读取的性能。优点:读性能强,写性能微弱。冗余能力最强.
缺点:磁盘利用率比较低,空间利用率为磁盘中最小的那块。 RAID 5
最少使用3块硬盘,与RAID相似,读写数据时会将数据分布式的读写到所有硬盘上。写数据时会对数据进行奇偶校验运算;将校验信息同时保存在硬盘上,校验信息用于数据恢复时使用。读性能很强与RAID
0接近。写性能较RAID0弱一些;最多可以接受1块硬盘的损坏。
空间利用率为1-1/n(1/n代表奇偶校验所占的空间) RAID 6
最少使用4块硬盘。RAID 6 与RAID
5类似。读写数据时也是将数据分布式的读写到硬盘上,和RAID 5
类似进行奇偶校验,但是比RAID 5 多保存一份校验信息。 所以冗余性能比RAID 5
强。空间利用率1-2/n 读写性能接近RAID 5 读性能稍微比RAID 5
弱一点,最多可以损坏2块硬盘。 RAID 的实现方法有两种: 软件RAID
通过系统功能或者RAID软件实现,没有独立硬件接口,需要占用一定的系统资源,受操作系统稳定性影响。
硬件RAID
通过独立的RAID硬件卡实现,稳定性比软件RAID要强,不需要占用其他硬件资源。

RAID(Redundant Array of Independent Disk
独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损
失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发
挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会
受到损坏硬盘的影响。

一、RAID简史

RAID 样式?

RAID 为 Redundant Array of Indepent Disks (独立磁盘冗余阵列)
的缩写,其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。最常用的四种RAID为
RAID 0、RAID 1、RAID 5、RAID 10。

1.RAID由来

外接式磁盘阵列柜:最常被使用大型服务器上,具可热抽换(Hot
Swap)的特性,不过这类产品的价格都很贵。

我们将会使用 mdadm
这个Ubuntu上的工具创建和管理磁盘阵列。

Berkeley:伯克利提出:A case for Redundent Arrays of Inexpensive Disks
为RAID(廉价冗余阵列)

内接式磁盘阵列卡:因为价格便宜,但需要较高的安装技术,适合技术人员使用操作。

必要的准备

如果要查看当前机器上是否具有磁盘阵列的配置(在 /proc/mdstat
文件内),我们可以打以下的指令:

$ cat /proc/mdstat

> Output
> Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10] 
> md0 : active raid0 sdc[1] sdd[0]
>       209584128 blocks super 1.2 512k chunks
>
>            unused devices: <none>

从文件系统中卸载磁盘阵列:

$ sudo umount /dev/md0

然后,暂停并移除此磁盘阵列:

$ sudo mdadm --stop /dev/md0
$ sudo mdadm --remove /dev/md0

查出磁盘的结构的指令:

$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

输出
NAME     SIZE FSTYPE            TYPE MOUNTPOINT
sda      00G                   disk 
sdb      00G                   disk 
sdc      00G linux_raid_member disk 
sdd      00G linux_raid_member disk 
vda       0G                   disk 
├─vda1    0G ext4              part /
└─vda15    M                   part 

如果发现我们的磁盘已经做过阵列,我们需要重置它们的超级块(Superblock),使其正常化:

$ sudo mdadm --zero-superblock /dev/sdc
$ sudo mdadm --zero-superblock /dev/sdd

你应该删除所有的阵列相关的引用设置,例如在 /etc/fstab
文件内自动挂载设置

$ sudo nano /etc/fstab

# /etc/fstab
. . .
# 将这行注释,否则会引至启动失败
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

当然,你还需要在阵列定义文件 /etc/mdadm/mdadm.conf
内移除原有的阵列设置

sudo nano /etc/mdadm/mdadm.conf

# /etc/mdadm/mdadm.conf
. . .

# 注释阵列设置
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91

最后更新 initramfs 系统:

sudo update-initramfs -u

OK,此时一切回到没有阵列的普通磁盘状态了,我们就可以开始以下的尝试了。

Initramfs 初始 ram 文件系统基于 ‘tmpfs ‘ (大小灵活、
内存中的轻量级文件系统),但是他并不是一个单独的块设备
(所以没有缓存和所有额外的开销)。就像
initrd,它包含的工具和脚本在被称为真正的根文件系统上的二进制文件
init启动之前被挂载 。这些工具可以解密抽象层
(用于加密的文件系统),逻辑卷管理器,软件
raid,蓝牙驱动程序基于文件系统的装载机等。

如今:Redundant Arrays of Independent Disks 独立冗余阵列

利用软件来仿真:由于会拖累机器的速度,不适合大数据流量的服务器。

格式化

在格式化过程中有一个点大家要注意的是,由于现在的硬盘容量越来越大,fdisk
只能硬式化2T以内的硬盘,如果你想用两个3T的硬盘做阵列那么还是用Parted
GPT吧:

$ sudo parted /dev/sdb

这个指令按照向导来做就好了,过程极其简单。将格式做成 ext4 就可以了。

2.优点和表现方式

四、RAID 分类?

RAID 0

RAID 0 即Data
Stripping(数据分条技术)。整个逻辑盘的数据是被分条(stripped)分布在多个物理磁盘上,可以并行读/写,提供最快的速度,但没有冗余能力。要求至少两个磁盘。我们通过RAID
0可以获得更大的单个逻辑盘的容量,且通过对多个磁盘的同时读取获得更高的存取速度。RAID
0首先考虑的是磁盘的速度和容量,忽略了安全,只要其中一个磁盘出了问题,那么整个阵列的数据都会不保了。

在开始之前我们还是先用 lsblk 查看一下磁盘的状态:

$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

Output
NAME     SIZE FSTYPE TYPE MOUNTPOINT
sda      00G        disk
sdb      00G        disk
vda       0G        disk 
├─vda1    0G ext4   part /
└─vda15    M        part

1)通过磁盘并行读写,提高IO能力:

RAID 0 数据分条(条带)盘 —
只需要2块以上的硬盘,成本低,可以提高整个磁盘的性能和吞吐量

创建阵列

$ sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb

检查磁盘阵列的状态:

$ cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid0 sdb[1] sda[0]
      209584128 blocks super 1.2 512k chunks

            unused devices: <none>

2)通过磁盘冗余(容错)机制来实现提高耐用性:

striping(条带模式),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其读写性能最好;但是没有容错功能,任何一个磁盘的损坏将损坏全部数据;

RAID 1

两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID
1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID
1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。

  • 磁盘利用率为50%。也就是说,如果我们有两个磁盘每个500GB,总共是1TB,但在镜像中它只会显示500GB。
  • 在镜像如果一个磁盘发生故障不会有数据丢失,因为两个磁盘中的内容相同。
  • 读取性能会比写入性能更好。

创建 RAID 1
至少要有两个磁盘,你也可以添加更多的磁盘,磁盘数需为2,4,6,8等偶数。要添加更多的磁盘,你的系统必须有
RAID 物理适配器(硬件卡)。

这里,我们使用软件 RAID 不是硬件 RAID,如果你的系统有一个内置的物理硬件
RAID 卡,你可以从它的功能界面或使用 Ctrl + I 键来访问它。

创建阵列

$ sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb

3.级别:多块磁盘组织在一起的工作方式有所不同

RAID 1  磁盘镜像盘 —
数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件

RAID 5

RAID Level
5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk
Striping(硬盘分区)技术。RAID 5至少需要三块硬盘,RAID
5不是对存储的数据���行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID
5可以理解为是RAID 0和RAID 1的折衷方案。RAID
5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID
5具有和RAID
0相近似的数据读取速度,只是因为多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可以让性能改善不少。同时由于多个数据对应一个奇偶校验信息,RAID
5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。

$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

NAME     SIZE FSTYPE TYPE MOUNTPOINT
sda      00G        disk
sdb      00G        disk
sdc      00G        disk
vda       0G        disk 
├─vda1    0G ext4   part /
└─vda15    M        part

创建RAID 5阵列

$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc

RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID10、RAID01、RAID50、JBOD

mirroring(镜像卷),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率;

RAID 6

与RAID 5相比,RAID
6增加第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,任意两块磁盘同时失效时不会影响数据完整性。RAID
6需要分配给奇偶校验信息更大的磁盘空间和额外的校验计算,相对于RAID
5有更大的IO操作量和计算量,其“写性能”强烈取决于具体的实现方案,因此RAID6通常不会通过软件方式来实现,而更可能通过硬件/固件方式实现。

同一数组中最多容许两个磁盘损坏。更换新磁盘后,数据将会重新算出并写入新的磁盘中。依照设计理论,RAID
6必须具备四个以上的磁盘才能生效。

$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

NAME     SIZE FSTYPE TYPE MOUNTPOINT
sda      00G        disk
sdb      00G        disk
sdc      00G        disk
sdd      00G        disk
vda       0G        disk 
├─vda1    0G ext4   part /
└─vda15    M        part

创建阵列

$ sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd

4.实现方式

RAID 2与RAID 3类似 海明码检验盘 —
在数据发生错误的情况下将错误校正,以保证输出的正确性

RAID 10

RAID 10是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID
0的最低组合,然后将这两组各自视为RAID 1运作。

RAID 10(又叫RAID 1+0)特点:

  • 最少需要4块磁盘
  • 先按RAID 0分成两组,再分别对两组按RAID 1方式镜像
  • 兼顾冗余(提供镜像存储)和性能(数据条带形分布)
  • 在实际应用中较为常用

    $ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

NAME     SIZE FSTYPE TYPE MOUNTPOINT
sda      00G        disk
sdb      00G        disk
sdc      00G        disk
sdd      00G        disk
vda       0G        disk 
├─vda1    0G ext4   part /
└─vda15    M        part

创建阵列

sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd

(1)软件模拟实现:Software RAID,结合内核中的md(multi devices)工具

RAID 3 奇偶校验码的并行传送 — 只能查错不能纠错

挂载文件系统

下一步,在阵列上创建文件系统:

$ sudo mkfs.ext4 -F /dev/md0

在文件系统上创建挂载点的文件夹

$ sudo mkdir -p /mnt/md0

挂载阵列至挂载点文件夹上

$ sudo mount /dev/md0 /mnt/md0

检查是否已具有新的磁盘空间:

$ df -h -x devtmpfs -x tmpfs

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  1.1G   18G   6% /
/dev/md0        197G   60M  187G   1% /mnt/md0

现在文件系统已经成载挂载将可以访问了。

生产环境中一般没有人使用

RAID 4 带奇偶校验码的独立磁盘结构 —
对数据的访问是按数据块进行的,也就是按磁盘进行的,RAID3是一次一横条,而RAID4一次一竖条

开机自动挂载

为了确保阵列开机时被载入,我们应该调整一下 /etc/mdadm/mdadm.conf
的配置文件,我可以加以下的指令使系统在启动自检时扫描磁盘阵列的详细信息:

$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

另外,你可以更新 initfamfs
或者初始化RAM文件系统,这样一来阵列会在启动前就可以生效:

$ sudo update-initramfs -u

最重要的一点是一定要在 /etc/fstab 配置文件内加入自动挂载的设置:

$ echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab

这样 ubuntu 启动后就会自动将磁盘阵列挂入了。

另外,如果没有设置自动挂载,在系统重启后或磁盘名称更改(插入其它硬盘会导致盘名变更的)例如
/dev/md0 变成了 /dev/md127
就可能会出现磁盘不能被挂载的问题,此时切记重新创建阵列,因这将会毁掉你的一切!重新手工挂载一下就OK了:

$ sudo mount /dev/md127 /mnt/md0

如何在Linux上构建 RAID 10阵列 
http://www.linuxidc.com/Linux/2014-12/110318.htm

Debian软RAID安装笔记 – 使用mdadm安装RAID1
http://www.linuxidc.com/Linux/2013-06/86487.htm

常用RAID技术介绍以及示例演示(多图)
http://www.linuxidc.com/Linux/2013-03/81481.htm

Linux实现最常用的磁盘阵列– RAID5
http://www.linuxidc.com/Linux/2013-01/77880.htm

RAID0+1和RAID5的性能测试结果
http://www.linuxidc.com/Linux/2012-07/65567.htm

Linux入门教程:磁盘阵列(RAID)
http://www.linuxidc.com/Linux/2014-07/104444.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136396.htm

图片 1

(2)硬件实现:硬件级别的RAID配置多块硬盘在bios中实现

RAID 5 分布式奇偶校验的独立磁盘结构

外接式磁盘阵列:通过扩展卡提供适配能力

需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据;

内接式RAID:主板集成RAID控制器

RAID 6 带有两种分布存储的奇偶校验码的独立磁盘结构

图片 2

RAID 7 优化的高速数据传送磁盘结构 — 高速缓冲存储器

1)可以通过SAS接口的适配器接口扩展出串行端口附加存储,以logical unit 
number逻辑单元号表现

这是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主机运行,不占用主机CPU资源。RAID
7可以看作是一种存储计算机(Storage
Computer),它与其他RAID标准有明显区别。     

窄带:8个接口,7target

RAID 1+0 高可靠性与高效磁盘结构

宽带:16个接口,15个target

RAID 0+1 高效率与高性能磁盘结构

2)RAID控制器需要系统驱动使用,在BIOS中可以设置,通过适配器连接到RAID磁盘阵列

RAID1+0与RAID0+1的区别:

3)RAID控制器本身有CPU,还可以有内存来加速,另外设置电源方式断电时候的应急写入

RAID 1+0是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID
0的最低组合,然后将这两组各自视为RAID 1运作。RAID 0+1则是跟RAID
1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID
1的最低组合,而将两组硬盘各自视为RAID 0运作。性能上,RAID 0+1比RAID
1+0有着更快的读写速度。可靠性上,当RAID
1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1
只要有一个硬盘受损,同组RAID
0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。因此,RAID
10远较RAID 01常用,零售主板绝大部份支持RAID 0/1/5/10,但不支持RAID 01。

二、RAID级别和工作模式

五、常见 RAID 总结?

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

RAID Level 性能提升 冗余能力 空间利用率 磁盘数量(块)

1.RAID-0:0, 条带卷,strip;

RAID 0 读、写提升 无 100% 至少2

性能:读、写性能提升;无容错能力

RAID 1 读性能提升,写性能下降 有 50% 至少2

空间使用:N*min(S1,S2,…),

RAID 5 读、写提升 有 (n-1)/n% 至少3

最少需要磁盘数量:至少两块

RAID 1+0 读、写提升 有 50% 至少4

图片 3

RAID 0+1 读、写提升 有 50% 至少4

条带:会以磁盘容量最小的磁盘为主分块制作条带

RAID 5+0 读、写提升 有 (n-2)/n% 至少6

图片 4

Debian软RAID安装笔记 – 使用mdadm安装RAID1
http://www.linuxidc.com/Linux/2013-06/86487.htm

2.RAID-1: 1, 镜像卷,mirror;

常用RAID技术介绍以及示例演示(多图)
http://www.linuxidc.com/Linux/2013-03/81481.htm

性能:读性能提升、写性能略有下降;有冗余能力

Linux实现最常用的磁盘阵列– RAID5
http://www.linuxidc.com/Linux/2013-01/77880.htm

空间使用:1*min(S1,S2,…),每块存储内容都一样

RAID0+1和RAID5的性能测试结果
http://www.linuxidc.com/Linux/2012-07/65567.htm

空间利用率:1/2

Linux入门教程:磁盘阵列(RAID)
http://www.linuxidc.com/Linux/2014-07/104444.htm

最少需要硬盘数量:至少两块

发表评论

电子邮件地址不会被公开。 必填项已用*标注