mdadm詳解

 Part I.  RAID基礎(引用)

RAID 是冗餘磁盤陣列(Redundant Array of Inexpensive Disk)的簡稱。它是把多個磁盤組成一個陣列,當作單一磁盤使用。它將數據以分段(striping)的方式分散存儲在不同的磁盤中,通過多個磁盤的同 時讀寫,來減少數據的存取時間,並且可以利用不同的技術實現數據的冗餘,即使有一個磁盤損壞,也可以從其他的磁盤中恢復所有的數據。簡單地說,其好處就 是:安全性高、速度快、數據容量大。 
磁盤陣列根據其使用的技術不同而劃分了等級,稱爲RAID level,目前公認的標準是RAID 0~RAID 5。其中的level並不代表技術的高低,RAID 5並不高於RAID 4 ,RAID 0並不低於RAID 2 ,至於選擇哪一種RAID需視用戶的需求而定。下面分別對常用的RAID 0、RAID 1、RAID 5進行簡單的介紹。 
 
1.RAID 0 
特點:它是將多個磁盤並列起來,成爲一個大硬盤。在存取數據時,將數據按磁盤的個數來進行分段,然後同時將這些數據寫進這些盤中。在所有的級別中,RAID 0的速度是最快的。但沒有數據冗餘,陣列中任何一個磁盤壞掉,意味着所有數據丟失。 
  
磁盤利用數:n(假設有n個磁盤)。 
配置條件:最低兩塊磁盤,且分區大小盡量相同。 
應用領域:對高磁盤容量及高速磁盤存取有特殊需求,而又不計較其高故障率的工作。當然,如果你正在使用集羣,RAID 0 無疑是提高磁盤I/O性能的最好方法,因爲在這種情況下,你就不用擔心冗餘的問題了。 
 
2.RAID 1 
特 點:使用磁盤鏡像(disk mirroring)的技術,在一個磁盤上存放數據的同時也在另一個磁盤上寫一樣的數據。因爲有了備份磁盤,所以RAID 1的數據安全性在所有的RAID級別上來說是最好的。儘管其寫入數據的速度比較慢,但因其數據是以分段的方式作儲存,因而在讀取時,它幾乎和RAID 0有同樣的性能。 
 
磁盤利用數:n/2。 
配置條件:最低兩塊磁盤,且分區大小盡量相同。 
應用領域:數據庫、金融系統等一些對數據有着高可靠性要求的領域。再者就是系統中寫數據量比較少,而讀數據量又比較多的情況下可以採用這一模式。 
 
3.RAID 5 
特點:以數據的校驗位來保證數據的安全,但它不是以單獨硬盤來存放數據的校驗位,而是將數據段的校驗位交互存放於各個磁盤上。這樣,任何一個磁盤損壞,都可以根據其他磁盤上的校驗位來重建損壞的數據。並行讀寫數據,性能也很高。 
 
 
磁盤利用數:n-1。 
配置條件:最低三塊硬盤,且分區大小盡量相同。 
應用領域:適合於事務處理環境,例如民航售票處、銷售系統等。
 
 
 
 
Part II. mdadm創建RAID5
 
RAID級別:5
設備列表:
Host:/dev/sda
RAID Devices:/dev/sdb /dev/sdc /dev/sdd
Spare Devices:/dev/sde
設備準備:
直接使用硬盤硬件設備,不需要分區。
如果要具體使用哪個硬盤的分區做RAID,才需要fdisk特定的分區,並給它指定分區類型:fd。
 
 
1>創建raid:
mdadm的每個命令都有其簡寫形式,當然也可以使用shell的正規表達式:
#mdadm --create --verbose /dev/md0 --level=raid5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd --spare-devices=1 /dev/sde
#mdadm -Cv /dev/md0 -l5 -n3 /dev/sdb /dev/sdc /dev/sdd -x1 /dev/sde
#mdadm -Cv /dev/md0 0l5 -n3 /dev/sd[bcd] -x1 /dev/sde
 
 
2>格式化raid設備:
#mkfs -t ext3 /dev/md0
 
 
3>掛載raid設備:
#mkdir /mnt/raid
#mount -t ext3 /dev/md0 /mnt/raid
 
 
4>查看raid設備狀態:
#mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Nov 13 10:35:35 2007
     Raid Level : raid5
     Array Size : 2097024 (2048.22 MiB 2147.35 MB)
    Device Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
 
    Update Time : Tue Nov 13 10:42:34 2007
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 64K
 
           UUID : b5e3276f:ab97e843:e601b1a4:46720384
         Events : 0.2
 
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
 
       3       8       64        -      spare   /dev/sde
 
#cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd[2] sde[3](S) sdc[1] sdb[0]
      2097024 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>
說明:
sdd[2]:此設備在RAID中的次序。
[3/3]:RAID使用3個設備,當前有3個設備正常運行。當某一個設備出錯時將會顯示[3/2]。
[UUU]:RAID中所有磁盤運轉正常。如果出錯則顯示[_UU],則說明RAID中第一磁盤fail。
 
# mdadm -E /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : b5e3276f:ab97e843:e601b1a4:46720384
  Creation Time : Tue Nov 13 10:35:35 2007
     Raid Level : raid5
    Device Size : 1048512 (1024.11 MiB 1073.68 MB)
     Array Size : 2097024 (2048.22 MiB 2147.35 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
 
    Update Time : Tue Nov 13 10:54:58 2007
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
       Checksum : c59d3483 - correct
         Events : 0.2
 
         Layout : left-symmetric
     Chunk Size : 64K
 
      Number   Major   Minor   RaidDevice State
this     0       8       16        0      active sync   /dev/sdb
 
   0     0       8       16        0      active sync   /dev/sdb
   1     1       8       32        1      active sync   /dev/sdc
   2     2       8       48        2      active sync   /dev/sdd
   3     3       8       64        3      spare   /dev/sde
 
 
 
5>mdadm配置文件:
mdadm的缺省配置文件爲/etc/mdadm.conf。對於陣列而言不是必須的,主要是爲了方便陣列的日常管理。
使用配置文件後,我們每次啓動RAID時,就不需要再次輸入建立RAID時的一大堆的參數。
mdadm.conf文件中要包含兩行:
第一行是以DEVICE開頭的行,它指明在陣列中的設備列表。
第二行是以ARRAY開頭的行,它詳細地說明了陣列的名稱、模式、陣列中活動設備的數目以及設備的UUID號。
一般會有如下格式: 
#cat /etc/mdadm.conf
===========================================================
DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde
ARRAY /dev/md0 level=raid5 num-devices=3 spares=1 UUID=b5e3276f:ab97e843:e601b1a4:46720384
============================================================
 
生成方法:
#echo 'DEVICE /dev/sd[bcde]' > /etc/mdadm.conf
#mdadm -Ds >> /etc/mdadm.conf
#echo 'DEVICE /dev/sdb /dev/sdc /dev/sdd /dev/sde' > /etc/mdadm.conf
#mdadm -Ds >> /etc/mdadm.conf
 
 
 
6>配置mdadm開機自啓動:
使用配置文件後,RAID設備在重啓後也可以正常的自動加載,因爲系統在開機啓動時會自動加載RAID。
#cat /etc/rc.d/rc.sysinit
=============================================================================
# RAID setup
update_boot_stage RCraid
[ -x /sbin/nash ] && echo "raidautorun /dev/md0" | nash --quiet
if [ -f /etc/mdadm.conf ]; then
    /sbin/mdadm -A -s
fi
=============================================================================
設備配置文件只能使系統在開機時正常啓用RAID設備,但自動掛載RAID設備還是要再修改/etc/fstab
#vi /etc/fstab
===============================================
/dev/md0 /mnt/raid ext3 defaults 0 0
===============================================
 
 
 
7>停止與開啓RAID設備:
停止:
#umount /mnt/raid
#mdadm -S /dev/md0
mdadm: stopped /dev/md0
開啓:
使用配置文件時:
#mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
沒有使用配置文件時:
#mdadm -A /dev/md0 /dev/sd[bcde]
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
 
 
8>故障演示
(1)將一個磁盤標記爲faulty,模擬硬盤壞損
#mdadm /dev/md0 -f /dev/sdb
(2)查看RAID5重建過程
#mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Nov 13 11:55:59 2007
     Raid Level : raid5
     Array Size : 2097024 (2048.22 MiB 2147.35 MB)
    Device Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
 
    Update Time : Tue Nov 13 18:21:27 2007
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 64K
 
 Rebuild Status : 48% complete
 
           UUID : faee3020:14fc3e48:9717e6f5:d7cf7de7
         Events : 0.6
 
    Number   Major   Minor   RaidDevice State
       4       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
 
       3       8       16        -      faulty spare   /dev/sdb
#cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[3](F) sde[4] sdd[2] sdc[1]
      2097024 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
      [=================>...]  recovery = 88.7% (931664/1048512) finish=0.0min speed=24130K/sec
      
unused devices: <none>
(3)查看完成壞損設備後的RAID狀態
#mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Nov 13 11:55:59 2007
     Raid Level : raid5
     Array Size : 2097024 (2048.22 MiB 2147.35 MB)
    Device Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
 
    Update Time : Tue Nov 13 18:21:59 2007
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 0
 
         Layout : left-symmetric
     Chunk Size : 64K
 
           UUID : faee3020:14fc3e48:9717e6f5:d7cf7de7
         Events : 0.8
 
    Number   Major   Minor   RaidDevice State
       0       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
 
       3       8       16        -      faulty spare   /dev/sdb
#cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[3](F) sde[0] sdd[2] sdc[1]
      2097024 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>
(4)移除壞損設備
#mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb
(5)添加新的設備
#mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
(6)查看最終狀態
#mdadm -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Nov 13 11:55:59 2007
     Raid Level : raid5
     Array Size : 2097024 (2048.22 MiB 2147.35 MB)
    Device Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 3
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
 
    Update Time : Tue Nov 13 18:25:44 2007
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
 
         Layout : left-symmetric
     Chunk Size : 64K
 
           UUID : faee3020:14fc3e48:9717e6f5:d7cf7de7
         Events : 0.10
 
    Number   Major   Minor   RaidDevice State
       0       8       64        0      active sync   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       2       8       48        2      active sync   /dev/sdd
 
       3       8       16        -      spare   /dev/sdb
#cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[3](S) sde[0] sdd[2] sdc[1]
      2097024 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>
 
 
9>mdadm中文man(引用)
基本語法 : mdadm [mode] [options]
[mode] 有7種:
Assemble:將以前定義的某個陣列加入當前在用陣列。
Build:Build a legacy array ,每個device 沒有 superblocks
Create:創建一個新的陣列,每個device 具有 superblocks
Manage: 管理陣列,比如 add 或 remove
Misc:允許單獨對陣列中的某個 device 做操作,比如抹去superblocks 或 終止在用的陣列。
Follow or Monitor:監控 raid 1,4,5,6 和 multipath 的狀態
Grow:改變raid 容量或 陣列中的 device 數目
可用的 [options]:
-A, --assemble:加入一個以前定義的陣列
-B, --build:Build a legacy array without superblocks.
-C, --create:創建一個新的陣列
-Q, --query:查看一個device,判斷它爲一個 md device 或是 一個 md 陣列的一部分
-D, --detail:打印一個或多個 md device 的詳細信息
-E, --examine:打印 device 上的 md superblock 的內容
-F, --follow, --monitor:選擇 Monitor 模式
-G, --grow:改變在用陣列的大小或形態
-h, --help:幫助信息,用在以上選項後,則顯示該選項信息
--help-options
-V, --version
-v, --verbose:顯示細節
-b, --brief:較少的細節。用於 --detail 和 --examine 選項
-f, --force
-c, --config= :指定配置文件,缺省爲 /etc/mdadm/mdadm.conf
-s, --scan:掃描配置文件或 /proc/mdstat以搜尋丟失的信息。配置文件/etc/mdadm/mdadm.conf
create 或 build 使用的選項:
-c, --chunk=:Specify chunk size of kibibytes. 缺省爲 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:設定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:設定 raid5 的奇偶校驗規則:eft-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省爲left-symmetric
--layout=:類似於--parity
-n, --raid-devices=:指定陣列中可用 device 數目,這個數目只能由 --grow 修改
-x, --spare-devices=:指定初始陣列的富餘device 數目
-z, --size=:組建RAID1/4/5/6後從每個device獲取的空間總數
--assume-clean:目前僅用於 --build 選項
-R, --run:陣列中的某一部分出現在其他陣列或文件系統中時,mdadm會確認該陣列。此選項將不作確認。
-f, --force:通常mdadm不允許只用一個device 創建陣列,而且創建raid5時會使用一個device作爲missing drive。此選項正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章