RAID

RAID 是廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)的意思。通过它可以将较小的磁盘组成较大的磁盘。
 

RAID 模式

RAID 有几种模式,常用的有 RAID0,RAID1, RAID5 和 RAID10。下面依次介绍这几种模式。
RAID0(stripe,条带模式)
 
RAID0 至少需要两块磁盘(图中由 Disk0 和 Disk1 组成),数据会等量的写入到磁盘中。如写入 “上山打老虎啊”,Disk0 会写入 “上”,Disk1 写入 “山”,然后再将 “打”写到 Disk0,“老”写到 Disk1,“虎”写到 Disk0,“啊”写到 Disk1。(举个例子,数据不是以这种方式写入的,而是拆成较小的数据块再存到磁盘中的)
 
这种组 RAID 的好处是:读写性能变好了(单个磁盘存的数据变少了),容量变大了。缺点也很明显,安全性变差了,如果一个磁盘坏了,那整个文件系统文件都用不了了。
RAID1(mirror,镜像模式)
 
RAID1 至少需要两块磁盘,数据会同时写入到两个磁盘中,一个磁盘为另外一块磁盘的镜像。对应到 “上山打老虎啊”,就是 Disk0 和 Disk1 都会写入 “上山打老虎啊”这个数据。
 
RAID1 的好处在于,写性能变差了(数据要写多次,数据量变大了),读性能变好了(RAID 可选择数据从哪个磁盘被读取),安全性更好,一个磁盘坏了,数据不会丢,还能完整恢复。缺点也很明显,容量变差了,两块磁盘实际的容量只有一块磁盘那么大。
RAID10
 
RAID10 是 RAID1 + RAID0,它兼具 RAID1 安全性和 RAID0 大容量的优点。还是拿“上山打老虎啊”举例,Disk0 和 Disk1 会写入 “上”,Disk2 和 Disk3 写入 “山”,依次类推,数据都将写入到两块磁盘中,从而保证了安全性,如果一个磁盘数据丢了 RAID1 的恢复机制可将数据完整恢复。
当然缺点也有,总容量是磁盘容量的一半。
 
 
类似的,还有 RAID01,先做 RAID0 再做 RAID1,不多介绍了,示意图如下所示:
 
 

RAID 类型

RAID 按类型分,可分为硬件 RAID 和 软件 RAID。
硬件 RAID 是实打实的磁盘阵列卡,上面有专门的芯片来处理 RAID 任务,所以性能相当好。
硬件 RAID 卡如下所示:
 
软件 RAID ,顾名思义,是用软件模拟 RAID 磁盘阵列卡的功能,利用软件 RAID 可以模拟多种磁盘阵列模式,除了 RAID0/RAID1/RAID10 等还可以有 RAID5/RAID6 等等模式。当然因为是软件模拟的,需要占用 CPU 和 I/O 的资源,所以性能不如硬件 RAID 好,不过对大多数人也没啥影响,毕竟不要钱啊...

RAID 上手

硬件 RAID
1. 重启系统,Ctrl + C 进入 utility 界面(不同 Liunx 进入 RAID 界面可能不一样),看到 RAID Properties 栏,如下图所示:
 
2. Enter 进入,会看到 3 个选项,RAID1 / RAID10 和 RAID 0,并且也有相应的 RAID 模式说明:
(硬件 RAID 的模式只有三个可选~)
 
3. 如果想创建哪个 RAID,选择相应的模式,保存。系统会自行组件这种模式的磁盘设备。
软件 RAID
软件 RAID 可用 mdadm 工具创建,这里使用 mdadm 创建一个 RAID10 的软件磁盘阵列。
 
1. 首先根据前文 LVM 中的描述创建 4 个 logical volume, Disk[0-3] (电脑没有多个磁盘分区,只能用逻辑卷来代替...)
2. 命令 mdadm --create --auto=yes /dev/md1 --raid-devices=4 --level=10 --spare-devices=0 /dev/cinder-volumes/Disk{0,1,2,3} 创建磁盘分区 /dev/md1。其中,--create 表示创建 RAID阵列, --auto=yes 表示后面接的是阵列名称,--raid-devices 表示raid 阵列有几块磁盘组成,--level 表示创建的 RAID 是哪种模式的,--spare-devices 表示有几块备用磁盘,最后接的是要组成磁盘阵列的磁盘名。
3. mkfs 制做文件系统,mount。
 
详细操作如下:
  1. [root@test ~]# cd /dev/md
  2. md/ md0
  3. [root@test ~]# df -hT
  4. Filesystem Type Size Used Avail Use% Mounted on
  5. /dev/sda2 xfs 895G 851G 44G 96% /
  6. [root@test ~]# vgdisplay
  7. --- Volume group ---
  8. VG Name test
  9. System ID
  10. Format lvm2
  11. Metadata Areas 1
  12. Metadata Sequence No 2884
  13. VG Access read/write
  14. VG Status resizable
  15. MAX LV 0
  16. Cur LV 13
  17. Open LV 10
  18. Max PV 0
  19. Cur PV 1
  20. Act PV 1
  21. VG Size 600.00 GiB
  22. PE Size 4.00 MiB
  23. Total PE 153599
  24. Alloc PE / Size 45156 / 176.39 GiB
  25. Free PE / Size 108443 / 423.61 GiB
  26. VG UUID Nu1VTG-dY65-Le4a-zMDV-9kkQ-hvrT-X5uZe0
  27.  
  28. [root@test ~]# lvcreate -l 50 -n Disk0 test
  29. Logical volume "Disk0" created.
  30. [root@test ~]# lvcreate -l 50 -n Disk1 test
  31. Logical volume "Disk1" created.
  32. [root@test ~]# lvcreate -l 50 -n Disk2 test
  33. Logical volume "Disk2" created.
  34. [root@test ~]# lvcreate -l 50 -n Disk3 test
  35. Logical volume "Disk3" created.
  36. [root@test ~]# lvdisplay | grep Disk
  37. LV Path /dev/test/Disk0
  38. LV Name Disk0
  39. LV Path /dev/test/Disk1
  40. LV Name Disk1
  41. LV Path /dev/test/Disk2
  42. LV Name Disk2
  43. LV Path /dev/test/Disk3
  44. LV Name Disk3
  45.  
  46. [root@test ~]# mdadm --create --auto=yes /dev/md1 --raid-devices=4 --level=10 --spare-devices=0 /dev/test/Disk{0,1,2,3}
  47. mdadm: Defaulting to version 1.2 metadata
  48. mdadm: array /dev/md1 started.
  49. [root@test ~]# cd /dev/md
  50. md/ md0 md1
  51.  
  52. [root@test ~]# mkfs -t ext4 /dev/md1
  53. mke2fs 1.42.9 (28-Dec-2013)
  54. Discarding device blocks: done
  55. Filesystem label=
  56. OS type: Linux
  57. Block size=1024 (log=0)
  58. Fragment size=1024 (log=0)
  59. Stride=512 blocks, Stripe width=1024 blocks
  60. 102000 inodes, 407552 blocks
  61. 20377 blocks (5.00%) reserved for the super user
  62. First data block=1
  63. Maximum filesystem blocks=34078720
  64. 50 block groups
  65. 8192 blocks per group, 8192 fragments per group
  66. 2040 inodes per group
  67. Superblock backups stored on blocks:
  68. 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
  69.  
  70. Allocating group tables: done
  71. Writing inode tables: done
  72. Creating journal (8192 blocks): done
  73. Writing superblocks and filesystem accounting information: done
  74.  
  75. [root@test ~]# mkdir -p /root/lianhuasheng/raid
  76. [root@test ~]# mount /dev/md1 /root/lianhuasheng/raid/
  77. [root@test ~]# df -hT
  78. Filesystem Type Size Used Avail Use% Mounted on
  79. /dev/sda2 xfs 895G 850G 45G 96% /
  80. /dev/md1 ext4 378M 2.3M 352M 1% /root/lianhuasheng/raid
  81.  
  82. [root@test ~]# lvdisplay | grep Disk -C 5
  83. --- Logical volume ---
  84. LV Path /dev/test/Disk0
  85. LV Name Disk0
  86. VG Name test
  87. LV UUID n0Qvxo-8UbS-mcpz-Qdju-dAjF-nAHk-WaNqdE
  88. LV Write Access read/write
  89. LV Creation host, time test.localdomain, 2020-03-18 23:42:11 +0800
  90. LV Status available
  91. # open 1
  92. LV Size 200.00 MiB
  93. Current LE 50
  94. Segments 1
  95. Allocation inherit
  96. Read ahead sectors auto
  97. - currently set to 8192
  98. Block device 253:47
  99.  
  100. --- Logical volume ---
  101. LV Path /dev/test/Disk1
  102. LV Name Disk1
  103. VG Name test
  104. LV UUID Eg29wy-3jBC-R44P-G5Nl-9D69-Noc0-HcDA8B
  105. LV Write Access read/write
  106. LV Creation host, time test.localdomain, 2020-03-18 23:42:22 +0800
  107. LV Status available
  108. # open 1
  109. LV Size 200.00 MiB
  110. Current LE 50
  111. Segments 1
  112. Allocation inherit
  113. Read ahead sectors auto
  114. - currently set to 8192
  115. Block device 253:48
  116.  
  117. --- Logical volume ---
  118. LV Path /dev/test/Disk2
  119. LV Name Disk2
  120. VG Name test
  121. LV UUID uWDcYc-0pso-vi6T-rXRD-i5ko-WSfG-K15qAY
  122. LV Write Access read/write
  123. LV Creation host, time test.localdomain, 2020-03-18 23:42:28 +0800
  124. LV Status available
  125. # open 1
  126. LV Size 200.00 MiB
  127. Current LE 50
  128. Segments 1
  129. Allocation inherit
  130. Read ahead sectors auto
  131. - currently set to 8192
  132. Block device 253:49
  133.  
  134. --- Logical volume ---
  135. LV Path /dev/test/Disk3
  136. LV Name Disk3
  137. VG Name test
  138. LV UUID 0ye1ED-ZEZK-Yj1d-QapB-QIMw-C930-sg8nQQ
  139. LV Write Access read/write
  140. LV Creation host, time test.localdomain, 2020-03-18 23:42:34 +0800
  141. LV Status available
  142. # open 1
  143. LV Size 200.00 MiB
  144. Current LE 50
  145. Segments 1
  146. Allocation inherit
 
从上面也可以看出,每个 Disk 的容量是 200M,四个 Disk 容量是 800M,而 RAID10 的文件系统是 378M,在加上文件系统自身占用的空间,正好等于磁盘总容量的一半。
 
 
最后,如果不用 RAID 的话记得要关闭 RAID:
  1. [root@test ~]# cat /etc/fstab | grep md1
  2. [root@test ~]# umount /root/lianhuasheng/raid
  3. [root@test ~]# mdadm --stop /dev/md1
  4. mdadm: stopped /dev/md1
  5. [root@test ~]# cat /proc/mdstat | grep md1
  6. [root@test ~]# cat /etc/mdadm.conf | grep md1
  7. cat: /etc/mdadm.conf: No such file or directory
  8. [root@test ~]# ll /dev/ | grep md1
  9. [root@test ~]#
 
/etc/fstab 是设置开机自动挂载磁盘分区的配置文件。
/etc/mdadm.conf 是 mdadm 的配置文件,如果有的话要把 md1 在文件中删掉。
 
 
(完)

每天学五分钟 Liunx 110 | 存储篇:RAID的更多相关文章

  1. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  2. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

  3. 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画

    原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...

  4. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  5. [变]C#谜题(1-10)表达式篇

    [变]C#谜题(1-10)表达式篇 最近偶然发现了<Java谜题>,很有意思,于是转到C#上研究一下. 本篇是关于表达式的一些内容. 谜题1:奇数性(负数的取模运算) 下面的方法意图确定它 ...

  6. GC算法精解(五分钟让你彻底明白标记/清除算法)

    GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底 ...

  7. zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》

    本篇文章阅读时间5分钟左右 点击看<每日五分钟搞定大数据>完整思维导图   zookeeper作为一个分布式协调系统,很多组件都会依赖它,那么此时它的可用性就非常重要了,那么保证可用性的同 ...

  8. 「每日五分钟,玩转JVM」:线程共享区

    前言 上一篇中,我们了解了JVM中的线程独占区,这节课我们就来了解一下JVM中的线程共享区,JVM中的线程共享区是跟随JVM启动时一起创建的,包括堆(Heap)和方法区()两部分,而线程独占区的程序计 ...

  9. 五分钟搭建一个基于BERT的NER模型

    BERT 简介 BERT是2018年google 提出来的预训练的语言模型,并且它打破很多NLP领域的任务记录,其提出在nlp的领域具有重要意义.预训练的(pre-train)的语言模型通过无监督的学 ...

  10. Python专题——五分钟带你了解map、reduce和filter

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter. 不知道大家看到ma ...

随机推荐

  1. ubuntu20.04安装goaccess实时对nginx日志进行分析

    ubuntu20.04安装goaccess实时对nginx日志进行分析 goaccess可以对nginx日志进行分析,生成实时动态页面,同时通过nginx反向代理来解决WebSocket数据传输问题. ...

  2. JVM整理笔记

    1.JVM位置 JVM是作用在操作系统之上的,它与硬件没有直接的交互 2.JVM体系结构 3.类装载器ClassLoader 类装载器:负责加载class文件,class文件在文件开头有特定的文件标示 ...

  3. 数字孪生系统为何需要将GIS系统进行融合?

    数字孪生是一种通过数字模型实时仿真现实世界的技术,而GIS(地理信息系统)则是用于收集.存储.处理和展示地理数据的工具.将数字孪生系统与GIS系统进行融合,可以为各行业带来诸多优势和创新.那么数字孪生 ...

  4. Python——第二章:字符的编码encode和解码decode

    相关阅读:字符集(Character Set)和编码(Encoding)的历史演化 字符集和编码的总结: 1. ASCII编码: 8bit, 1byte => 256(最大可表示)2. GBK编 ...

  5. 6、Flutter 列表组件 滑动

    列表有以下分类: 1.垂直列表 class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget bui ...

  6. 云图说|OLAP开源引擎的一匹黑马,MRS集群组件之ClickHouse

    摘要:ClickHouse是俄罗斯公司Yandex在2016年开源的高性能.开源联机分析列式数据库管理系统.开源后,凭借卓越的分析性能.极好的线性扩展能力和丰富的功能,被业界公认为实时分析领域OLAP ...

  7. 解放重复劳动丨华为云IoT API Explorer对接小程序实现系统化应用

    摘要:<物联网平台接口调用实验>详细讲解了API Explorer的应用,根据提供的接口,结合真实案例,制作了一个小程序,真正的把它应用起来,解放重复劳动,小程序是一个很好的平台,作为应用 ...

  8. 如何构建面向海量数据、高实时要求的企业级OLAP数据引擎?

    在字节跳动各产品线飞速成长的过程中,对数据分析能力也提出了更高的要求,现有的主流数据分析产品都没办法完全满足业务要求.因此,字节跳动在ClickHouse引擎基础上重构了技术架构,实现了云原生环境的部 ...

  9. A/B测试助力游戏业务增长

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 中国游戏行业发展现状及挑战 国内市场增长乏力 2021年游戏销售收入2965.13亿元,同比增长6.4% ...

  10. 火山引擎 DataLeap:在数据研发中,如何提升效率?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在数仓及中台研发过程中,研发人员经常需要在不同任务中维护相同或类似代码,不仅费时费力,并且代码迭代后也面临不同业务 ...