Linux軟RAID基本操作介紹

   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沒有數據冗餘,如果驅動器出現故障,那麼將無法恢復任何數據,所以一般主要用在對設備讀取要求高,但對數據安全性不做要求的業務中。

wKiom1Z-Kt6DR1skAAAc0Ov5Fko662.gif

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

wKiom1Z-KvWwufdSAAAcnkrjOtY519.gif


       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陣列所有磁盤容量必須一樣大,當容量不同時,會以最小的容量爲準。 同時,最好硬盤轉速一樣,否則會影響性能。

wKioL1Z-KqKzqpAOAAAzQuLa70I593.gif

      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控制卡都支持這一等級。


wKioL1Z-M7ThXM4GAABAYNzLc_A781.jpg

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

wKiom1Z-MlCAdANgAAFjZw8Brf4223.jpg


      由於RAID的使用性很高,而對硬盤的使用內核需要識別,在最新的內核中已經默認加載了對常見RAID卡的驅動。RAID設備在linux系統中會被識別成/dev/md[N] N是數字。使用mdadm命令能夠對RAID設備配置。

  目前 RAID技術大致分爲兩種:基於硬件的RAID技術和基於軟件的RAID技術。其中在Linux下通過自帶的軟件就能實現RAID功能,由於是用軟件去實現的RAID功能,所以它配置靈活、管理方便。同時使用軟件RAID,還可以實現將幾個物理磁盤合併成一個更大的虛擬設備,從而達到性能改進和數據冗餘的目的。

       Linux軟RAID是在linux操作系統層面進行的軟件RAID配置,雖然也能對數據進行保護,但是在實際生產環境中,還是建議使用存儲中磁盤陣列和硬RAID實現磁盤存儲冗餘。基於硬件的RAID解決方案比基於軟件RAID技術在使用性能和服務性能方面不僅更勝一籌,而且在檢測和修復多位錯誤的能力、錯誤磁盤自動檢測和陣列重建等方面更有安全保障。

wKiom1dKPkyh2JCuAABgeR806Eo959.png



基本操作命令總結:

創建模式:

    -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@bogon ~]# 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@bogon ~]# 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@bogon ~]# 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@bogon ~]# 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 : bogon:0  (local to host bogon)
           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@bogon ~]# 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@bogon ~]# mkdir /md0dir 
[root@bogon ~]# mount /dev/md0 /md0dir/
[root@bogon ~]# 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@bogon ~]# 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@bogon ~]# mount -a  ##使fsta文件中沒掛載的都掛上來                                                                                    
[root@bogon ~]# cd /md0dir/  ##進入掛載目錄中創建文件測試正常!
[root@bogon md0dir]# ls
lost+found
[root@bogon md0dir]# touch 1.txt 
[root@bogon md0dir]# ls
1.txt  lost+found
[root@bogon md0dir]#


六、現在我們來模擬下磁盤出現故障,然後看看raid會有什麼變化

[root@bogon md0dir]# mdadm /dev/md0 -f /dev/sdd ##標記/dev/sdd爲損壞
mdadm: set /dev/sdd faulty in /dev/md0

[root@bogon 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 : bogon:0  (local to host bogon)
           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@bogon 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@bogon md0dir]# cd 
[root@bogon ~]# cd /md0dir/
[root@bogon md0dir]# ls
1.txt  lost+found
[root@bogon md0dir]# touch 2.txt 
[root@bogon md0dir]# ls
1.txt  2.txt  lost+found ###看來一切正常,嘻嘻。

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

[root@bogon md0dir]# mdadm /dev/md0 -r /dev/sdd 
mdadm: hot removed /dev/sdd from /dev/md0

[root@bogon 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 : bogon:0  (local to host bogon)
           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@bogon md0dir]# mdadm /dev/md0 -a /dev/sdd ##由於我磁盤不夠了所有就把移走那塊添加了
mdadm: re-added /dev/sdd   

[root@bogon 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 : bogon:0  (local to host bogon)
           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@bogon ~]# umount /md0dir/
[root@bogon ~]# mdadm -S /dev/md0 
mdadm: stopped /dev/md0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章