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

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

级别:level

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

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

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

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

最少磁盘数:2,2+;

RAID  0如右下图所示:

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

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

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

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

最少磁盘数:2,2+;

RAID 1如下图所示:

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

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

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

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

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

最少磁盘数:3,3+;

RAID 5如右下图所示:

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

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

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

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

最少磁盘数:4,4+;

RAID 6如右下图所示:

混合类型:

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

分为条带存储。

读写性能提升;

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

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

最少磁盘数:4,4+;

RAID 10如右下图所示

RAID 01:RAID 01与RAID 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,如需转载请自行联系原作者

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

  1. linux软raid阅读笔记,linux自学笔记——RAID级别特性以及软RAID的实现

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

  2. linux下使用mdadm组软raid,Linux下使用mdadm创建和管理软raid

    Linux下使用mdadm创建和管理软raid 注:本次操作以RHEL4为例,但应该可以应用到其它大部分的distro上(guess). mdadm的几个常用参数 -C 创建Raid,后面跟参数,代表 ...

  3. linux软RAId配置与管理总结,Linux下使用mdadm创建和管理软raid(转)

    Linux下使用mdadm创建和管理软raid 注:本次操作以RHEL4为例,但应该可以应用到其它大部分的distro上(guess). mdadm的几个常用参数 -C 创建Raid,后面跟参数,代表 ...

  4. linux mdadm 脚本,Linux下使用mdadm创建和管理软raid

    Linux下使用mdadm创建和管理软raid 注:本次操作以RHEL4为例,但应该可以应用到其它大部分的distro上(guess). mdadm的几个常用参数 -C 创建Raid,后面跟参数,代表 ...

  5. Linux自学笔记 | 10 常用命令 - 压缩解压类

    Linux自学笔记 | 10 常用命令 - 压缩解压类 Linux自学笔记 | 01 文件系统和目录结构 Linux自学笔记 | 02 VIM编辑器的安装与使用 Linux自学笔记 | 03 Linu ...

  6. linux 系统修复 启动盘,linux服务器系统盘坏且系统盘为软raid的修复方法

    1 需要换新盘的情况 1.1 一块盘grub损坏修复(可通过另一块盘进入系统的情况) 更换硬盘的方式,可以热插拔,也可以服务器断电后更换,但如果是热插拔,可能会导致盘符变更.坏了一块硬盘的情况下,软r ...

  7. linux trim raid,CentOS7下组建软Raid磁盘阵列并开启Trim|延长SSD寿命

    给自己24核24G内存的独服买了个120G的SSD作OS盘,然后两个1.5T的SSD组raid1作数据库盘,加上原有的3个2THDD组raid5作仓库盘.不多说了直接上干货: 先fdisk -l看看磁 ...

  8. Raid 原理及创建软raid

    传统磁盘的劣势: 影响计算机性能的组件一般包括:cpu,主板总线IO,内存IO,磁盘IO,网卡IO. 现代处理器的性能已经很高了,但是计算机整体IO性能较弱,严重影响了计算机的性能. 现代计算机总线, ...

  9. Linux自学笔记——haproxy

    HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠地一套解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...

最新文章

  1. Socket经验记录
  2. Delphi利用MSCOMM控件进行GPS数据采集
  3. Asp.Net Core中Session使用
  4. 浙大提出会打德扑的「自我博弈」AI,还会玩射击游戏
  5. 收集很实用的 Linux 高级命令
  6. Haproxy安装与配置
  7. How to check bad fix
  8. WPF TextBox 正则验证 大于等于0 小于等于1 的两位小数
  9. linux HZ 值_Linux的serial串口控制台
  10. proxmoxve打造云桌面_微软云电脑Cloud PC曝光:配置一般还不便宜
  11. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】
  12. {Azure} 常用链接
  13. 机器人吴非_Nature封面:8天做完688个实验,每天工作21.5小时,实验机器人展现超强战斗力...
  14. python格式化字符串漏洞_Python字符串格式化的方法(两种)
  15. 元宵节,程序员用 Python 送你一盏 3D 花灯
  16. Linux CentOS安装JDK
  17. Adobe CS5 序列号及配置方法
  18. 清华郝景芳:中国教育还欠缺什么?如何弥补当下教育的不足? (公号回复“郝景芳”下载PDF典藏版)
  19. 怪物的生成 攻击和掉落金币
  20. Unable to process Jar entry [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration

热门文章

  1. 三、单链表增删改查原理和代码实现
  2. 有效感受野--Understanding the Effective Receptive Field in Deep Convolutional Neural Networks
  3. LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法
  4. html text alt,HTML alt text for image maps
  5. c语言指针编程易错点,C语言中指针的一些易错点!
  6. 把ct图像像素值转化为_数字图像概论与基础
  7. MySQL慢查询日志分析(二)
  8. 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
  9. c语言图形方式初始化,c语言图形方式下的编程.doc
  10. c js html页面进度条,js实现进度条的方法