|
摘 要:本文詳細(xì)介紹了Linux下Software RAID的實(shí)現(xiàn),進(jìn)行了性能分析,對數(shù)據(jù)的安全性及訪問的效率都進(jìn)行了深入的討論。 關(guān)鍵詞:Linux;RAID; 磁盤鏡像;性能分析 一 前言 RAID是Redundant Arrays of Independent Disks的簡稱,中文為廉價冗余磁盤陣列。明確標(biāo)準(zhǔn)級別分別是0、1、2、3、4、5等,RAID為使用者降低了成本、增加了執(zhí)行效率,并提供了系統(tǒng)運(yùn)行的穩(wěn)定性。RAID1又稱為磁盤鏡像,原理是在兩個硬盤之間建立完全的鏡像,即所有數(shù)據(jù)會被同時存放到兩個物理硬盤上,當(dāng)一個磁盤出故障時,仍可從另一個硬盤中讀取數(shù)據(jù),因此安全性得到保障。但系統(tǒng)的成本大大提高。 本人一直維護(hù)一臺Linux服務(wù)器,提供WEB、FTP、TELNETD等服務(wù)。由于管理不善,未給服務(wù)器接UPS電源,某日突然停電,造成服務(wù)器硬盤物理損傷,數(shù)據(jù)全部丟失。因?yàn)閷W(xué)業(yè)較重,服務(wù)器數(shù)據(jù)備份不及時,雖然馬上重新恢復(fù)系統(tǒng),提供服務(wù),但是仍然丟失了很多重要數(shù)據(jù)。痛定思痛,決定給服務(wù)器做兩塊硬盤的RAID1備份,以防此類事故再次發(fā)生。由于手頭有空余硬盤,所使用的又是Redhat Linux 9.0操作系統(tǒng),為了節(jié)約成本,選擇了軟件實(shí)現(xiàn)RAID1。 二 具體實(shí)現(xiàn) 1 服務(wù)器配置服務(wù)器型號為IBM的Netfinity 5100,具體配置是:CPU:Pentium III XeonTM 900MHz;內(nèi)存:512M;磁盤控制器:U2SCSI;網(wǎng)絡(luò):內(nèi)置10/100M以太網(wǎng);硬盤:IBM SCSI 36G 一塊。裝Redhat Linux 9.0操作系統(tǒng),主要為同學(xué)提供WEB服務(wù),后臺還有數(shù)據(jù)庫服務(wù)Mysql。 現(xiàn)在用手頭空余的IBM SCSI 36G和以前的那塊硬盤一起做成RAID1。制作過程首先要保證原始數(shù)據(jù)不丟失,并在不重新安裝系統(tǒng)的基礎(chǔ)上。 服務(wù)器磁盤分區(qū)情況見表1:
DEVICE MOUNTPOINT SIZE /dev/sda1 / 6000MB /dev/sda2 /boot 200MB /dev/sda3 /var 15000MB /dev/sda4 SWAP 1024MB 表1 服務(wù)器磁盤分區(qū) 2 前期準(zhǔn)備工作制作RAID之前,需要對系統(tǒng)進(jìn)行一些測試,看其是否支持RAID磁盤分區(qū),及從RAID分區(qū)啟動。需要進(jìn)行以下檢測: (1) 需要檢查內(nèi)核是否支持自動識別RAID設(shè)備。 (2) 在創(chuàng)建RAID分區(qū)時必須使用持久化設(shè)備類型。 (3) 用來制作RAID分區(qū)的磁盤分區(qū)類型必須被設(shè)置成0xFD(可以使用fdisk程序,并設(shè)置磁盤分區(qū)類型為“fd”)。 如果是默認(rèn)安裝系統(tǒng),并直接運(yùn)行服務(wù),之前沒有做過RAID的機(jī)器,以上都是默認(rèn)不支持的,因此你必須完成以下的預(yù)備工作: (1) 在Redhat Linux下有一個非常有用的命令:mkinitrd,該命令可以創(chuàng)建一個鏡像,在啟動的時候自動加載你所需要加載的內(nèi)核模塊。使用方式如下: mkinitrd –with=<module> <ramdisk name> <kernel> 具體例子: mkinitrd –preload raid1 –with=raid1 raid-ramdisk 2.2.5-22(注:raid-ramdisk 2.2.5-22是啟動時使用的initimg) 這樣就能保證在啟動的時候,內(nèi)核自動識別RAID設(shè)備,并能夠把根目錄掛載到RAID磁盤分區(qū)上頭。這樣就保證了,能讓兩塊硬盤完全一樣,當(dāng)一塊硬盤出故障時,能從令一塊硬盤直接啟動。 (2) 要創(chuàng)建RAID分區(qū)時使用持久化設(shè)備類型,就需要在RAID配置文件中加上以下語句: Persistent-superblock 1 (3) 使用fdisk程序,能夠修改磁盤分區(qū)的類型,把所有的Linux分區(qū)都改成fd類型,此修改不會傷及磁盤分區(qū)上的數(shù)據(jù)。 3 具體步驟(1) 用Redhat的安裝啟動盤啟動機(jī)器,在啟動前需要選擇啟動模式,輸入:linux rescue,進(jìn)入救援模式,需要注意的是,不要選擇掛載磁盤分區(qū),磁盤分區(qū)必須在沒有掛載的情況下,才能做成RAID。 (2) 用fdisk對新硬盤進(jìn)行分區(qū),保證新硬盤的每個分區(qū)的大小都和老硬盤分區(qū)大小都相近。具體步驟就不詳細(xì)介紹了。需要注意的是,在新硬盤上頭最好也分處SWAP分區(qū),如果老硬盤出故障,需要從新硬盤啟動,但是新硬盤又沒有SWAP分區(qū),這樣對系統(tǒng)性能會有影響。 (3) 創(chuàng)建RAID配置文件。該文件默認(rèn)是沒有的,需要自己創(chuàng)建,默認(rèn)的配置文件保存在/etc目錄下,文件名為raidtab,詳細(xì)見表2。 (4) 創(chuàng)建md設(shè)備,即RAID設(shè)備,執(zhí)行以下命令: (rescue)# mknod /dev/md0 b 9 0 (rescue)# mknod /dev/md1 b 9 0 (rescue)# mknod /dev/md2 b 9 0 (5) 開始創(chuàng)建RAID設(shè)備,使用mkraid命令,執(zhí)行如下: (rescue)# mkdir -really-force /dev/md0 (rescue)# mkdir -really-force /dev/md1 (rescue)# mkdir -really-force /dev/md2 注意,在執(zhí)行完以上一條命令的時候,可以使用命令:cat /proc/mdstat 察看制作RAID分區(qū)的完成程度,一般10G的分區(qū)大概需要20-30分鐘,視機(jī)器性能而定。當(dāng)制作完一個分區(qū),才能繼續(xù)制作下一個RAID分區(qū),不要同時執(zhí)行兩條命令。
raiddev /dev/md0 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/sda1 raid-disk 0 device /dev/sdb1 raid-disk 1 raiddev /dev/md1 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/sda2 raid-disk 0 device /dev/sdb2 raid-disk 1 raiddev /dev/md2 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/sda3 raid-disk 0 device /dev/sdb3 raid-disk 1
表2 /etc/raidtab文件 (6) 掛載做好的RAID磁盤分區(qū),對應(yīng)的分區(qū)和系統(tǒng)目錄的關(guān)系是:md0對應(yīng)根目錄,md1對應(yīng)/boot目錄,md2對應(yīng)/var目錄。掛載好分區(qū)后,用chroot命令切換到根目錄下。 (7) 接下來你需要修改兩個配置文件:/etc/fstab和/boot/grub/grub.conf。 /etc/fstab文件是系統(tǒng)分區(qū)的配置文件,修改它的目的是在啟動的時候掛載各個RAID磁盤分區(qū)。修改后的/etc/fstab文件見表3:
/dev/md0 / ext3 defaults 1 1 /dev/md1 /boot ext3 defaults 1 2 /dev/md2 /var ext3 defaults 1 2 /dev/sda4 swap swap defaults 0 0 表3 /etc/fstab文件
/boot/grub/grub.conf文件是啟動時候的配置文件,修改它的目的是在啟動的時候能找到RAID磁盤的根目錄,并找到啟動的鏡像文件。修改后的/boot/grub/grub.conf見表4: # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/md1 # initrd /initrd-version.img #boot=/dev/sda1 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux AS (2.6.9-5.EL) root (hd0,0) kernel /vmlinuz-2.6.9-5.EL ro root=/dev/md1 initrd /initrd-2.6.9-5.EL.img 表4:/boot/grub/grub.conf文件 (8) 制作完RAID磁盤分區(qū)后,由于做成一個RAID分區(qū)的兩個物理磁盤分區(qū)大小不可能完全一樣,一般都會偏小,因此要重新調(diào)整文件系統(tǒng)的大小。以/dev/md0為例,需要執(zhí)行以下命令: (rescue)# e2fsck -f /dev/md0 (rescue)# resize2fs /dev/md0 對其他的RAID磁盤分區(qū)也執(zhí)行同樣的命令,然后你就可以重新啟動機(jī)器了,如果順利的話,機(jī)器就運(yùn)行在RAID1狀態(tài)下了。 (9) 收尾工作,你可能希望機(jī)器可以從任何一快硬盤啟動,因?yàn)槿绻饔脖P出故障,只需要重新啟動,就可以繼續(xù)提供服務(wù),因此,你必須在輔硬盤上把啟動程序grub重新安裝一遍。 三 分析 1 安全性分析在使用了RAID磁盤分區(qū)后,只要是對該類分區(qū)進(jìn)行的數(shù)據(jù)寫操作,數(shù)據(jù)會被寫到兩塊硬盤的對應(yīng)分區(qū)上,兩塊硬盤保持同步更新。這樣就保證了數(shù)據(jù)的安全性,也無需經(jīng)常備份數(shù)據(jù)了。制作過程中使用的是一塊空余硬盤,RAID1的實(shí)現(xiàn)是系統(tǒng)提供的軟件方式,節(jié)省了RAID卡的開銷,以最小的成本實(shí)現(xiàn)了我們的目標(biāo)。 2 效率分析在選擇RAID1方式的時候,一直擔(dān)心它的效率問題,RAID1只提供數(shù)據(jù)冗余備份,RAID0能提供較高的數(shù)據(jù)訪問速度,如果選擇實(shí)現(xiàn)RAID0+1的話,至少需要4塊硬盤。成本將大大提高。在制作完RAID1后,馬上進(jìn)行了磁盤讀些測驗(yàn),分析性能。 進(jìn)行磁盤性能測驗(yàn)是使用Linux自帶的工具h(yuǎn)dparm。該命令的測試原理是往磁盤分區(qū)上反復(fù)讀寫大量數(shù)據(jù),并計(jì)算時間,以此來測試磁盤性能。在系統(tǒng)下執(zhí)行該命令,則可以得到硬盤數(shù)據(jù)讀寫的測驗(yàn)結(jié)果。實(shí)驗(yàn)數(shù)據(jù)見表5:
[root@panda ~]# hdparm -Tt /dev/sda1
/dev/sda1: Timing cached reads: 696 MB in 2.01 seconds = 346.67 MB/sec Timing buffered disk reads: 154 MB in 3.01 seconds = 51.10 MB/sec [root@panda ~]# hdparm -Tt /dev/sdb1
/dev/sdb1: Timing cached reads: 796 MB in 2.01 seconds = 396.28 MB/sec Timing buffered disk reads: 146 MB in 3.03 seconds = 48.21 MB/sec [root@panda ~]# hdparm -Tt /dev/md0
/dev/md0: Timing cached reads: 824 MB in 2.01 seconds = 410.22 MB/sec Timing buffered disk reads: 130 MB in 3.00 seconds = 43.31 MB/sec 表5 硬盤性能測驗(yàn)數(shù)據(jù) 從上表的實(shí)驗(yàn)數(shù)據(jù)看出,第一行數(shù)據(jù)是對主硬盤性能測驗(yàn)的數(shù)據(jù),從硬盤cache讀寫數(shù)據(jù)的速度是346.67 MB/sec,從硬盤盤面上讀寫數(shù)據(jù)的速度是51.10 MB/sec;第二行是對輔硬盤性能測驗(yàn)的數(shù)據(jù),從硬盤cache讀寫數(shù)據(jù)的速度是396.28 MB/sec,從硬盤盤面上讀寫數(shù)據(jù)的速度是48.21 MB/sec;第三行是對RAID磁盤分區(qū)性能測驗(yàn)的數(shù)據(jù),從cache讀寫數(shù)據(jù)的速度是410.22 MB/sec,從盤面讀寫數(shù)據(jù)的速度是43.31 MB/sec??梢钥闯鰪腸ache讀寫數(shù)據(jù)的速度有所提高,從盤面讀寫數(shù)據(jù)的速度有所下降??偟膩碚f,差距不是太大,在可以接受的范圍內(nèi)。 |
|
|