首頁 > 軟體

Linux軟RAID基本操作介紹

2020-06-16 17:37:59

    RAID全稱是 “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,稱為“廉價磁碟冗餘陣列”,由加州大學伯克利大學在1987年發表的論文中而來。RAID的主要思想就是把若干小容量物理磁碟組成一個大容量虛擬儲存裝置,以提高磁碟儲存的讀、寫效率,並提供冗餘以提高資料儲存的安全性。

    根據應用方向的不同,RAID也分為不同級別,常用的有RAID-0、RAID-1、RAID-5、RAID-10。
    RAID-0也稱為條帶模式(striping),即把連續的資料分散到多個磁碟上存取,最少需要磁碟數大於等於2。當系統有資料請求就可以被多個磁碟並行的執行,每個磁碟執行屬於它自己的那部分資料請求。這種資料上的並行操作可以充分利用匯流排的頻寬,顯著提高磁碟整體存取效能。因為讀取和寫入是在裝置上並行完成的,讀取和寫入效能將會增加,這也通常是使用RAID-0的主要原因。但RAID-0沒有資料冗餘,如果驅動器出現故障,那麼將無法恢復任何資料,所以一般主要用在對裝置讀取要求高,但對資料安全性不做要求的業務中。

      RAID-1又稱為映象(Mirroring),RAID-1要求至少有2的整數倍塊硬碟,並使用0塊或更多的備用磁碟。每次寫資料時會同時寫入映象盤。這種陣列可靠性很高,但其有效容量減小到總容量的一半,同時這些磁碟的大小應該相等,否則總容量只具有最小磁碟的大小。這種方法完整備份了資料,對資料的寫入速度稍有降低,而且磁碟的利用率只有二分之一。但其優點是對資料的容錯很好,對資料的讀取有較大的提高。


      RAID-5具有和RAID-0相近似的資料讀取速度,同時磁碟空間利用率也要比RAID1高。屬於是RAID-0和RAID-1的折中方案,是一種儲存效能、資料安全和儲存成本兼顧的儲存解決方案。由於儲存成本相對較低,是目前運用較多的一種解決方案。
      RAID-5陣列中資料的分布與RAID-0類似,資料也是分布到每塊硬碟上,但Raid-5沒有獨立的奇偶校驗盤,他通過將校驗的資料迴圈儲存並分散放在所有磁碟上,其中任意N-1塊磁碟上都儲存完整的資料,也就是說有相當於一塊磁碟容量的空間用於儲存奇偶校驗資訊。因此當RAID5能夠支援在一塊盤離線的情況下保證資料的正常存取,不會影響資料的完整性,從而保證了資料安全。當損壞的磁碟被替換後,RAID還會自動利用剩下奇偶校驗資訊去重建此磁碟上的資料,來保持RAID5的高可靠性。
      RAID-5的組建,至少需要三塊或更多的磁碟,並可以使用0塊或更多的備用磁碟,其資料安全保障程度要比RAID1低,寫入資料的速度比對單個磁碟進行寫入速度稍慢。如果有兩塊或兩塊以上硬碟同時離線,或者RAID資訊出錯等原因,陣列便會失效,這時就需要對資料進行重組。並且做raid 5陣列所有磁碟容量必須一樣大,當容量不同時,會以最小的容量為準。 同時,最好硬碟轉速一樣,否則會影響效能。

      RAID 1+0也被稱為RAID-10標準,實際是將RAID-0和RAID-1標準結合的產物,是先對磁碟先進行RAID-1,然後RAID-0,這種方法即提供了冗餘,而且也提升了速度。
      在連續地以位或位元組為單位分割資料並且並行讀/寫多個磁碟的同時,為每一塊磁碟作磁碟映象進行冗餘。它的優點是同時擁有RAID-0的超凡速度和RAID-1的資料高可靠性,但是CPU占用率同樣也更高,而且磁碟的利用率比較低。由於利用了RAID-0極高的讀寫效率和RAID-1較高的資料保護、恢復能力,使RAID-10成為了一種價效比較高的等級,目前幾乎所有的RAID控制卡都支援這一等級。


      但是,RAID-10對儲存容量的利用率和RAID-1一樣低,只有50%。因此,RAID10即高可靠性與高效磁碟結構它是一個帶區結構加一個鏡象結構,可以達到既高效又高速的目的,RAID 10能提供比RAID 5更好的效能,使用此方案比較昂貴。


      由於RAID的使用性很高,而對硬碟的使用核心需要識別,在最新的核心中已經預設載入了對常見RAID卡的驅動。RAID裝置在linux系統中會被識別成/dev/md[N] N是數位。使用mdadm命令能夠對RAID裝置設定。
  目前 RAID技術大致分為兩種:基於硬體的RAID技術和基於軟體的RAID技術。其中在Linux下通過自帶的軟體就能實現RAID功能,由於是用軟體去實現的RAID功能,所以它設定靈活、管理方便。同時使用軟體RAID,還可以實現將幾個物理磁碟合併成一個更大的虛擬裝置,從而達到效能改進和資料冗餘的目的。
      Linux軟RAID是在linux作業系統層面進行的軟體RAID設定,雖然也能對資料進行保護,但是在實際生產環境中,還是建議使用儲存中磁碟陣列和硬RAID實現磁碟儲存冗餘。基於硬體的RAID解決方案比基於軟體RAID技術在使用效能和服務效能方面不僅更勝一籌,而且在檢測和修復多位錯誤的能力、錯誤磁碟自動檢測和陣列重建等方面更有安全保障。

基本操作命令總結:
建立模式:
    -C:建立md0
    -n#:指明建立raid所需要的磁碟個數

    -#:指明 建立raid的級別

    -c:指明建立的塊大小

    -x:指明冗餘(空閒)磁碟的個數
    -a{yes|no}:自動建立目標raid裝置的裝置檔案

管理模式:
    -f:標記模擬指定磁碟為損壞

    -a:向raid裡面新增磁碟

    -r:移除磁碟

    -S:停止陣列
    -A -s:啟用陣列

    -D -s:生成組態檔(mdadm -D -s >> /etc/mdadm.conf)
    mdadm -zero-superblock /dev/sdb1(刪除raid資訊)

監控模式:
    -F:(一般不怎麼常用)

裝配模式:
    軟raid是基於系統的,當我們原系統損壞了,那麼我們此時就需要重新裝配raid
    -A (例如:mdadm -A /dev/md1 /dev/sdb5 /dev/sdb6)
曾長模式:

    用於增加磁碟,為陣列實現擴容

    -G (例如:[root@localhost ~]# mdadm -G /dev/md2  -n 4)

檢視:
  mdadm -D /dev/md#(顯示raid陣列詳細資訊)
    cat /proc/mdstat(檢視raid的狀態)

--------------------------------------------------------------------------------
下面我們就來具體操作試試吧!!

一、新增了4塊磁碟,我們來檢視下是否存在:

[root@linuxidc.com ~]# fdisk -l
 
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000271fa
 
  Device Boot      Start        End      Blocks  Id  System
/dev/sda1  *        2048      976895      487424  83  Linux
/dev/sda2          976896  196288511    97655808  83  Linux
/dev/sda3      196288512  200194047    1952768  82  Linux swap / Solaris
/dev/sda4      200194048  251658239    25732096    5  Extended
/dev/sda5      200196096  239257599    19530752  83  Linux
 
Disk /dev/sdd: 128.8 GB, 128849018880 bytes, 251658240 sectors(第四塊空磁碟)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sdc: 128.8 GB, 128849018880 bytes, 251658240 sectors(第三塊空磁碟)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors(第二塊空磁碟)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/sde: 128.8 GB, 128849018880 bytes, 251658240 sectors(第五塊空磁碟)
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

二、將新增的幾塊空閒磁碟建立成raid陣列
[root@linuxidc.com ~]# mdadm -C /dev/md0 -n3 -l5 -x1 /dev/sd{b,c,d,e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

三、檢視下我們建立好的raid陣列的狀態
[root@linuxidc.com ~]# cat /proc/mdstat ##顯示陣列的狀態
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[4] sde[3](S) sdc[1] sdb[0]
      251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      bitmap: 0/1 pages [0KB], 65536KB chunk##此處我們可以看到陣列已經同步完成了! 
     
[root@linuxidc.com ~]# mdadm -D /dev/md0 ###顯示下我們陣列的詳細資訊
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5  ##raid級別
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 10:27:34 2016
          State : clean  ##狀態正常
 Active Devices : 3  ##活動裝置的磁碟塊數量
Working Devices : 4  ##總共工作裝置的磁碟數量
 Failed Devices : 0  ##沒出現??壞的磁碟
  Spare Devices : 1  ##備份的磁碟數量
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : linuxidc.com:0  (local to host linuxidc.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 127
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      4      8      48        2      active sync  /dev/sdd
 
      3      8      64        -      spare  /dev/sde ##此硬碟處於空閒狀態

 

四、將磁碟格式化
[root@linuxidc.com ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
15720448 inodes, 62881792 blocks
3144089 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2210398208
1919 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, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872
 
Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  ##格式成功!

五、掛載裝置然後我們使用看看是否正常
[root@linuxidc.com ~]# mkdir /md0dir 
[root@linuxidc.com ~]# mount /dev/md0 /md0dir/
[root@linuxidc.com ~]# mount 
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700)
/dev/md0 on /md0dir type ext4 (rw,relatime,seclabel,stripe=256,data=ordered)##臨時掛載成功
 
[root@linuxidc.com ~]# vim /etc/fstab ##設定開機自動掛載裝置
# /etc/fstab
# Created by anaconda on Wed May 11 18:44:18 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=267aae0a-088b-453f-a470-fec8fcdf772f /                      xfs    defaults        0 0
UUID=d8d9403c-8fa1-4679-be9b-8e236d3ae57b /boot                  xfs    defaults        0 0
UUID=7f62d6d9-9eda-4871-b2d7-2cbd2bc4cc89 /testdir                xfs    defaults        0 0
UUID=abba10f4-18b3-4bc3-8cca-22ad619fadef swap                    swap    defaults        0 0
/dev/md0                                /md0dir                  ext4    defaults      0 0
~   
[root@linuxidc.com ~]# mount -a  ##使fsta檔案中沒掛載的都掛上來                                                                                   
[root@linuxidc.com ~]# cd /md0dir/  ##進入掛載目錄中建立檔案測試正常!
[root@linuxidc.com md0dir]# ls
lost+found
[root@linuxidc.com md0dir]# touch 1.txt 
[root@linuxidc.com md0dir]# ls
1.txt  lost+found
[root@linuxidc.com md0dir]#

六、現在我們來模擬下磁碟出現故障,然後看看raid會有什麼變化
[root@linuxidc.com md0dir]# mdadm /dev/md0 -f /dev/sdd ##標記/dev/sdd為損壞
mdadm: set /dev/sdd faulty in /dev/md0
 
[root@linuxidc.com md0dir]# mdadm -D /dev/md0 ##顯示下raid的資訊看看
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 11:55:39 2016
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1  ####此處的狀態也跟前的不一樣了,標記了損壞的塊數
  Spare Devices : 1
 
        Layout : left-symmetric
    Chunk Size : 512K
 
 Rebuild Status : 0% complete
 
          Name : linuxidc.com:0  (local to host linuxidc.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 129
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      spare rebuilding  /dev/sde
                                                          ##此時/dev/sdd開始rebuild資料
 
      4      8      48        -      faulty  /dev/sdd##/dev/sdd損壞了
 
 
 
[root@linuxidc.com md0dir]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[4](F) sde[3] sdc[1] sdb[0]
      251527168 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [>....................]  recovery =  2.2% (2847492/125763584) finish=10.0min speed=203392K/sec  ##開始同步資料了!
      bitmap: 0/1 pages [0KB], 65536KB chunk
 
unused devices: <none>
 
 
[root@linuxidc.com md0dir]# cd 
[root@linuxidc.com ~]# cd /md0dir/
[root@linuxidc.com md0dir]# ls
1.txt  lost+found
[root@linuxidc.com md0dir]# touch 2.txt 
[root@linuxidc.com md0dir]# ls
1.txt  2.txt  lost+found ###看來一切正常,嘻嘻。

七、接下了我們把剛剛損壞的磁碟給移除掉

[root@linuxidc.com md0dir]# mdadm /dev/md0 -r /dev/sdd 
mdadm: hot removed /dev/sdd from /dev/md0
 
[root@linuxidc.com md0dir]# mdadm -D /dev/md0 
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 12:07:12 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : linuxidc.com:0  (local to host linuxidc.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 265
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      active sync  /dev/sde
                                ##此時我們就只有三塊盤在raid陣列中了

八、如果在壞一塊盤那我們資料將會有損壞,所有我們在新增一塊盤來做備份
[root@linuxidc.com md0dir]# mdadm /dev/md0 -a /dev/sdd ##由於我磁碟不夠了所有就把移走那塊新增了
mdadm: re-added /dev/sdd   
 
[root@linuxidc.com md0dir]# mdadm -D /dev/md0 
/dev/md0:
        Version : 1.2
  Creation Time : Sat Jun  4 10:17:02 2016
    Raid Level : raid5
    Array Size : 251527168 (239.88 GiB 257.56 GB)
  Used Dev Size : 125763584 (119.94 GiB 128.78 GB)
  Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
 
  Intent Bitmap : Internal
 
    Update Time : Sat Jun  4 12:11:54 2016
          State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
 
        Layout : left-symmetric
    Chunk Size : 512K
 
          Name : linuxidc.com:0  (local to host linuxidc.com)
          UUID : 0ad970f7:f655d497:bbeeb6ad:aca1241d
        Events : 266
 
    Number  Major  Minor  RaidDevice State
      0      8      16        0      active sync  /dev/sdb
      1      8      32        1      active sync  /dev/sdc
      3      8      64        2      active sync  /dev/sde
      4      8      48        -      spare  /dev/sdd##ok我們又有備份盤了
       
       
接下我們就把raid給停止服務吧,,由於我之前掛載了,所有我們先解除安裝然後在停止服務。
[root@linuxidc.com ~]# umount /md0dir/
[root@linuxidc.com ~]# mdadm -S /dev/md0 
mdadm: stopped /dev/md0

如何在Linux上構建 RAID 10陣列  http://www.linuxidc.com/Linux/2014-12/110318.htm

Debian軟RAID安裝筆記 - 使用mdadm安裝RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm

常用RAID技術介紹以及範例演示(多圖) http://www.linuxidc.com/Linux/2013-03/81481.htm

Linux實現最常用的磁碟陣列-- RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm

RAID0+1和RAID5的效能測試結果 http://www.linuxidc.com/Linux/2012-07/65567.htm

Linux入門教學:磁碟陣列(RAID) http://www.linuxidc.com/Linux/2014-07/104444.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-07/133333.htm


IT145.com E-mail:sddin#qq.com