linux下的軟raid

在linux中,可以使用軟件的方法來實現raid,當然,這種軟件方法的實現比不了服務器自帶的陣列卡,一般X86服務器上(比如dell R720)上面就可以配一塊硬件陣列卡,還可以加緩存,在回寫模式下可以加速數據的讀寫,還有電池,可以保障緩存中的數據在突然斷電情況下不丟失。而軟raid沒有加速和保護的功能,但確實能實現raid。比如常見的raid 0、1、5、10。下面簡單介紹一下這幾種raid的原理。

一、JBOD,這種模式其實不是一種真正的raid.但它能把多個物理磁盤的容量堆疊起來,讓它們形成一個邏輯的磁盤,數據在寫滿一個盤再轉到下一個盤。但如果磁盤損壞的話,數據就丟失了,這種模式在企業中使用較少

二、raid 0,這是一種不包含數據冗餘的raid.至少使用兩塊硬盤來實現,它不會造成磁盤容量的減少,並且能加速磁盤的讀寫速度,但是數據的安全得不到保障,如果陣列中的一塊硬盤故障,整個陣列中的數據都丟失了。這是一種條帶化的技術,比如一個文件100M,而每個條帶大小爲32K,那麼它會以32K爲一個單位來分開存儲,即每在物理磁盤0上面寫32K數據以後,再到物理磁盤1上寫32K數據,依此類推。

三、raid 1,這是一種鏡像的raid技術,至少2塊硬盤,磁盤使用率爲50%。因爲是鏡像的,所以磁盤壞一塊沒有關係,一般用來安裝操作系統,讀取速度增加,寫入速度與一塊磁盤持平或者稍慢

四、raid 5,帶有校驗的條帶化raid。raid 5沒有專門的檢驗盤,它把數據和檢驗數據每個盤寫一部分,依此類推。磁盤使用率爲(n-1)/n,即會少一塊磁盤的容量,讀寫的速度都提高了。在企業中,此技術也使用得比較多,如果損壞一塊磁盤,可以使用其他磁盤的校驗信息來恢復數據

五、raid 10,即raid 1與raid 0的組,有人把raid 10和raid 01說成一種,其實它們也稍有一同,10指的是把這些物理磁盤的做成兩個raid 1,再把兩個raid 1 組成成一個raid 0。除了磁盤使用率只有一半以後,讀、寫速度都提高了,然後因爲有鏡像,數據安全得到保障。


使用mdadm來實驗軟raid

在我的實驗環境中,有五塊磁盤,sda安裝了linux,sdb-sde用來做軟件raid。

mdadm的用法

語法:# mdadm  -C  -v  /dev/mdX  -lY  -nZ  -cK  RAID成員

-C 即創建一個raid,此種方法將raid的信息寫入到superblock中,如果將來重裝或者重新啓用raid,非常方便

-v 顯示詳細信息

/dev/mdX,即指定這個設備爲mdX,X一般取值從0-127

-l 指定raid的級別,比如0 1 5

-n  指定一共有幾個設備來構建這個raid,在linux中可以使用磁盤或者一個分區來做爲源盤

-c 指定條帶的大小,默認爲64K

後面跟着的是組成raid的磁盤的成員,這些成員數目要等於在-n後面指定的數

-x 如果是做有檢驗的raid,比如5,可以指定熱備盤,即一個在raid中已經被使用磁盤出現故障後,可以自動替換進raid中


在本例中,我使用三個磁盤做一個raid 5,然後把/dev/sde做成一個熱備盤,指定條帶大小爲32K

然後把raid 中的/dev/sdd模擬故障,看/dev/sde能否自動替換進去,再查看數據的完整性

[root@Centos ~]# mdadm -C /dev/md0 -v -a yes -l 5 -c 32K -n 3 /dev/sd{b,c,d} -x 1 /dev/sde

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: size set to 2096096K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.


接下來使用fdisk -l來查看是否有md0這個設備

Disk /dev/md0: 4292 MB, 4292804608 bytes

2 heads, 4 sectors/track, 1048048 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 32768 bytes / 65536 bytes

Disk identifier: 0x00000000


再接下來,我們查看一下這個md0的相關信息

[root@Centos ~]# mdadm -D /dev/md0

[root@Centos ~]# mdadm -D /dev/md0

/dev/md0:

      Version : 1.2

Creation Time : Wed Mar  522:43:51 2014

  Raid Level : raid5

   Array Size : 4192192 (4.00 GiB 4.29 GB)

Used Dev Size : 2096096 (2047.31 MiB 2146.40 MB)

 Raid Devices : 3

Total Devices : 4

  Persistence : Superblock is persistent


  Update Time : Wed Mar  5 22:44:162014

        State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1


       Layout : left-symmetric

 Chunk Size : 32K


         Name : Centos.abc.com:0  (local tohost Centos.corun.com)

         UUID : 5e6594f3:3ad4713d:1476a99a:3a65e231

       Events : 18


  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



接下來,我們對/dev/md0進行分區、格式化、掛載

fdisk /dev/md0

創建一個主分區,大小爲全部大小,也就是說爲4G

fdisk -l  顯示這個已經創建的分區名稱,還有使用命令顯示這個分區的UUID


Disk /dev/md0: 4292 MB, 4292804608 bytes

2 heads, 4 sectors/track, 1048048 cylinders

Units = cylinders of 8 * 512 = 4096 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 32768 bytes /65536 bytes

Disk identifier: 0x327efd65


  Device Boot      Start         End     Blocks   Id  System

/dev/md0p1              17     1048048    4192128   83  Linux


[root@Centos dev]# blkid /dev/md0p1

/dev/md0p1: UUID="5876338a-afca-44e9-b9ce-1cee32c22026" TYPE="ext3"



[root@Centos dev]# e2label /dev/md0p1 liuqing

[root@Centos dev]# blkid /dev/md0p1

/dev/md0p1: UUID="5876338a-afca-44e9-b9ce-1cee32c22026" TYPE="ext3" LABEL="liuqing"


掛載這個文件系統到/mnt

mount UUID=5876338a-afca-44e9-b9ce-1cee32c22026 /mnt


在/mnt這個目錄中,複製幾個文件進來,分別是/etc/inittab /etc/fstab /etc/passwd

[root@Centos dev]# cd /mnt

[root@Centos mnt]# cp /etc/passwd .

[root@Centos mnt]# cp /etc/inittab .

[root@Centos mnt]# cp /etc/fstab .

[root@Centos mnt]# ls

fstab  inittab  lost+found  passwd

[root@Centos mnt]#


最後面這一部分是要模擬磁盤故障,我們將/dev/sdd模擬故障

[root@Centos mnt]# mdadm /dev/md0 --fail /dev/sdd  --remove /dev/sdd

mdadm: set /dev/sdd faulty in /dev/md0

mdadm: hot removed /dev/sdd from /dev/md0

[root@Centos mnt]# mdadm --detail /dev/md0

/dev/md0:

       Version : 1.2

 Creation Time : Wed Mar  5 22:43:51 2014

    Raid Level : raid5

    Array Size : 4192192 (4.00 GiB 4.29 GB)

 Used Dev Size : 2096096 (2047.31 MiB 2146.40 MB)

  Raid Devices : 3

 Total Devices : 3

   Persistence : Superblock is persistent


   Update Time : Wed Mar  5 23:04:46 2014

         State : clean

Active Devices : 3

Working Devices : 3

Failed Devices : 0

 Spare Devices : 0


        Layout : left-symmetric

    Chunk Size : 32K


          Name : Centos.corun.com:0  (local to host Centos.corun.com)

          UUID : 5e6594f3:3ad4713d:1476a99a:3a65e231

        Events : 38


   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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章