linux自学笔记——RAID级别特性以及软RAID的实现

简介:

RAIDRedundant Arrays of Inexpensive Disks 廉价冗余磁盘阵列,又称为Redundant Arrays of Independent Disks,独立冗余磁盘阵列。

其基本原理就是利用多块较小的磁盘通过不同的组织方式,组成一个大的磁盘组,以提高磁盘的IO能力和耐用性。由于组织方式不同,所以把RAID分为多个级别。而最常用的是RAID0RAID1RAID5RAID6RAID10RAID01.下面我们将对以上的级别进行比较分析。

级别:level

       RAID 0 RAID 0又称为条带存储,基本原理就是将数据划分为数据块分别存于各个磁盘中。

              读写性能得到提升,由于数据在写入时被划分为N块,理论上,读写速度将是之前的N倍;

              可用空间为:N*minmin为容量最小的那块磁盘容量);

                   无容错能力,当一块磁盘损坏时,磁盘内的数据将会发生损坏;

              最少磁盘数:2,2+

              RAID  0如右下图所示:

             wKioL1mKzr-Cf8AhAAAq6AIQfug695.png-wh_50

       RAID 1RAID 1又称为镜像存储,基本原理就是将数据分别存入磁盘阵列中的每一块磁盘中,实现数据备份。

              读性能提升,写性能略有下降,由于数据被百分之百的复制到了其他磁盘,所以写性能下降,而读取性能提升;

              可用空间为:1*minmin为容量最小的磁盘的容量);

              有冗余能力,当一块磁盘发生损坏时,数据不会发生损坏;

              最少磁盘数:2,2+

              RAID 1如下图所示:

             wKiom1mKzvGRHb4AAAAr1E3J5UQ478.png-wh_50

RAID 5RAID 5采用校验码和并行传送技术,把数据和对应的XOR校验码分别存储在不同的磁盘上,其中全部的的XOR

  校验码占据的磁盘空间为一块磁盘的大小,剩余的N-1块磁盘存放数据。

  读,写性能提升,由于在写入数据时需要不断计算校验码的关系,其写入速率略有下降;

  可用空间:(N-1)*minmin为容量最小的磁盘的容量);

  有容错能力:一块磁盘,当一块磁盘放生损坏时,通过校验码可以恢复磁盘的数据,数据安全性得到了保证;

  最少磁盘数:33+

              RAID 5如右下图所示:

             wKiom1mKzwajntJWAABY7ALzSDA645.png-wh_50

RAID 6RAID 6,采用两个独立分布式校验码,在RAID 5的基础上多了一个校验码;

  读写性能提升,同样写入数据需要计算校验码关系,写入速率下降;

  可用空间:(N-2)*min(容量最小的磁盘的容量)

  有容错能力:2,采用两个分布式校验码,就算有两块磁盘同时损坏,数据也能恢复,数据非常安全;

  最少磁盘数:44+;      

              RAID 6如右下图所示:

     wKioL1mKzxaAZnMZAAAyRRkbSC8769.png-wh_50

混合类型:

RAID 10RAID 10就是先做RAID 1,通过控制器将磁盘划分为镜像卷,进行冗余,再做RAID 0,通过控制器将数据

  分为条带存储。

  读写性能提升;

  可用空间:N*min/2,空间利用率降低了50%

  有容错能力:每组镜像最多只能坏一块;

  最少磁盘数:4,4+

              RAID 10如右下图所示

             wKioL1mKzyfhZr_bAAA4wSrXBio753.png-wh_50

RAID 01RAID 01RAID 10相反,先做RAID 0,后做RAID 1,读写性能得到了提升,空间利用率为50%

以上为RAID常用的几个级别的特性,下面我们将对其实现方式做一些说明。

RAID的实现方式可分为两种,一种是硬件实现方式,另外一种是软件实现方式。硬件实现方式是基于硬件RAID卡实现,而软件的RAID是通过madm工具来实现的,我们先对模式化工具mdadm进行简单的了解。

mdadm命令:

mdadm - manage MD devices aka Linux Software RAID

语句格式为mdadm [mode] <raiddevice> [options]<component-devices>

模式:

创建:-C

  装配:-A

监控:-F

管理:-f,-r,-a

<raiddevice>:/dev/md#

<component-devices>:任意块设备

 

-C:创建模式

     -n #:使用#块磁盘来创建此设备;

     -l #:指明要创建的RAID的级别;

     -a {yes|no}:自动创建目标RAID的设备文件;

     -c CHUNK SIZE:指明块大小;

     -x #:指明空闲盘的个数;

  -D:显示RAID的详细信息:

     mdadm –D /dev/md#

管理模式:

     -f:标记指定的磁盘为损坏;

     -a:添加磁盘;

     -r:移除磁盘;

观察md设备的状态:

     cat /proc/mdstat

停止md设备:

     mdadm –S /dev/md#

Watch命令:

     -n #:刷新间隔,单位为秒;

     Watch –n# ‘COMMAND’

以上为mdadm的基础用法,下面我们将通过实例建一个软RAID:

1.   使用fdisk命令划分4个分区,其中3个做RAID 5,还有一个做空闲盘;

[root@claude ~]# fdisk/dev/sdb

Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with diskidentifier 0x262f7c1e.

Changes will remain in memory only, untilyou decide to write them.

After that, of course, the previous contentwon't be recoverable.

 

Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)

 

WARNING: 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): n

Command action

  e   extended

  p   primary partition (1-4)

e

Partition number (1-4): 1

First cylinder (1-2610, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G}(1-2610, default 2610):

Using default value 2610

 

Command (m for help): n

Command action

  l   logical (5 or over)

  p   primary partition (1-4)

l

First cylinder (1-2610, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G}(1-2610, default 2610): +2G

 

Command (m for help): N

Command action

  l   logical (5 or over)

  p   primary partition (1-4)

L

First cylinder (263-2610, default 263):

Using default value 263

Last cylinder, +cylinders or +size{K,M,G}(263-2610, default 2610): +2G

 

Command (m for help): N

Command action

  l   logical (5 or over)

  p   primary partition (1-4)

L

First cylinder (525-2610, default 525):

Using default value 525

Last cylinder, +cylinders or +size{K,M,G}(525-2610, default 2610): +2G

 

Command (m for help): N

Command action

  l   logical (5 or over)

  p   primary partition (1-4)

L

First cylinder (787-2610, default 787):

Using default value 787

Last cylinder, +cylinders or +size{K,M,G}(787-2610, default 2610): +2G

 

Command (m for help): p

 

Disk /dev/sdb: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk identifier: 0x262f7c1e

 

  Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1        2610   20964793+   5  Extended

/dev/sdb5               1         262    2104452   83  Linux

/dev/sdb6             263         524    2104483+  83  Linux

/dev/sdb7             525         786    2104483+  83  Linux

/dev/sdb8             787        1048    2104483+  83  Linux

2.   分区都创建好以后将分区的id都改为fd格式,并保存退出:

Command (m for help): t

Partitionnumber (1-8): 5

Hex code(type L to list codes): fd

Changedsystem type of partition 5 to fd (Linux raid autodetect)

 

Command (m for help): t

Partitionnumber (1-8): 6

Hex code(type L to list codes): fd

Changedsystem type of partition 6 to fd (Linux raid autodetect)

 

Command (m for help): t

Partitionnumber (1-8): 7

Hex code(type L to list codes): fd

Changedsystem type of partition 7 to fd (Linux raid autodetect)

 

Command (m for help): t

Partitionnumber (1-8): 8

Hex code(type L to list codes): fd

Changedsystem type of partition 8 to fd (Linux raid autodetect)

 

Command (m for help): p

 

Disk/dev/sdb: 21.5 GB, 21474836480 bytes

255 heads,63 sectors/track, 2610 cylinders

Units =cylinders of 16065 * 512 = 8225280 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x262f7c1e

 

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1        2610   20964793+   5  Extended

/dev/sdb5               1         262    2104452   fd  Linux raid autodetect

/dev/sdb6             263         524    2104483+  fd  Linux raid autodetect

/dev/sdb7             525         786    2104483+  fd  Linux raid autodetect

/dev/sdb8             787        1048    2104483+  fd  Linux raid autodetect

Command (m for help): w

3.   所有分区都已建好,效果如下:

[root@claude~]# fdisk -l /dev/sdb

 

Disk/dev/sdb: 21.5 GB, 21474836480 bytes

255 heads,63 sectors/track, 2610 cylinders

Units =cylinders of 16065 * 512 = 8225280 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x262f7c1e

 

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1        2610   20964793+   5 Extended

/dev/sdb5               1         262    2104452   fd  Linux raid autodetect

/dev/sdb6             263         524    2104483+  fd  Linux raid autodetect

/dev/sdb7             525         786    2104483+  fd  Linux raid autodetect

/dev/sdb8             787        1048    2104483+  fd  Linux raid autodetect

4.   对磁盘做RAID 5;

[root@claude~]# mdadm -C /dev/md0 -a yes -l 5-n 3 -x 1 /dev/sdb{5,6,7,8}

mdadm:Defaulting to version 1.2 metadata

mdadm:array /dev/md0 started.

5.   查看md状态;

[root@claude~]# watch -n1 cat /proc/mdstat

Personalities: [raid6] [raid5] [raid4]

md0 :active raid5 sdb7[4] sdb8[3](S) sdb6[1] sdb5[0]

      4204544 blocks super 1.2 level 5, 512kchunk, algorithm 2 [3/3] [UUU]

     

unuseddevices: <none>

6.   格式化磁盘;

[root@claude~]# mke2fs -t ext4 /dev/md0

mke2fs1.41.12 (17-May-2010)

Filesystemlabel=

OS type:Linux

Blocksize=4096 (log=2)

Fragmentsize=4096 (log=2)

Stride=128blocks, Stripe width=256 blocks

262944inodes, 1051136 blocks

52556blocks (5.00%) reserved for the super user

First datablock=0

Maximumfilesystem blocks=1077936128

33 blockgroups

32768blocks per group, 32768 fragments per group

7968inodes per group

Superblockbackups stored on blocks:

   32768, 98304, 163840, 229376, 294912, 819200,884736

 

Writinginode tables: done                           

Creatingjournal (32768 blocks): done

Writingsuperblocks and filesystem accounting information: done

 

Thisfilesystem will be automatically checked every 30 mounts or

180 days,whichever comes first.  Use tune2fs -c or-i to override.

7.   挂载检验RAID是否成功创建

[root@claude~]# mkdir mydata       #创建挂载点

[root@claude~]# ls

anaconda-ks.cfg  Desktop   Downloads   install.log.syslog  mydata    Public    Videos

bin              Documents  install.log Music               Pictures Templates

[root@claude~]# mount /dev/md0 /mydata        #挂载RAID

[root@claude~]# mount

/dev/sda2on / type ext4 (rw)

proc on/proc type proc (rw)

sysfs on/sys type sysfs (rw)

devpts on/dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shmtype tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")

none on/proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/md0on /mydata type ext4 (rw)

[root@claude~]# mdadm -D /dev/md0

/dev/md0:

        Version : 1.2

  Creation Time : Tue Aug  8 23:56:04 2017

     Raid Level : raid5

     Array Size : 4204544 (4.01 GiB 4.31 GB)

  Used Dev Size : 2102272 (2.00 GiB 2.15 GB)

   Raid Devices : 3

  Total Devices : 4

    Persistence : Superblock is persistent

 

    Update Time : Wed Aug  9 00:02:23 2017

          State : clean

 Active Devices : 3

WorkingDevices : 4

 Failed Devices : 0

  Spare Devices : 1

 

         Layout : left-symmetric

     Chunk Size : 512K

 

           Name : claude.amax:0  (local to host claude.amax)

           UUID :31cf9e3b:5296ea45:b78b0df8:c0a5f09b

         Events : 18

 

    Number  Major   Minor   RaidDevice State

       0      8       21        0     active sync   /dev/sdb5

       1      8       22        1     active sync   /dev/sdb6

       4      8       23        2     active sync   /dev/sdb7

 

       3      8       24        -     spare   /dev/sdb8

[root@claude~]# df -lh /mydata               #查看磁盘容量

Filesystem      Size Used Avail Use% Mounted on

/dev/md0        3.9G 8.1M  3.7G   1% /mydata

如果要让此文件系统自动挂载,需要在/etc/fstab中更改配置文件;

模拟RAID5其中一块磁盘损坏,空闲盘会自动补充到RAID5中去;

[root@claude~]# mdadm /dev/md0 -f /dev/sdb5  #模拟磁盘损坏

mdadm: set/dev/sdb5 faulty in /dev/md0

[root@claude~]# mdadm -D /dev/md0            #查看md0状态

/dev/md0: 

        Version : 1.2

  Creation Time : Tue Aug  8 23:56:04 2017

     Raid Level : raid5

     Array Size : 4204544 (4.01 GiB 4.31 GB)

  Used Dev Size : 2102272 (2.00 GiB 2.15 GB)

   Raid Devices : 3

  Total Devices : 4

    Persistence : Superblock is persistent

 

    Update Time : Wed Aug  9 00:11:00 2017

          State : clean

 Active Devices : 3

WorkingDevices : 3

 Failed Devices : 1

  Spare Devices : 0

 

         Layout : left-symmetric

     Chunk Size : 512K

 

           Name : claude.amax:0  (local to host claude.amax)

           UUID :31cf9e3b:5296ea45:b78b0df8:c0a5f09b

         Events : 37

 

    Number  Major   Minor   RaidDevice State

       3      8       24        0     active sync   /dev/sdb8

       1      8       22        1     active sync   /dev/sdb6

       4      8       23        2     active sync   /dev/sdb7

 

       0      8       21        -     faulty   /dev/sdb5

[root@claude~]# mdadm /dev/md0 -r /dev/sdb5    #移除磁盘

mdadm: hotremoved /dev/sdb5 from /dev/md0

[root@claude~]# mdadm /dev/md0 -a /dev/sdb5    #增加磁盘

mdadm:added /dev/sdb5

 



本文转自 claude_liu 51CTO博客,原文链接:http://blog.51cto.com/claude666/1954865,如需转载请自行联系原作者

相关文章
|
6天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
22 0
|
7天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
25 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
1月前
|
算法 Linux
【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法
【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法
|
2天前
|
存储 安全 Linux
Linux中的软RAID
Linux中的软RAID
16 2
|
6天前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
13 0
|
23天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
40 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
1月前
|
Linux 网络安全 开发工具
【Linux笔记】常用的Linux的指令
【Linux笔记】常用的Linux的指令
|
监控 关系型数据库 应用服务中间件
|
7天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
Linux
【Linux】深入理解ls命令
【Linux】深入理解ls命令