在linux中,可使用軟件的方法來實現raid,固然,這種軟件方法的實現比不了服務器自帶的陣列卡,通常X86服務器上(好比dell R720)上面就能夠配一塊硬件陣列卡,還能夠加緩存,在回寫模式下能夠加速數據的讀寫,還有電池,能夠保障緩存中的數據在忽然斷電狀況下不丟失。而軟raid沒有加速和保護的功能,但確實能實現raid。好比常見的raid 0、一、五、10。下面簡單介紹一下這幾種raid的原理。linux
1、JBOD,這種模式其實不是一種真正的raid.但它能把多個物理磁盤的容量堆疊起來,讓它們造成一個邏輯的磁盤,數據在寫滿一個盤再轉到下一個盤。但若是磁盤損壞的話,數據就丟失了,這種模式在企業中使用較少緩存
2、raid 0,這是一種不包含數據冗餘的raid.至少使用兩塊硬盤來實現,它不會形成磁盤容量的減小,而且能加速磁盤的讀寫速度,可是數據的安全得不到保障,若是陣列中的一塊硬盤故障,整個陣列中的數據都丟失了。這是一種條帶化的技術,好比一個文件100M,而每一個條帶大小爲32K,那麼它會以32K爲一個單位來分開存儲,即每在物理磁盤0上面寫32K數據之後,再到物理磁盤1上寫32K數據,依此類推。安全
3、raid 1,這是一種鏡像的raid技術,至少2塊硬盤,磁盤使用率爲50%。由於是鏡像的,因此磁盤壞一塊沒有關係,通常用來安裝操做系統,讀取速度增長,寫入速度與一塊磁盤持平或者稍慢服務器
4、raid 5,帶有校驗的條帶化raid。raid 5沒有專門的檢驗盤,它把數據和檢驗數據每一個盤寫一部分,依此類推。磁盤使用率爲(n-1)/n,即會少一塊磁盤的容量,讀寫的速度都提升了。在企業中,此技術也使用得比較多,若是損壞一塊磁盤,可使用其餘磁盤的校驗信息來恢復數據ide
5、raid 10,即raid 1與raid 0的組,有人把raid 10和raid 01說成一種,其實它們也稍有一同,10指的是把這些物理磁盤的作成兩個raid 1,再把兩個raid 1 組成成一個raid 0。除了磁盤使用率只有一半之後,讀、寫速度都提升了,而後由於有鏡像,數據安全獲得保障。spa
使用mdadm來實驗軟raid操作系統
在個人實驗環境中,有五塊磁盤,sda安裝了linux,sdb-sde用來作軟件raid。3d
mdadm的用法
rem
語法:# mdadm -C -v /dev/mdX -lY -nZ -cK RAID成員it
-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