LINUX学习:Linux基础教程:独立硬盘冗余阵列-RAID

LINUX学习:Linux基础教程:独立硬盘冗余阵列-RAID,第1张

概述介绍《LINUX学习:Linux基础教程:独立硬盘冗余阵列-RAID》开发教程,希望对您有用。

《liNUX学习:linux基础教程:独立硬盘冗余阵列-RAID》要点:
本文介绍了liNUX学习:linux基础教程:独立硬盘冗余阵列-RAID,希望对您有用。如果有疑问,可以联系我们。

独立硬盘冗余阵列(RAID,Redundant Array of Independant disks),旧称为便宜磁盘冗余阵列(Redundant Array of Inexpensive disks).1987年美国加州伯克利分校的一篇名为《A Case for Redundant Arrays of Inexpensive disk(RAID)》论文诞生,这标志着RAID技术的开始.

那么什么是RAID呢?简单的来讲便是把多个硬盘组合起来,成为一个硬盘阵列组, *** 作系统会把它当做是一个硬盘,其性能能够达到甚至超过单个昂贵容量大的硬盘.RAID提供了多种硬盘组合的方式,相比单个硬盘来说,提高了硬盘得I/O能力.多个磁盘之间相互冗余,提高了耐用性.RAID的硬盘组合方式有:RAID-0,RAID-1,RAID-2,RAID-3,RAID-4,RAID-5,RAID-6,RAID-7,RAID10,RAID-01,RAID-50,RAID-53,RAID-60,JBOD. RAID的实现模式

Software RAID:

软件磁盘阵列,由cpu处置和协调一个RAID里面各个硬盘的作业,这样就会给cpu带来较多的运算压力,分为3种:

1)基于主板的的磁盘阵列:通常上是由主板上的芯片组提供RAID功效.

2)硬件辅助磁盘阵列:必要RAID卡和相关厂商提供的驱动程序,RAID功能是由驱动程序和cpu运算来提供

3) *** 作系统的RAID功效:linux、windows Server等 *** 作系统内置的RAID功效

虽然软RAID实现的有多种,然则在生产环境还是不建议使用的.

HarDWare RAID:
硬件磁盘阵列,在RAID卡上内置了cpu处理器,这样就不占用服务器的cpu了.一般硬件磁盘阵列都会有备份的电源模块和NVRAM(非易失性内存),当系统断掉后,备份电源开始供电,将硬盘读写的日志保留在内存中,当系统恢复,备份电源关闭供电,再在NVRAM读取日志数据,继续完成上次断电前没有完成的作业.

 

常用RAID先容

常用的RAID有:RAID0,RAID6,RAID-10,RAID50.

 

RAID0

RAID0,也称条带卷(striPing).在RAID0中,数据会被切成片,按必定顺序会被写到所有的磁盘里面,如下图:

若一片数据被切割成了A1-A8,将存储在一个由2块disk构成的RAID0,那么第一段数据块A1会被存储在disk0中,第二段数据块A2会被存储在disk1中,第三段数据块会被存储在disk0中,以此类推,这一片数据会被均分到2块磁盘上.

RAID0的优毛病:

1)速度快,写和读的才能得到了提高;

2)RAID0没有冗余的才能,一旦一块磁盘出现了故障,则所有的数据都将不会恢复;

3)RAID0必要N块磁盘才能实现(N>=2);

4)能够存储数据的年夜小为N*min(S1,S2,S3,S4....)

在RAID0中有两个紧张的参数:

条带宽度:stripe wIDth,它指的是可以被并行写入的数据块的个数,也便是实现RAID0中磁盘的个数;

条带大小:stripe size,它指的是每次写入磁盘的数据块的大小,大小一般为2KB或者512KB甚至更大,size越小,数据被分割的次数就越多.stripe size对性能是有必定的影响的,在生产环境中,需要调整好.

 

 RAID1

RAID1,镜像化,在RAID1中,数据会被复制成多份,存储在多个磁盘上,如下图:

若一片数据将要被存储,数据会被复制成多份(取决RAID1的磁盘个数),然后存储到每一个磁盘上.

 

 RAID1的优毛病:

1)冗余性和数据的可靠性最高,只要不是磁盘同时损坏了,一般都不会带来数据丧失的问题;

2)RAID1的容量取决容量最小的那个磁盘,写入速度也是取决于最小的那个磁盘,较年夜的磁盘的剩余空间可       以分区使用,不会造成浪费;

3)RAID1的读取速率理论上来说是磁盘个数的倍数;

4)RAID1必要N块磁盘才能实现(N>=2)

5)能够存储数据的年夜小为min(S1,S3...)

 

 RAID3

RAID3,数据类似于RAID0,被条带化的存储在多个磁盘中,数据以字节为单位,与RAID0分歧的是,RAID3单独使用了一块独立的磁盘用来存储数据的奇偶校验值,如下图所示:

数据被切片存储在disk0-2上,同时计算处奇偶校验值存储在disk3上,这样即使disk0-2中损坏一块磁盘,也能根据奇偶校验值获得损坏磁盘的数据.

 

RAID3的优缺点:
1.较高的容错才能;

2.不适合写入 *** 作较多的情景,会给校验盘带来必定的负载,适合读取 *** 作较多的应用环境;

3.RAID3必要N块磁盘(N>=3);

4.能够存储数据的年夜小为(N-1)*min(S1,S4....).

  RAID4

和RAID3类似,RAID4不是以字节为存取单元,RAID4的数据以块(一般为512字节)为单元,如下图:

以块为单位带来的好处就是,减少了奇偶检验的次数,好比,如果一段数据的大小为10个字节,在RAID3上可能需要计算2次奇偶检验值了,但是在RAID4上,10个字节都会被放在第一个磁盘上,并不需要计算.

 

 RAID4的优毛病:

1.较高的容错才能;

2.提高了小量数据的I/O才能;

3.RAID4必要N块磁盘(N>=3);

4.能够存储数据的年夜小为(N-1)*min(S1,S4....).

 RAID5

RAID5可以理解成是RAID0和RAID1的折中方案,把数据条带化后存储,而且将数据奇偶检验值存储在所有的硬盘上,如下图:

数据被条带化存储到了磁盘上,并且每个磁盘上都能够存储奇偶检验值,其读写速度和RAID0差不多,可能写的时候要慢一点,比拟要计算奇偶检验,这样,即使坏掉一块磁盘,只需要更换上好的磁盘,RAID会利用剩下奇偶检验去重建磁盘上的数据.

 

 RAID5的优毛病:

1)较高的容错才能;

2)读写速率快;

3)RAID4必要N块磁盘(N>=3);

4)能够存储数据的年夜小为(N-1)*min(S1,S4....).

 

 RAID6

与RAID5类似,只是增加了第二个独立的奇偶检验信息块,使用了两种分歧的奇偶检验算法,如下图所示:

数据仍然是被条带化得存储在磁盘上,但是会计算出两个独立的奇偶查验值,相对于RAID5来说有更多的I/O *** 作和计算量,所以RAID6通常不会以软件来实现,一般会使用硬件实现,RAID6也是最常见的磁盘阵列.

 

 RAID6的优毛病:

1)较高的容错才能

2)同一RAID6中最多运行同时损坏2块磁盘,调换磁盘后,数据将被重新计算写入;

3)RAID6必要N个磁盘(N>=4);

4)RAID容量为(N-2)*min(s1,s2,s3,...)

  RAID 01

RAID 01是一种混合的磁盘阵列,等于RAID0和RAID1的混合,先做条带,再做镜像:

RAID01中,同组RAID0只要出现一个磁盘损坏,那么这个RAID 0就不克不及你使用了,值剩下其他组的磁盘运作,可靠性较低.

 

 RAID01的优毛病:

1)数据靠得住性低

2)RAID01必要N个磁盘(N>=4)

更多详情见请继续阅读下一页的出色内容

_baIDu_page_break_tag_ RAID 10

和RAID 01相反,RAID10是先做RAID1,再做RAID0,如下图所示:

RAID10和RAID01在读写速度上没有什么太大的差别,但是RAID10的数据平安性比较高,若下图左边那组RAID1中磁盘损坏了一个,另外一个也能用,右边那组RAID1再损坏一个数据也是恢复的,除非一组RAID1中的磁盘都坏掉了.

 

 RAID 10的优毛病:

1)较高的容错才能

2)RAID10必要N个磁盘(N>=4)

 RAID 50

RAID 50是RAID5和RAID0的组合,先做RAID5,RAID 5至少必要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少必要6颗硬盘,如下图.

在底层的任意一组或者多组的RAID5中呈现了一个磁盘的损坏是可以接受的,但是若呈现了2个或者以上的磁盘损坏,整个RAID50就会损坏.

 

RAID50的优毛病:

1)较高的容错才能

2)RAID10必要N个磁盘(N>=6)

 JBOD

Just a Bunch of disks,能够将多块磁盘的空间合并起来的一个持续的空间,可靠性较低.

在linux系统上实现Software RAID

 在CentOS中,使用模块化得对象mdadm,如果没有可以使用:

yum -y install mdadm
 基本用法如下: 
命令的语法格式:mdadm [mode] <raIDdevice> [options] <component-devices>-C:创建模式    -n #: 使用#个块设备来创建此RAID;    -l #:指明要创建的RAID的级别;    -a {yes|no}:自动创建目标RAID设备的设备文件;    -c CHUNK_SIZE: 指明块大小;    -x #: 指明空闲盘的个数;-D:显示raID的详细信息    mdadm -D  /dev/md#管理模式:    -f:标志指定磁盘为损坏    -a:添加磁盘    -r:移除磁盘停止md设备:    mdadm -S /dev/md#

举例:创建一个可用空间为10G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录.

先来分析一下:RAID1为镜像磁盘阵列,最少必要2个磁盘,可用空间为10G,即磁盘最小大小为10G即可,我们这里就使用1块硬盘的不同分区来模拟各个磁盘,每个10G:

[root@localhost ~]# fdisk -l /dev/sdbdisk /dev/sdb: 128.8 GB,128849018880 bytes255 heads,63 sectors/track,15665 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesdisk IDentifIEr: 0xf9b59c0f   Device Boot      Start         End      Blocks   ID  System/dev/sdb1               1        1306    10490413+  83  linux/dev/sdb2            1307        2612    10490445   83  linux/dev/sdb3            2613        3918    10490445   83  linux

 使用以下命令创立RAID1系统,-C为创立模式,/dev/md0设备文件名,-n 2:使用2个块设备创立此RAID,-x 1:指定1个空闲盘的,-l:指定硬盘RAID等级,-a yes:自动创立RAID的设备文件,/dev/adb{1,2,3}:指定磁盘位置

[root@localhost ~]# mdadm -C /dev/md0 -n 2 -x 1 -l 1 -c 128 -a yes /dev/sdb{1,2,3}mdadm: Note: this array has Metadata at the start and    may not be suitable as a boot device.  If you plan to    store '/boot' on this device please ensure that    your boot-loader understands md/v1.x Metadata,or use    --Metadata=0.90Continue creating array? ymdadm: Defaulting to version 1.2 Metadatamdadm: array /dev/md0 started.

 使用 cat /proc/mdstat 查看RAID构建的进度和预期完成的光阴:

unused devices: <none>[root@localhost ~]# cat /proc/mdstat PersonalitIEs : [raID1] md0 : active raID1 sdb3[2](S) sdb2[1] sdb1[0]      10482176 blocks super 1.2 [2/2] [UU]      [=============>.......]  resync = 68.6% (7200128/10482176) finish=0.2min speed=200001K/sec      unused devices: <none>[root@localhost ~]# cat /proc/mdstat PersonalitIEs : [raID1] md0 : active raID1 sdb3[2](S) sdb2[1] sdb1[0]      10482176 blocks super 1.2 [2/2] [UU]      unused devices: <none>
  查看RAID1的详情: 
[root@localhost ~]# mdadm -D /dev/md0 /dev/md0:        Version : 1.2  Creation Time : Sun Jul 30 05:16:32 2017     RaID Level : raID1     Array Size : 10482176 (10.00 GiB 10.73 GB)  Used Dev Size : 10482176 (10.00 GiB 10.73 GB)   RaID Devices : 2  Total Devices : 3    Persistence : Superblock is persistent    Update Time : Sun Jul 30 05:17:25 2017          State : clean  Active Devices : 2Working Devices : 3 Failed Devices : 0  Spare Devices : 1           name : localhost.localdomain:0  (local to host localhost.localdomain)           UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9         Events : 17    Number   Major   Minor   RaIDDevice State       0       8       17        0      active sync   /dev/sdb1       1       8       18        1      active sync   /dev/sdb2       2       8       19        -      spare   /dev/sdb3

 格局化RAID1为ext4文件系统:

[root@localhost ~]# mkfs.ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010)文件系统标签= *** 作系统:linux块大小=4096 (log=2)分块大小=4096 (log=2)StrIDe=0 blocks,Stripe wIDth=0 blocks655360 inodes,2620544 blocks131027 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=268435456080 block groups32768 blocks per group,32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks:     32768,98304,163840,229376,294912,819200,884736,1605632正在写入inode表: 完成                            Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 35 mounts or180 days,whichever comes first.  Use tune2fs -c or -i to overrIDe.
  将/dev/md0挂载到/backup目录下: 
[root@localhost ~]# mount /dev/md0 /backup/[root@localhost ~]# [root@localhost ~]# dffilesystem                   1K-blocks    Used Available Use% Mounted on/dev/mapper/VolGroup-lv_root  51606140 1122252  47862448   3% /tmpfs                           953276       0    953276   0% /dev/shm/dev/sda1                       495844   33466    436778   8% /boot/dev/mapper/VolGroup-lv_home  67708512  184084  64085020   1% /home/dev/md0                      10317624  154100   9639416   2% /backup

 可以使用 -f 将此中的某个磁盘模拟为坏的故障硬盘

[root@localhost backup]# mdadm /dev/md0 -f /dev/sdb1mdadm: set /dev/sdb1 faulty in /dev/md0
 再来看一下RAID1的详细信息,/dev/sdb3状态变为active 
[root@localhost backup]# mdadm -D /dev/md0 /dev/md0:        Version : 1.2  Creation Time : Sun Jul 30 05:16:32 2017     RaID Level : raID1     Array Size : 10482176 (10.00 GiB 10.73 GB)  Used Dev Size : 10482176 (10.00 GiB 10.73 GB)   RaID Devices : 2  Total Devices : 3    Persistence : Superblock is persistent    Update Time : Sun Jul 30 05:37:02 2017          State : clean  Active Devices : 2Working Devices : 2 Failed Devices : 1  Spare Devices : 0           name : localhost.localdomain:0  (local to host localhost.localdomain)           UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9         Events : 38    Number   Major   Minor   RaIDDevice State       2       8       19        0      active sync   /dev/sdb3       1       8       18        1      active sync   /dev/sdb2       0       8       17        -      faulty   /dev/sdb1

 使用 -r 选项可以或许移除坏的硬盘

[root@localhost backup]# mdadm /dev/md0 -r /dev/sdb1mdadm: hot removed /dev/sdb1 from /dev/md0
 好的,我们再来添加一块分区当做磁盘 
[root@localhost backup]# fdisk /dev/sdbWARNING: DOS-compatible mode is deprecated. It's strongly recommended to         switch off the mode (command 'c') and change display units to         sectors (command 'u').Command (m for help): nCommand action   e   extended   p   primary partition (1-4)pSelected partition 4First cylinder (3919-15665,default 3919): Using default value 3919Last cylinder,+cylinders or +size{K,M,G} (3919-15665,default 15665): +10GCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table Failed with error 16: 设备或资源忙.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)

 咦,有告警!因为当前的磁盘已经有分区被挂载当根文件系统的目录上了,内核没有辨认,我们来查看/proc/parttions,果真没有辨认

[root@localhost backup]# cat /proc/partitions major minor  #blocks  name   8       16  125829120 sdb   8       17   10490413 sdb1   8       18   10490445 sdb2   8       19   10490445 sdb3   8        0  125829120 sda   8        1     512000 sda1   8        2  125316096 sda2 253        0   52428800 dm-0 253        1    4096000 dm-1 253        2   68788224 dm-2   9        0   10482176 md0
 使用以下命令关照内核强制重读以下磁盘分区表
[root@localhost backup]# partx -a  /dev/sdb

 添加/dev/sdb4到RAID1

[root@localhost backup]# mdadm /dev/md0 -a /dev/sdb4mdadm: added /dev/sdb4
 查看RAID1的详细信息,/dev/sdb4成功被参加 
[root@localhost backup]# mdadm -D /dev/md0/dev/md0:        Version : 1.2  Creation Time : Sun Jul 30 05:16:32 2017     RaID Level : raID1     Array Size : 10482176 (10.00 GiB 10.73 GB)  Used Dev Size : 10482176 (10.00 GiB 10.73 GB)   RaID Devices : 2  Total Devices : 3    Persistence : Superblock is persistent    Update Time : Sun Jul 30 05:51:52 2017          State : clean  Active Devices : 2Working Devices : 3 Failed Devices : 0  Spare Devices : 1           name : localhost.localdomain:0  (local to host localhost.localdomain)           UUID : a46c7642:a46e274a:05923aeb:4c1ae0e9         Events : 40    Number   Major   Minor   RaIDDevice State       2       8       19        0      active sync   /dev/sdb3       1       8       18        1      active sync   /dev/sdb2       3       8       20        -      spare   /dev/sdb4

 设置开机可以自动挂载只/backup目录下,修改配置文件/etc/fstab即可

## /etc/fstab# Created by anaconda on Fri Jul 28 06:34:35 2017## Accessible filesystems,by reference,are maintained under '/dev/disk'# See man pages fstab(5),findfs(8),mount(8) and/or blkID(8) for more info#/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1UUID=bc67ad74-46b3-4abc-b8a7-c4fb7cd6552a /boot                   ext4    defaults        1 2/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0tmpfs                   /dev/shm                tmpfs   defaults        0 0devpts                  /dev/pts                devpts  gID=5,mode=620  0 0sysfs                   /sys                    sysfs   defaults        0 0proc                    /proc                   proc    defaults        0 0/dev/md0                /backup                 ext4    defaults        0 0 
小知识点:在查看RAID创立过程的进度时候,可加上watch命令动态查看创立RAID的进度watch  [options]  'COMMAND'选项 -n# :指定刷新间隔,单位秒
watch -n1 'cat /proc/mdstat'

 

本文永远更新链接地址

更多liNUX教程,尽在内存溢出PHP学院专栏。欢迎交流《liNUX学习:linux基础教程:独立硬盘冗余阵列-RAID》!

总结

以上是内存溢出为你收集整理的LINUX学习:Linux基础教程:独立硬盘冗余阵列-RAID全部内容,希望文章能够帮你解决LINUX学习:Linux基础教程:独立硬盘冗余阵列-RAID所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1042242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存