在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