版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/fsx2550553488/article/details/79819164

RAID
RAID:独立磁盘冗余阵列(Redundant Arrays of Independent(最早是Inexpensive,后来改成Independent) Disks,RAID)

计算机核心部件:CPU,内存,IO设备

部分硬盘接口格式:

硬盘类型 英文名称 传输速度 接口类型
IDE Integrated Drive Electronics 133Mbps 并行接口
SATA1 Serial Advanced Technology Attachment1.0 300Mbps 串行接口
SATA2 600Mbps 串行接口
SATA3 6Gbps 串行接口
USB3.0 Universal Serial Bus 480Mbps 串行接口
SCSI small computer system interface 1Gbps 并行
SAS

驱动:将逻辑指令转化为对应设备的控制指令的程序。

将cpu指令转化为各设备可以理解的指令,在转换处有一个控制设备,集成再主板上的叫控制器,独立在主板外的叫适配器;本质上是同一种东西。即控制器(适配器)是连接主板和IO设备(外接IO设备,如磁盘、USB等)中间的桥梁,负责让CPU和IO设备良好通信的介质。

RAID级别

RAID级别仅仅代表磁盘组织方式不同(应用不同场景需求),没有上下之分。考虑因素:数据传输速度,完整性,可靠性,安全性等。

RAID0:条带技术

所谓条带技术,即RAID0,就是将一各数据分为很多片,通过控制器,存放在不同的磁盘设备上,这样可以大大提高读写速度,缓解IO端口的读写瓶颈问题。但是带来的问题:如果任意一个磁盘损坏,此文件就无法使用,这也大大降低了磁盘存储的可靠性。

RAID1:磁盘镜像技术

磁盘镜像技术,即RAID1,就是在通过控制器向磁盘存储数据时,将一份数据分别存放在不同的磁盘上,每个磁盘存放的数据都是完整的,相同的。这种技术,提高了磁盘存储的可靠性,即是有一个磁盘损坏,也可以从别的磁盘上备份得到;但是缺毫无冗余能力,即读写速度并没有提升(相反,写的速度反而降低),硬盘利用率只有二分之一。

RAID4:校验码技术

校验码技术,即RAID4,磁盘群提供一个校验码盘,负责记录其他磁盘存储的总和数据,如:在上图,存储数据磁盘上分别存储1、2、2,则在校验码盘存储5(1+2+2);如果存储数据盘有一个损坏,有能通过校验码盘和其他正常工作的盘,恢复出损坏盘的数据。校验码技术,提升了读写速度,并且有一定的可靠性(坏一块磁盘并不影响数据完整性)。

即便如此,因为恢复数据(有一块盘损坏)时,需要校验码盘和其他盘共同参与,这也提升了IO压力,和损坏风险。同时,校验码盘容易成为整个技术的瓶颈。

RAID5:轮流校验码技术

RAID5和RAID4很相似,差别在于:RAID5的校验码盘不是固定的,即磁盘群内,互为校验码盘,这样就缓解了RAID4暴露出来的问题(固定的校验码盘容易成为整个技术的瓶颈)。

RAID级别示意图

级别 应用技术 允许磁盘损坏程度 性能表现
RAID0 条带技术 不允许磁盘坏 传输速度快(读写性能提升N倍),可靠性极差(没有冗余(错)能力)
RAID1 磁盘镜像技术 坏一块不影响 传输速度慢(写性能下降,读性能提升),可靠性高(较强的冗余能力)
RAID2 汉明码技术 同0 在0的基础上,提升读写数据时的纠错能力
RAID3 汉明码技术 同1 在1的基础上,提升读写数据时的纠错能力
RAID4 校验码技术 坏一块可修复 传输速度快(读写性能提升),具备冗余能力(不高),修复危险度高
RAID5 轮流校验码技术 坏一块可修复 同4,避免单一校验硬盘成为瓶颈问题
RAID6

RAID组合

RAID01

所谓RAID01就是先进行RAID0(条带化),在进行RAID1(镜像化),这样可一提升IO速度,也可以确保可靠性。

但是,如果有一块磁盘损坏,可能整个磁盘体系都需要被调用。

RAID10

所谓RAID10即先进行RAID1(镜像技术),再进行RAID0(条带技术),这样可一提升IO速度,也可以确保可靠性。如果有一块磁盘损坏,则不需要调用整个磁盘体系,只需要调用和损坏磁盘互为镜像的磁盘进行数据恢复即可。

RAID50

所谓RAID10即先进行RAID5(镜像技术),再进行RAID0(条带技术)。此处不再过多解释。

RAID50大大提升对数据的读写能力,同时具备冗余能力。空间利用率为(总盘数-校验盘个数)/总盘数

JBOD技术

JBOD磁盘技术,适合Hadoop。

性能无提升,不具备冗余能力,空间利用率百分之百

RAID盘选取

早期:

  • IDE

  • SCSI

如今:

  • STAT

    ​ 盘大,价格便宜

  • SAS

    ​ 盘小,价格昂贵

硬件RAID

模型1

主机连接有插槽,RAID控制器通过线缆连接到插槽(插槽镶嵌再主机上),将硬盘插入插槽,组成RAID阵列。

模型2

磁盘阵列放在一个大的磁盘盒子内,通过一个向外接口

主机没有插槽,通过一个外接线缆,将主机RAID控制器和磁盘阵列盒子连接在一起。

软件RAID

内核必须支持软件RAID,LInux内核中有一个模块md:multi disks(多磁盘)

使用md模拟一个raid(逻辑RAID),/dev/mdx

mdadm

RAID需要在不同磁盘上做,才有意义(突破单个磁盘的IO瓶颈),实验状态下,使用一块磁盘不同分区来实现(真实环境是毫无意义的,因为磁盘的IO端口依然是传输瓶颈)。

mdadm是个模式化的命令:

  • 创建模式 -C

    ​ 专用选项:-l(指定级别);-n(设备个数);-a(是否自动为其创建设备文件(yes,no));-c(指定chunk大小,即数据块大小)

    ​ -x : 指定空闲盘的个数。留着一个备份盘,如果有一个使用的盘坏掉,备份盘立刻顶上去,保证数据安全。

  • 管理模式

    –add(-a) --remove(-r)等

    mdadm /dev/mdx --fail /dev/sdxx

    mdadm -S(–stop) /dev/mdx

  • 监控模式 -F

  • 增长模式 -G

  • 装配模式 -A

RAID0

将/dev/vdb分为四个分区,并创建其每个分区的系统类型为Linux raid autodetect。

[root@raid ~]# fdisk /dev/vdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05300968.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.
​
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
​
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended toswitch off the mode (command ‘c’) and change display units tosectors (command ‘u’).
​
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2080, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2080, default 2080): +200M
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (408-2080, default 408):
Using default value 408
Last cylinder, +cylinders or +size{K,M,G} (408-2080, default 2080): +200M
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (815-2080, default 815):
Using default value 815
Last cylinder, +cylinders or +size{K,M,G} (815-2080, default 2080): +200M
​
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Selected partition 4
First cylinder (1222-2080, default 1222):
Using default value 1222
Last cylinder, +cylinders or +size{K,M,G} (1222-2080, default 2080):
Using default value 2080
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
​
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect)
​
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): fd
Changed system type of partition 3 to fd (Linux raid autodetect)
​
Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): fd
Changed system type of partition 4 to fd (Linux raid autodetect)
Command (m for help): w

将/dev/vdb1和/dev/vdb4作为磁盘阵列(RAID0模式)。

​
[root@raid ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/vdb{1,4}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
​
[root@raid ~]# cat /proc/mdstat         //查看创建结果
Personalities : [raid0]
md0 : active raid0 vdb4[1] vdb1[0]//所有启用的RAID设备637440 blocks super 1.2 512k chunks   //chunk大小为512k
unused devices: <none>

在操作系统看来,/dev/md0就是一个块设备,和/dev/sda2没有区别,RAID机制的实现是在物理层面。即块设备可以被操作系统识别后,就需要进行格式化:

[root@raid ~]# mkfs.ext3 /dev/md0   //格式化/dev/md0为ext3格式
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
39840 inodes, 159360 blocks
7968 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=163577856
5 block groups
32768 blocks per group, 32768 fragments per group
7968 inodes per group
Superblock backups stored on blocks:
    32768, 98304
​
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
​
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

查看md0文件系统

[root@raid ~]# fdisk -l /dev/md0
​
Disk /dev/md0: 652 MB, 652738560 bytes
2 heads, 4 sectors/track, 159360 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000

挂载文件设备

[root@raid ~]# mkdir /fsx
[root@raid ~]# mount /dev/md0 /fsx/
[root@raid ~]# cd /fsx/
[root@raid fsx]# ls
lost+found
RAID1

前期步骤和创建RAID0基本一样,即创建分区,设备分区系统类型等。然后,创建RAID1:

root@raid fsx]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/vda1 /dev/vda2
mdadm: Note: this array has metadata at the start andmay not be suitable as a boot device.  If you plan tostore ‘/boot’ on this device please ensure thatyour boot-loader understands md/v1.x metadata, or use--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.

查看/dev/md1设备块信息

[root@raid fsx]# fdisk -l /dev/md1
​
Disk /dev/md1: 209 MB, 209846272 bytes//只是一个磁盘的大小,即操作系统看来,md1仅仅是一个磁盘,备份的任务是物理底层完成的
2 heads, 4 sectors/track, 51232 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

格式化,挂载md1,并写入数据

[root@raid fsx]# mkfs.ext4 /dev/md1
mke2fs 1.41.12 (17-May-2010)
warning: 127 blocks unused.
​
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51400 inodes, 204801 blocks
10246 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2056 inodes per group
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729
​
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
​
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@raid fsx]# mount /dev/md1 /mnt/
[root@raid fsx]# echo “fsx123” > /mnt/fsx
[root@raid mnt]# cat fsx
fsx123

监控模式下,可以显示RAID设备的详细信息:

[root@raid mnt]# mdadm -D /dev/md1      //-D == --detail
/dev/md1:Version : 1.2   //版本Creation Time : Wed Apr  4 02:34:10 2018Raid Level : raid1Array Size : 204928 (200.16 MiB 209.85 MB) //阵列大小Used Dev Size : 204928 (200.16 MiB 209.85 MB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistent
​Update Time : Wed Apr  4 02:39:29 2018State : clean Active Devices : 2
Working Devices : 2Failed Devices : 0Spare Devices : 0
​Name : raid:1  (local to host raid)UUID : d9cb6898:63c22e52:c3651fed:8650a65cEvents : 17
​Number   Major   Minor   RaidDevice State0     252        1        0      active sync   /dev/vda11     252        2        1      active sync   /dev/vda2
​

管理模式下可以模拟一个磁盘损坏:

[root@raid mnt]# mdadm /dev/md1 -f /dev/vda1    //模拟损坏/dev/md1阵列中的/dev/vda1磁盘
mdadm: set /dev/vda1 faulty in /dev/md1
[root@raid mnt]# ls
fsx  lost+found        //一个磁盘存坏,文件仍然可以读取,RAID1的冗余能力。
[root@raid mnt]# vim fsx
[root@raid mnt]# cat fsx
fsx123
[root@raid mnt]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Wed Apr  4 02:34:10 2018Raid Level : raid1Array Size : 204928 (200.16 MiB 209.85 MB)Used Dev Size : 204928 (200.16 MiB 209.85 MB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistent
​Update Time : Wed Apr  4 02:45:27 2018State : clean, degraded Active Devices : 1
Working Devices : 1Failed Devices : 1Spare Devices : 0
​Name : raid:1  (local to host raid)UUID : d9cb6898:63c22e52:c3651fed:8650a65cEvents : 21
​Number   Major   Minor   RaidDevice State0       0        0        0      removed         //查看状态,处与remove1     252        2        1      active sync   /dev/vda2
​0     252        1        -      faulty   /dev/vda1
​

移除损坏的设备

[root@raid mnt]# mdadm /dev/md1 -r /dev/vda1    //-r == --remove
mdadm: hot removed /dev/vda1 from /dev/md1
[root@raid mnt]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Wed Apr  4 02:34:10 2018Raid Level : raid1Array Size : 204928 (200.16 MiB 209.85 MB)Used Dev Size : 204928 (200.16 MiB 209.85 MB)Raid Devices : 2Total Devices : 1Persistence : Superblock is persistent
​Update Time : Wed Apr  4 02:47:40 2018State : clean, degraded Active Devices : 1
Working Devices : 1Failed Devices : 0Spare Devices : 0
​Name : raid:1  (local to host raid)UUID : d9cb6898:63c22e52:c3651fed:8650a65cEvents : 26
​Number   Major   Minor   RaidDevice State0       0        0        0      removed            //被移除1     252        2        1      active sync   /dev/vda2

重新给md1添加一块设备

[root@raid mnt]# mdadm /dev/md1 -a /dev/vda1    //-a == --add
mdadm: added /dev/vda1
[root@raid mnt]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Wed Apr  4 02:34:10 2018Raid Level : raid1Array Size : 204928 (200.16 MiB 209.85 MB)Used Dev Size : 204928 (200.16 MiB 209.85 MB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistent
​Update Time : Wed Apr  4 02:50:01 2018State : clean, degraded, recovering Active Devices : 1
Working Devices : 2Failed Devices : 0Spare Devices : 1
​Rebuild Status : 47% complete
​Name : raid:1  (local to host raid)UUID : d9cb6898:63c22e52:c3651fed:8650a65cEvents : 37
​Number   Major   Minor   RaidDevice State2     252        1        0      spare rebuilding   /dev/vda11     252        2        1      active sync   /dev/vda2
[root@raid mnt]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 vda1[2] vda2[1]204928 blocks super 1.2 [2/2] [UU]

md0 : active raid0 vdb4[1] vdb1[0]637440 blocks super 1.2 512k chunks

unused devices: <none>

停止阵列

[root@raid /]# umount /mnt/         //停止前必须先解挂
[root@raid /]# mdadm -S /dev/md1    //-S == --stop
mdadm: stopped /dev/md1

重新启动阵列

[root@raid /]# mdadm -A /dev/md1 /dev/vda1 /dev/vda2
mdadm: /dev/md1 has been started with 2 drives.
[root@raid /]# mdadm -D /dev/md1
/dev/md1:Version : 1.2Creation Time : Wed Apr  4 02:34:10 2018Raid Level : raid1Array Size : 204928 (200.16 MiB 209.85 MB)Used Dev Size : 204928 (200.16 MiB 209.85 MB)Raid Devices : 2Total Devices : 2Persistence : Superblock is persistent
​Update Time : Wed Apr  4 02:54:19 2018State : clean Active Devices : 2
Working Devices : 2Failed Devices : 0Spare Devices : 0
​Name : raid:1  (local to host raid)UUID : d9cb6898:63c22e52:c3651fed:8650a65cEvents : 83
​Number   Major   Minor   RaidDevice State2     252        1        0      active sync   /dev/vda13     252        2        1      active sync   /dev/vda2

独立磁盘冗余阵列:RAID相关推荐

  1. RAID独立磁盘冗余阵列,对比各模式下的性能优劣

    一.RAID 概述 首次提出: 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 "A Case of Redundant Array of Inexp ...

  2. linux 独立冗余磁盘阵列,Linux基础教程:独立硬盘冗余阵列-RAID

    RAID 10 和RAID 01相反,RAID10是先做RAID1,再做RAID0,如下图所示: RAID10和RAID01在读写速度上没有什么太大的差别,但是RAID10的数据安全性比较高,若下图左 ...

  3. 独立硬盘冗余阵列-RAID

    RAID 0 RAID 0亦称为条带,它将两个以上的磁盘串联起来,成为一个大容量的磁盘.在存放数据时,分段后分散存储在这些磁盘中,因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快 ...

  4. RAID磁盘冗余阵列

    转 https://zhuanlan.zhihu.com/p/51170719 RAID的不同级别 RAID即独立磁盘冗余阵列,简称磁盘阵列,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从 ...

  5. Linux之磁盘冗余阵列

    RAID: 是Redundant Arrays of Independent Disk的缩写,即独立磁盘冗余阵列.也就是通过一些技术将多个磁盘组合成一个磁盘组,逻辑上看就是一个较大的磁盘设备.除了存储 ...

  6. 独立硬盘冗余阵列与HDFS

    http://zh.wikipedia.org/wiki/RAID 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Re ...

  7. linux磁盘冗余阵列

    RAID防止硬盘物理损坏以及增加存储设备的吞吐量,RAID常见的组合有0.1.5.和10RAID0:至少需要两块硬盘,可以有效提高硬盘的性能和吞吐量,但没有数据的冗余和错误修复能力将多块硬盘通过硬件或 ...

  8. Linux学习第九课、磁盘容量配额、RAID磁盘冗余阵列

    磁盘容量配额 Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户.多任务的操作系统.但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬 ...

  9. Linux磁盘管理工具RAID、Parted

    一.RAID:磁盘冗余阵列 [RAID详解]  https://blog.csdn.net/qq_41475058/article/details/89382997  1.核心关注点 RAID ( R ...

最新文章

  1. Cocos Creator 预制的使用模板(一般用于UI)
  2. ajax和promise的结合使用
  3. python乘法表左下变右上_vc++乘法表变换形式怎么变就是变成左上、右上三角形 左下、右下、等腰三角形 还有倒三角形,...
  4. mysql两种索引结构_19.Mysql索引结构及常见索引的区别
  5. java显式构造函数_C++中的显式构造函数
  6. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
  7. [导入]【翻译】WF从入门到精通(第十章):事件活动
  8. metricbeat监控多个linux_Azure 虚拟机内存利用率监控(2)
  9. 一加9R将推12+256GB新版本:骁龙870+120Hz高刷屏
  10. 在JavaScript中创建命名空间的几种写法
  11. 密钥怎么存储在数据库中
  12. Codeforces Round #532(Div. 2) B.Build a Contest
  13. Android第二十课 解决Logcat无法输出调试信息
  14. Charles 破解版安装图解
  15. AutoCAD2000命令详解
  16. 腾讯云人脸支付常见问题和解答,以及腾讯云人脸支付相关介绍
  17. Leetcode——495. Teemo Attacking
  18. java设置短信验证码过期时间_实现短信验证码有效时间
  19. php jwt token刷新方案,laravel JWT自动刷新 自定义验证器
  20. 算法设计之动态规划法

热门文章

  1. 两台电脑间大量数据拷贝的快捷方法
  2. WPF入门教程系列十五——WPF中的数据绑定(一)
  3. MFC中的几个常用类——CFileDialog
  4. .net 动软代码生成器
  5. win2003服务器 虚拟主机安全配置
  6. python表达式的值是 y 和n是什么意思_python中^是什么意思
  7. 清除nginx服务器网站缓存数据
  8. 联想拯救者y7000加内存条_关于2020款联想拯救者Y7000、R7000和Y7000P,r7000p选哪个好?看这里就对了...
  9. java numberformat 方法_Java NumberFormat parse()用法及代码示例
  10. python数字排序 循环_【python-leetcode448-循环排序】找到所有数组中消失的数字