Related Posts Plugin for WordPress, Blogger...

1、前言

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

  • 採用線程方式進行回復作業 (Threaded Rebuild Process)。
  • 基於核心 (Kernel-Based) 的方式進行設定。
  • 使用作業系統的閒置資源進行背景方式 RAID 重建作業。
  • 支援熱插拔 (Hot-Swappable)。(請尊重 Weithenn 的辛勞!!)
  • 自動使用 CPU 進行檢測及優化的動作 (CPU Detection and Optimizations)。

文章目錄

1、前言
2、實作 Software RAID 5 + Hot Spare
          設定硬碟分割區格式
          初始化 Software RAID
          格式化 Software RAID 及掛載
          查看 Software RAID 狀態
          模擬硬碟損壞
3、定期檢查 Software RAID 狀態

2、實作 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 為示範,當然全部硬碟都進行分割區設定完畢後,記得確認系統是否已經正確辨識到相關分割區資訊了。(請尊重 Weithenn 的辛勞!!)
#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


初始化 Software RAID

接著使用「mdadm」指令搭配參數建立 Software RAID,參數說明如下:
  • -C: 初始化 Software RAID 裝置 (從 0 開始)。
  • -l: 建立 Software RAID Level (所以 -l 5 表示建立 RAID 5)。
  • -n: 建立 Software RAID 硬碟數量。
  • -x: 指定 Hot Spare 硬碟數量及裝置代號。
#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 及掛載

接著將建立好的 Software RAID 裝置進行格式化及掛載的動作:(請尊重 Weithenn 的辛勞!!)
#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 狀態

此時 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 已經接手)。(請尊重 Weithenn 的辛勞!!)
#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]


3、定期檢查 Software RAID 狀態

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

文章標籤: