常見RAID級別原理, Linux中軟RAID實現方式詳解

RAID簡介

    RAID(Redundant Arry of Independent Disks)獨立冗余陣列,舊稱(Redundant Arry of Inexpensive Disks)廉價冗余陣列,其主要目的是將多個硬盤組成在一起來達到提高I/O、讀寫、冗余性。

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)

File:RAID 0.svg本文圖片轉自維基百科

RAID-1

    將多個硬盤相互做成鏡像,提高冗余能力,讀取速度

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

RAID-1總結

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

    2、極大提高了容錯能力

    3、最少使用2塊硬盤

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

File:RAID 1.svg本文圖片轉自維基百科

RAID-4

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

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

RAID-4總結:

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

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

    3、最少使用3塊硬盤

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

File:RAID 4.svg本文圖片轉自維基百科

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)

File:RAID 5.svg本文圖片轉自維基百科

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

File:RAID 10.svg本文圖片轉自維基百科

File:RAID 01.svg本文圖片轉自維基百科

實戰:在CentOS 6.7中使用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
監控模式:-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:添加磁盤

系統環境:

分區信息
[root@server2 ~]# fdisk -l
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目錄

創建相應分區,關于此操作如果有疑問可以查看我的相關博文

[root@server2 ~]# fdisk /dev/sdb
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
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,否則在使用過程中可能會出錯
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): t
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.

通告內核重讀分區表

[root@server2 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2

使用mdadm命令創建RAID1

[root@server2 ~]# mdadm -C /dev/md0 -a yes -c 128 -n 2 -l 1 /dev/sdb{1,2}        #這里用分區創建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? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看創建的RAID設備

[root@server2 ~]# mdadm -D /dev/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: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

格式化RAID設備

[root@server2 ~]# mke2fs -t ext4 /dev/md0
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.

設置RAID設備開機自動掛載

[root@server2 ~]# blkid /dev/md0    #建議使用UUID方式掛載
/dev/md0: UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" TYPE="ext4" 
[root@server2 ~]# vim /etc/fstab 
#
# /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
UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" /backup ext4 defaults 0 0

驗證是否能夠掛載

[root@server2 ~]# mount -a
[root@server2 ~]# df
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
/dev/md0         8123000   18420   7685296   1% /backup

測試RAID1效果

[root@server2 ~]# cd /backup/
[root@server2 backup]# ls
lost+found
[root@server2 backup]# touch RAID-1-TEST    #在RAID設備中創建文件
[root@server2 backup]# ls
lost+found  RAID-1-TEST
[root@server2 backup]# cd /
[root@server2 /]# mdadm -f /dev/md0 /dev/sdb1    #模擬sdb1損壞
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@server2 /]# mdadm -D /dev/md0    #查看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 /]# cd /backup/
[root@server2 backup]# ls    #發現數據并未丟失
lost+found  RAID-1-TEST

總結:RAID的確可以提高生產環境中磁盤的性能和可靠性,但是不推薦使用軟RAID的方式來實現,數據無價!

原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/12262

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-09
下一篇 2016-03-09

相關推薦

  • 文件的查找與壓縮歸檔

    文件的查找與壓縮歸檔 locate find 壓縮與歸檔 locate 主要用途 查詢系統上預建的文件索引數據庫 locate – find files by namelocate [OPTION]… PATTERN… locate查詢文件時,會去搜索/var/lib/mlocat…

    Linux干貨 2016-08-21
  • 一起學DNS系列(十五)DNS查詢工具之NSLOOKUP的使用

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/259092    上一節里我們討論了有關DIG工具的用法,本節將對windows下nslookup工具的一些主要命令進行描述。  …

    2015-03-17
  • Linux運維學習歷程-第十天-文件查找工具

    概述:本篇主要講解locate命令和find命令,來幫助我們在linux中完成文件查找,方便我們快速定位文件。 一、文件查找    即在文件系統上查找符合條件的文件,常用工具有locate和find  1、locate命令    locate命令其實是find -name的另一種寫法,但是要比后者快得多,原因…

    Linux干貨 2016-08-21
  • bash的基礎特性

    1、Bash的命令補全      使用tab鍵可以實現命令補全或者路徑補全 2、Bash的命令行展開      使用~,可以展開為用戶的家目錄;             例如#cd ~ 表示切換目錄到當前用戶家目錄中   &nbs…

    Linux干貨 2016-11-02
  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost /]# who | cut -d ‘ ‘ -f 1  | sort -u root user1 或: [root@localhost /]# who | cut -d ‘ ‘ -…

    Linux干貨 2017-02-24
  • 推薦-LVM

    LVM LVM Linux應用 1.LVM簡介 LVM:Logical Volume Manager,邏輯卷管理器。LVM利用Linux內核的device-mapper模塊來實現存儲系統的虛擬化(系統分區獨立于底層硬件)。通過LVM,你可以實現存儲空間的抽象化并在上面建立虛擬分區(virtual partitions),可以更簡便地擴大和縮小分區,可以增刪分…

    2016-04-11
欧美性久久久久