站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

邁向 RHCE 之路 (Day19) - Software RAID

前言

實際環境應用上磁碟陣列可以概略區分為硬體式 (Hardware) 或軟體式 (Software) 磁碟陣列,通常使用於工作站或個人 PC 才會使用 Software RAID,功能簡單並且因為沒有硬體晶片協助資料處理,因此相關的所有運算負載皆落到主機上頭,除了影響資料存取的效能之外主機的整體效能也會受到影響,CentOS 作業系統內建支援 Software RAID 的建立,支援的類型有 RAID 0、1、4、5、6、10,其中只有 RAID 1 類型才能保護作業系統。不過在 CentOS 中 Software RAID 將採用如下機制以使 Software RAID 運好效能更好更穩定:

實作 Software RAID 5 + Hot Spare

下列將實作 Software RAID 5 + Hot Spare 示意圖請參考 [Complex RAID 5 Variations]

加入四顆 1GB 硬碟,其中 /dev/sdb、/dev/sdc、/dev/sdd 用來建立 Software RAID 5,而 Hot Spare 則由 /dev/sde 擔任,請使用「fdisk」指令對每四顆硬碟「sdb、sdc、sdd、sde」進行分割區及格式的設定,格式請設定為「fd (Linux raid auto)」,下列先以 /dev/sdb 為示範,當然全部硬碟都進行分割區設定完畢後,記得確認系統是否已經正確辨識到相關分割區資訊了。

 #fdisk /dev/sdb        //每顆硬碟進行如下流程分割區設定
  n > p > 1 > enter > enter > t > fd > w
 #cat /proc/partitions  //查看分割區資訊
  major    minor  #blocks name
    8        0   10485760 sda
    8        1     512000 sda1
    8        2    9972736 sda2
  253        0    7905280 dm-0
  253        1    2064384 dm-1
    8       16    1048576 sdb
    8       17    1048376 sdb1
    8       32    1048576 sdc
    8       33    1048376 sdc1
    8       48    1048576 sdd
    8       49    1048376 sdd1
    8       64    1048576 sde
    8       65    1048376 sde1

接著使用「mdadm」指令搭配參數建立 Software RAID,參數說明如下:

 #mdadm -C /dev/md0 -l 5 -n 3 /dev/sd{b,c,d}1 -x 1 /dev/sde1
  mdadm: Defaulting to version 1.2 metadata
  mdadm: array /dev/md0 started.
 #cat /proc/mdstat            //查看 Software RAID 進度 (S 表示 Hot Spare)
  Personalities : [raid6] [raid5] [raid4]
  md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
    2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
    [=======>.............]  recovery = 35.3% (370320/1048064) finish=0.2min speed=46290K/sec

接著將建立好的 Software RAID 裝置進行格式化及掛載的動作:

 #mkfs.ext4 -L raid5 /dev/md0
  mke2fs 1.41.12 (17-May-2010)
  ...略...
 #mkdir /raid5
 #mount /dev/md0 /raid5
 #df -h
  Filesystem            Size  Used Avail Use% Mounted on
  /dev/mapper/vg_centos6-lv_root
                        7.5G  2.1G  5.0G  30% /
  tmpfs                 504M  436K  504M   1% /dev/shm
  /dev/sda1             485M   29M  431M   7% /boot
  /dev/md0              2.0G   35M  1.9G   2% /raid5   //掛載成功

此時 Software RAID 運作正常時的動態,以便等一下可以跟有硬碟損壞時進行比較:

 #cat /proc/mdstat         //查看 Software RAID 資訊
  Personalities : [raid6] [raid5] [raid4]
  md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]
       2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
 #mdadm --detail /dev/md0  //查看 Software RAID 資訊
  /dev/md0:
          Version : 1.2
    Creation Time : Mon Oct 24 13:59:05 2011
       Raid Level : raid5
       Array Size : 2096128 (2047.34 MiB 2146.44 MB)
    Used Dev Size : 1048064 (1023.67 MiB 1073.22 MB)
     Raid Devices : 3
    Total Devices : 4
      Persistence : Superblock is persistent
      Update Time : Mon Oct 24 14:02:22 2011
            State : clean
   Active Devices : 3
  Working Devices : 4
   Failed Devices : 0
    Spare Devices : 1 
           Layout : left-symmetric
       Chunk Size : 512K
             Name : Centos6.weithenn.org:0  (local to host Centos6.weithenn.org)
             UUID : b19c810a:0a2203f3:0550a8cc:3dc22992
           Events : 18
     Number   Major   Minor   RaidDevice State
        0       8       17        0      active sync   /dev/sdb1
        1       8       33        1      active sync   /dev/sdc1
        4       8       49        2      active sync   /dev/sdd1
        3       8       65        -         spare      /dev/sde1

接著模擬 /dev/sdd 硬碟損壞的情況,使用參數 「--fail」 指令 Software RAID 中哪顆成員硬碟損壞,並且再使用參數 「--remove」 後才表示可以把該硬碟正常卸載後換上新硬碟,最後使用參數 「--add」 加入,而加入的硬碟則成為 Hot Spare 硬碟 (因為本來的 Hot Spare 已經接手)。

 #mdadm --fail /dev/md0 /dev/sdd1   //sdd 硬碟損壞
  mdadm: set /dev/sdd1 faulty in /dev/md0
 #cat /proc/mdstat                  //sde 馬上接手 (Hot Spare 機制運作)
  Personalities : [raid6] [raid5] [raid4]
  md0 : active raid5 sdd1[4](F) sde1[3] sdc1[1] sdb1[0]
       2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
       [===========>.........]  recovery = 55.3% (580248/1048064) finish=0.1min speed=44634K/sec
 #mdadm --detail /dev/md0   //僅列出與正常狀況時不同之處
  /dev/md0:
  Working Devices : 3
   Failed Devices : 1
    Spare Devices : 0
           Events : 37
     Number   Major   Minor   RaidDevice State
        0       8       17        0      active sync   /dev/sdb1
        1       8       33        1      active sync   /dev/sdc1
        3       8       65        2      active sync   /dev/sde1
        4       8       49        -      faulty spare  /dev/sdd1
 #mdadm --remove /dev/md0 /dev/sdd1   //可拔出 sdd 硬碟
  mdadm: hot removed /dev/sdd1 from /dev/md0
  You have new mail in /var/spool/mail/root
 #mdadm --add /dev/md0 /dev/sdd1      //將新硬碟加入為成員硬碟
  mdadm: re-added /dev/sdd1
 #cat /proc/mdstat                    //目前 Hot Spare 為 sdd
  Personalities : [raid6] [raid5] [raid4]
  md0 : active raid5 sdd1[4](S) sde1[3] sdc1[1] sdb1[0]
       2096128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

定期檢查 Software RAID 狀態

我們可以撰寫一個簡單的 Shell Script,使系統每天執行定期排程時順便檢查 Software RAID 狀態,並將狀態結果寄給管理者,如下我們建立「check-raid.sh」腳本檔案於 「/etc/cron.daily」,並且給予 755 的檔案權限設定,之後每天就可以定期收到檢查 Software RAID 狀態 Mail。

 #cat /etc/cron.daily/check-raid.sh
   #!/bin/sh
   /sbin/mdadm --monitor --oneshot --test --mail=weithenn@weithenn.org /dev/md
 #chmod 755 /etc/cron.daily/check-raid.sh

定期檢查 Software RAID 狀態郵件

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com