常用RAID級別原理和Linux中軟RAID實現方式

本文參考http://www.178linux.com/12262;並且自己實現一次。

RAID簡介

            RAID(Redundant Arrays of Independent Disks)獨立冗餘陣列。由一篇論文:A case for Redundent Arrays of Inexpensive Disks RAID

            作用:提高I/O能力、提高耐用性,讀寫,冗餘性

RAID分爲硬件RAID和軟件RAID

    硬件RAID通過RAID卡連接多個硬盤、或者主板中集成了RAID控制器來實現RAID的相關功能。

                外接式磁盤陣列:通過擴展卡提供適配能力

                內接式磁盤陣列:主板集成RAID控制器

    軟件RAID則通過軟件層面模擬實現RAID的相關功能。


級別:多塊磁盤陣列組織在一起的工作方式有所不同。

因此我們開始介紹常用的RAID級別:

RAID-0

         將多塊硬盤平行組織起來並行處理以提高性能。

          簡單來說就是將要處理的數據塊(chunk)分別在兩個硬盤上同時處理, Disk0處理A1,Disk1處理A2,從而實現提高硬盤性能,但是這樣的話硬盤性能雖然提高了但是可靠性大大降低,由於RAID-0的特性,只要有一塊硬盤損壞,這個磁盤陣列上的所有數據都可能會丟失,生產環境中一般不會使用。

         

RAID-0總結

    1、提高了磁盤讀、寫、IO性能,理論:硬盤原速度的*硬盤數

    2、無容錯能力

    3、最少使用2塊硬盤

    4、硬盤可用空間,爲所有硬盤中空間最小的硬盤空間乘以硬盤總數, 公式 N*min(Disk0..DiskN)

本文圖片轉自維基百科



RAID-1

           將多個硬盤相互做成鏡像,提高冗餘能力,讀取速度,但是寫性能略有下降;

           簡單的來說就是兩個(一般情況下RAID-1都是兩個硬盤組成)或多個硬盤做成鏡像,例如:給Disk0寫入數據的時候,Disk1也寫入數據,當Disk0損壞,Disk1的數據還保存着。這樣極大提高了冗餘能力,讀取時兩個硬盤也可以並行讀取來提高讀取性能,但是寫入速度略有下降。

RAID-1總結

    1、提高了讀性能,寫性能下降

    2、極大提高了容錯能力

    3、最少使用2塊硬盤

    4、硬盤可用空間,爲所有硬盤中空間最小硬盤的空間大小, 公式 1*min(Disk0..DiskN)

本文圖片轉自維基百科


RAID-4

         由3塊或3塊以上設備組成,並行處理提高磁盤性能,一個硬盤存儲冗餘校驗碼,通過異或運算還原數據.

         簡單來說就是三個或三個以上的硬盤組成一組設備可以實現當某一個硬盤損壞可以使其數據通過異或運算還原,通過讀寫並行處理提高性能,但是因爲冗餘校驗碼都是存放在單一硬盤上,所以此硬盤性能可能會很差,並且易損壞。

RAID-4總結:

    1、提高了讀寫、IO性能,但是存放校驗碼的硬盤性能差

    2、提高硬盤容錯能力,但是使用一塊硬盤存放校驗碼,要是此硬盤損壞後果可想而知

    3、最少使用3塊硬盤

    4、最大硬盤使用空間,爲所有硬盤中空間最小的硬盤的空間大小乘以硬盤數減去1, 公式(N-1)*min(Disk1..DiskN)

本文圖片轉自維基百科


RAID-5

     相比於RAID-4而言,冗餘校驗碼分別存放在每個硬盤中

     簡單的來說,RAID-5就是RAID-4的升級版,彌補了RAID-4的缺陷,將RAID-4中被詬病的缺點:“冗餘校驗碼存放在一個硬盤上”得以解決,RAID-5採用將冗餘校驗碼分別存放在每一個磁盤上來達到負載均衡的效果,而且極大的提高了整體性能,但是隻能提供一塊硬盤的冗餘.

    

RAID-5總結

    1、提高了讀寫、IO性能

    2、提高了容錯能力,相比於RAID-4而言提高整體穩定性

    3、最少使用3塊硬盤

    4、最大硬盤使用空間,爲所有硬盤中空間最小的硬盤的空間大小乘以硬盤數減去1, 公式(N-1)*min(Disk1..DiskN)

本文圖片轉自維基百科


RAID-10/01

         簡單的來說,RAID-10/01是兩種混合型RAID,RAID-10先將所有硬盤分成N組組成RAID-1提高冗餘性,然後將其按組組成RAID-0提高硬盤性能,最多可支持半數硬盤損壞而不丟失數據。RAID-01先將所有硬盤分成N組組成RAID0提高性能,然後將其按組組成RAID-1提高冗餘性,運氣不好兩塊硬盤損壞就可能導致全部硬盤數據丟失。

RAID-10總結

    1、提高了讀寫、IO性能

    2、提高了容錯能力,最多支持半數硬盤損壞

    3、最少使用4塊硬盤

    4、最大硬盤使用空間,爲所有硬盤中空間最小的硬盤的空間大小乘以2, 公式(N*min(Disk0..Disk1))/2

RAID-01總結

    1、提高了讀寫、IO性能

    2、提高了容錯能力,但是效果不是很好,因爲先使用不可靠的RAID-0再使用可靠的RAID1,就好像建房子地基偷工減料,而頂層卻建的很結實

    3、最少使用4塊硬盤

    4、最大硬盤使用空間,爲所有硬盤中空間最小的硬盤的空間大小乘以2, 公式(N*min(Disk0..Disk1))/2

本文圖片轉自維基百科本文圖片轉自維基百科

實戰:在CentOS中使用mdadm建立軟RAID

mdadm介紹:

         Linux中可以通過md模塊來實現軟RAID,我們在用戶空間用mdadm來管理創建軟RAID設備。

mdadm:

命令的語法格式:mdadm [mode] <raiddevice> [options] <component-device>
支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5,RAID6,RAID10
模式:
創建模式:-C
裝配模式:-A<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
監控模式:-F
管理模式:-f, -r, -a
<raiddevice>:/dev/md#
<component-devices>:任意塊設備
-C:創建模式
-n #:使用#個塊設備來創建此RAID
-l #:指明要創建的RAID的級別
-a {yes|no}:是否自動創建目標RAID設備的設備文件
-c CHUNK_SIZE:指明塊大小
-x #:指明空閒盤的個數
-D:查看raid的詳細信息
mdadm -D /dev/md#
管理模式
-f:當作錯誤的磁盤來對待
-r:移除
-a:添加磁盤</span>

系統環境:

分區信息
[root@server2 ~]# <span style="color:#FF0000;">fdisk -l</span>
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002777c
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      208813+  83  Linux
/dev/sda2              27        1985    15735667+  83  Linux
/dev/sda3            1986        2247     2104515   82  Linux swap / Solaris
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdee177d5
   Device Boot      Start         End      Blocks   Id  System
實現目標:創建一個可用空間爲8G的RAID1設備, 要求其chunk大小爲128K, 文件系統爲ext4, 開機可自動掛載至/backup目錄
1.創建相應分區


[root@server2 ~]# <span style="color:#FF0000;">fdisk /dev/sdb</span>
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)
p                         #定義爲擴展分區
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): +8G  # 大小8G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1046-2610, default 1046): 
Using default value 1046
Last cylinder, +cylinders or +size{K,M,G} (1046-2610, default 2610): +8G
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd  #創建軟RAID必須要將FileSystem ID調整爲fd,
                                       否則在使用過程中可能會出錯,如果不知道先<span style="color:#FF0000;">l</span>
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): t    #將<span style="color:#FF0000;">FileSystem ID</span>調整爲fd
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): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
2.通告內核重讀分區表
[root@server2 ~]# <span style="color:#FF0000;">partx -a /dev/sdb</span>   #執行兩次
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2

3.使用mdadm命令創建RAID1

[root@server2 ~]# <span style="color:#FF0000;">mdadm -C /dev/md0 -a yes -c 128 -n 2 -l 1 /dev/sdb{1,2}</span> #這裏用分區創建RAID,不推薦,爲了實驗效果,請見諒
mdadm: /dev/sdb1 appears to contain an ext2fs file system
       size=10490412K  mtime=Mon Jan  4 13:26:31 2016
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.90
Continue creating array?<span style="color:#FF0000;"> y</span>
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

4.查看創建的RAID設備

[root@server2 ~]# <span style="color:#FF0000;">mdadm -D /dev/md0</span>
/dev/md0:
        Version : 1.2
  Creation Time : Mon Jan  4 13:28:54 2016
     Raid Level : raid1
     Array Size : 8385728 (8.00 GiB 8.59 GB)
  Used Dev Size : 8385728 (8.00 GiB 8.59 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Mon Jan  4 13:29:36 2016
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : server2.example.com:0  (local to host server2.example.com)
           UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3
         Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2

5.格式化RAID設備

<code class="bash plain">[root@server2 ~]</code><code class="bash comments">#</code><span style="color:#FF0000;">mke2fs -t ext4 /dev/md0</span>
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096432 blocks
104821 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done                            
Creating journal (32768 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.

6.設置RAID設備開機自動掛載

[root@server2 ~]#<span style="color:#FF0000;"> blkid /dev/md0    #建議使用UUID方式掛載</span>
/dev/md0: UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" TYPE="ext4" 
[root@server2 ~]# <span style="color:#FF0000;">vim /etc/fstab </span>
#
# /etc/fstab
# Created by anaconda on Sat Jan  2 05:05:04 2016
#
# 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
#
UUID=3f5cfd75-ff54-4784-9aa3-47cbc77eed5a /                       ext4    defaults        1 1
UUID=0f99960c-0db8-44a9-81b6-f1adfcb0fc6c /boot                   ext4    defaults        1 2
UUID=bbcb90b4-d4a4-4a72-b66c-061afc7ce4e6 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
<span style="color:#FF0000;">UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" /backup ext4 defaults 0 0</span>

7.驗證是否能夠掛載


[root@server2 ~]# <span style="color:#FF0000;">mkdir /backup</span>
[root@server2 ~]#<span style="color:#FF0000;"> mount -a</span>
[root@server2 ~]# <span style="color:#FF0000;">df</span>
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       15357672 3527392  11043500  25% /
tmpfs             502384       0    502384   0% /dev/shm
/dev/sda1         198123   36589    151094  20% /boot
<span style="color:#FF0000;">/dev/md0         8123000   18420   7685296   1% /backup</span>

8.測試RAID1的效果

[root@server2 ~]# <span style="color:#FF0000;">cd /backup/</span>
[root@server2 backup]# ls
lost+found
[root@server2 backup]# <span style="color:#FF0000;">touch RAID-1-TEST   </span> #在RAID設備中創建文件
[root@server2 backup]# <span style="color:#FF0000;">ls</span>
lost+found  RAID-1-TEST
[root@server2 backup]# <span style="color:#FF0000;">cd /</span>
[root@server2 /]# <span style="color:#FF0000;">mdadm -f /dev/md0 /dev/sdb1</span>    #模擬sdb1損壞
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@server2 /]# <span style="color:#FF0000;">mdadm -D /dev/md0</span>    #查看md0信息
/dev/md0:
        Version : 1.2
  Creation Time : Mon Jan  4 13:28:54 2016
     Raid Level : raid1
     Array Size : 8385728 (8.00 GiB 8.59 GB)
  Used Dev Size : 8385728 (8.00 GiB 8.59 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Mon Jan  4 13:36:04 2016
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
           Name : server2.example.com:0  (local to host server2.example.com)
           UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3
         Events : 44
    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       18        1      active sync   /dev/sdb2
       2       8       17        -      faulty   /dev/sdb1        #提示報錯
[root@server2 /]# <span style="color:#FF0000;">cd /backup/</span>
[root@server2 backup]# <span style="color:#FF0000;">ls </span>   #發現數據並未丟失
lost+found  <span style="color:#FF0000;">RAID-1-TEST</span>
總結:RAID的確可以提高生產環境中磁盤的性能和可靠性,但是不推薦使用軟RAID的方式來實現,數據無價!

最後總結一個表格,方便大家記憶

RAID級別

組織方式

優點

缺點

可用空間

0

將要處理的數據塊(chunk)分別在兩個硬盤上同時處理

提高了磁盤讀、寫、IO性能,理論:硬盤原速度的*硬盤數

只要有一塊硬盤損壞,這個磁盤陣列上的所有數據都可能會丟失

N*min(Disk0..DiskN)

最少使用2塊硬盤

1

將多個硬盤相互做成鏡像

提高冗餘能力,讀取速度

寫性能略有下降

1*min(Disk0..DiskN)

最少使用2塊硬盤

4

由3塊或3塊以上設備組成,並行處理提高磁盤性能,一個硬盤存儲冗餘校驗碼,通過異或運算還原數據.

提高了讀寫、IO性能,提高硬盤容錯能力

使用一塊硬盤存放校驗碼,要是此硬盤損壞後果可想而知

(N-1)*min(Disk1..DiskN)

最少使用3塊硬盤

5

相比於RAID-4而言,冗餘校驗碼分別存放在每個硬盤中

提高了讀寫、IO性能,提高了容錯能力,相比於RAID-4而言提高整體穩定性

 

(N-1)*min(Disk1..DiskN)

最少使用3塊硬盤

10

RAID-10先將所有硬盤分成N組組成RAID-1提高冗餘性,然後將其按組組成RAID-0提高硬盤性能,最多可支持半數硬盤損壞而不丟失數據。

提高了讀寫、IO性能,提高了容錯能力,最多支持半數硬盤損壞

 

 

(N*min(Disk0..Disk1))/2

最少使用4塊硬盤

01

RAID-01先將所有硬盤分成N組組成RAID0提高性能,然後將其按組組成RAID-1提高冗餘性

提高了讀寫、IO性能提高了容錯能力

 

先使用不可靠的RAID-0使用可靠的RAID1

(N*min(Disk0..Disk1))/2

最少使用4塊硬盤

 









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章