Linux下軟體RAID的實現

來源:互聯網
上載者:User
 Linux下軟體RAID的實現
時間:2005-04-27 作者:不詳 來源:不詳

   作為網路作業系統,冗餘磁碟陣列(Redundant Array of Inexpensive Disks,簡稱RAID)功能是必備的功能之一。從Linux 2.4核心開始,Linux就提供軟體RAID,不必購買昂貴的硬體RAID控制器和附件(一般中、高擋伺服器都提供這樣的裝置和熱插拔硬碟),就能極大 地增強Linux磁碟的I/O效能和可靠性。同時,它還具有將多個較小的磁碟空間組合成一個較大磁碟空間的功能。這裡的軟體RAID不是指在單個物理硬碟 上實現RAID功能。為提高RAID的效能,最好還是使用多個硬碟,使用SCSI介面的硬碟效果會更好。
RAID作用及主要使用類型

RAID 將普通硬碟組成一個磁碟陣列,在主機寫入資料時,RAID控制器把主機要寫入的資料分解為多個資料區塊,然後並行寫入磁碟陣列;主機讀取資料時,RAID控 制器並行讀取分散在磁碟陣列中各個硬碟上的資料,把它們重新組合後提供給主機。由於採用並行讀寫操作,從而提高了儲存系統的存取程度。此外,RAID磁碟 陣列更主要的作用是,可以採用鏡像、同位等措施來提高系統的容錯能力,保證資料的可靠性。一般在安裝Linux作業系統時可以根據需要進行RAID的 安裝配置。

在使用Linux作業系統的過程中,也可以根據應用的需要,用手工方法進行RAID的配置。配置前提是必須已經安裝 raidtools工具包。該包可以從http://people.redhat.com/mingo/raidtools處下載最新版 raidtools-1.00.3.tar.gz ,然後用root使用者解壓縮包然後輸入以下命令:

# cd raidtools-1.00.3
# ./configure
# make
# make install

這樣raidtools-1.00.3就安裝好了,從而可以隨時安裝使用RAID。

在Linux 系統中,主要提供RAID 0、RAID 1、RAID 5三種層級的RAID方法。RAID 0又稱為Stripe或Striping,中文譯為集帶工作方式。它是將要存取的資料以條帶狀形式盡量平均分配到多個硬碟上,讀寫時多個硬碟同時進行讀 寫,從而提高資料的讀寫速度。RAID 0另一目的是獲得更大的“單個”磁碟容量。

RAID 1又稱為Mirror或Mirroring,中文譯為鏡像方式。這種工作方式的出現完全是為了資料安全考慮的,它是把使用者寫入硬碟的資料百分之百地自動複 制到另外一個硬碟上或硬碟的不同地方(鏡像)。當讀取資料時,系統先從RAID 1的來源硬碟讀取資料,如果讀取資料成功,則系統不去管備份盤上的資料;如果讀取來源硬碟資料失敗,則系統自動轉而讀取備份盤上的資料,不會造成使用者工作任務的中 斷。由於對儲存的資料進行百分之百的備份,在所有RAID層級中,RAID 1提供最高的資料安全保障。同樣,由於資料的百分之百備份,備份資料佔了總儲存空間的一半,因而,Mirror的磁碟空間利用率低,儲存成本高。

RAID 5是一種儲存效能、資料安全和儲存成本兼顧的儲存解決方案,也是目前應用最廣泛的RAID技術。各塊獨立硬碟進行條帶化分割,相同的條帶區進行同位 (異或運算),校正資料平均分布在每塊硬碟上。以n塊硬碟構建的RAID 5陣列可以有n-1塊硬碟的容量,儲存空間利用率非常高。RAID 5不對儲存的資料進行備份,而是把資料和相對應的同位資訊儲存到組成RAID5的各個磁碟上,並且同位資訊和相對應的資料分別儲存於不同的磁碟 上。當RAID 5的任何一塊硬碟上的資料丟失,均可以通過校正資料推算出來。RAID 5具有資料安全、讀寫速度快,空間利用率高等優點,應用非常廣泛。其不足之處是如果1塊硬碟出現故障以後,整個系統的效能將大大降低。RAID 5可以為系統提供資料安全保障,但保障程度要比Mirror低,而磁碟空間利用率要比Mirror高。RAID 5具有和RAID 0相近似的資料讀取速度,只是多了一個同位資訊,寫入資料的速度比對單個磁碟進行寫入操作稍慢。同時由於多個資料對應一個同位資訊,RAID 5的磁碟空間利用率要比RAID 1高,儲存成本相對較低。

RAID在Linux下的建立過程

在實際使用過程中,一般都是使用多個單獨的磁碟建立RAID,當然也可以使用單個磁碟建立RAID,具體步驟類似。在此,我以使用單個磁碟建立RAID為例進行介紹。

1.以root使用者登入

2.使用fdisk工具建立RAID分區

(1)fdisk /dev/hda,這裡假定IDE1主介面上的硬碟有剩餘空間。

(2)使用命令n建立多個大小相同的新分區,若建立RAID 0或RAID 1分區數至少要大於等於2, RAID 5分區數至少大於等於3。n—起始柱面(可直接按斷行符號)—分區大小;重複以上過程到想建立的RAID分區數為止。結果如下所示:

disk /dev/hda: 240 heads, 63 sectors, 3876 cylinders
Units = cylinders of 15120 * 512 bytes

  Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1      1221   9230728+   c  Win95 FAT32 (LBA)
/dev/hda2          1222      1229     60480   83  Linux
/dev/hda3          1230      1906   5118120   83  Linux
/dev/hda4          1907      3876  14893200    f  Win95 Ext'd (LBA)
/dev/hda5          1907      1960    408208+  82  Linux swap
/dev/hda6          1961      2231   2048728+   b  Win95 FAT32
/dev/hda7          2709      3386   5125648+   b  Win95 FAT32
/dev/hda8          3387      3876   3704368+   7  HPFS/NTFS
/dev/hda9          2232      2245    105808+  83  Linux
/dev/hda10         2246      2259    105808+  83  Linux
/dev/hda11         2260      2273    105808+  83  Linux
/dev/hda12         2274      2287    105808+  83  Linux

使用n命令建立4個Linux分區後,用命令p顯示分區情況。這裡/dev/hda9、/dev/hda10、/dev/hda11、/dev/hda12為建立的4個Linux分區。

(3)使用命令t改變分區類型為software raid類型。t—分區號—fd(分區類型);重複以上過程。修改分區類型後如下所示:

/dev/hda9     2232  2245    105808+  fd  Linux raid autodetect
/dev/hda10    2246  2259    105808+  fd  Linux raid autodetect
/dev/hda11    2260  2273    105808+  fd  Linux raid autodetect
/dev/hda12    2274  2287    105808+  fd  Linux raid autodetect

(4)使用命令w儲存分區表。

3.重新啟動使分區表生效

4.使用man raidtab查看設定檔結構

5.使用編輯命令將設定檔內容寫入 /etc/raidtab

如下所示:

raiddev /dev/md0
 raid-level              5
 nr-raid-disks           3
 nr-spare-disks          1
 persistent-superblock   1
 parity-algorithm        left-symmetric
 chunk-size              8

 device                  /dev/hda9
 raid-disk               0
 device                  /dev/hda10
 raid-disk               1
 device                  /dev/hda11
 raid-disk               2
 device                  /dev/hda12
 spare-disk              0

這 裡建立RAID-5,使用3個RAID磁碟,1個備用磁碟。注意“chunk-size 8”一句不能少,指定RAID-5使用的塊大小為8KB。RAID-5卷會以8KB的塊寫入其組成分區,即RAID卷的第一個8KB在hda9上,第二個 8KB在hda10上,依此類推。裝置名稱可為md0或md1等。“spare-disk”磁碟主要起備用作用,一旦某一磁碟損壞可以立即頂上,這裡也可以 不要。

6.使用mkraid /dev/md0建立RAID陣列

這裡md表示建立的是RAID磁碟類型。結果如下所示:

[root@localhost root]# mkraid  /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hda9, 105808kB, raid superblock at 105728kB
disk 1: /dev/hda10, 105808kB, raid superblock at 105728kB
disk 2: /dev/hda11, 105808kB, raid superblock at 105728kB
disk 3: /dev/hda12, 105808kB, raid superblock at 105728kB
md0: WARNING: hda10 appears to be on the same physical disk as hda9. True
    protection against single-disk failure might be compromised.
md0: WARNING: hda11 appears to be on the same physical disk as hda10. True
    protection against single-disk failure might be compromised.
md0: WARNING: hda12 appears to be on the same physical disk as hda11. True
    protection against single-disk failure might be compromised.
md: md0: RAID array is not clean -- starting background reconstruction
  8regs     :  2206.800 MB/sec
  32regs    :  1025.200 MB/sec
  pII_mmx   :  2658.400 MB/sec
  p5_mmx    :  2818.400 MB/sec
raid5: using function: p5_mmx (2818.400 MB/sec)
raid5: raid level 5 set md0 active with 3 out of 3 devices, algorithm 2

7.使用 lsraid -a /dev/md0 查看RAID分區狀況

結果如下所示:

[root@localhost root]# lsraid -a  /dev/md0
[dev   9,   0] /dev/md0   86391738.19BEDD09.8F02C37B.51584DBA online
[dev   3,   9] /dev/hda9  86391738.19BEDD09.8F02C37B.51584DBA good
[dev   3,  10] /dev/hda10 86391738.19BEDD09.8F02C37B.51584DBA good
[dev   3,  11] /dev/hda11 86391738.19BEDD09.8F02C37B.51584DBA good
[dev   3,  12] /dev/hda12 86391738.19BEDD09.8F02C37B.51584DBA spare

8.mkfs.ext3/dev/md0將RAID分區格式化為ext3格式

結果如下所示:

[root@localhost root]# mkfs.ext3 /dev/md0
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
53040 inodes, 211456 blocks
10572 blocks (5.00%) reserved for the super user
First data block=1
26 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
       8193, 24577, 40961, 57345, 73729, 204801

raid5: switching cache buffer size, 4096 --> 1024
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information:
done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

9.mount /dev/md0 /mnt/md0

這裡應首先在mnt目錄下建立md0子目錄。

至此,所有建立工作完成,md0目錄就成為具有RAID作用的一個目錄。

檢驗RAID的效果

我們可以使用以下步驟檢驗RAID的效果。

1.dd if=/dev/zero of=/dev/hda9 bs=100000000 count=10

將RAID的第一個磁碟分割hda9全部置0;bs表示一次寫多少位,count表示寫多少次。這裡一定要使寫入的資料大於磁碟分割的容量,否則由於RAID的作用,資料會自動回復原有值。如下所示:

[root@localhost root]
# dd if=/dev/zero of=/dev/hda9 bs=100000000 count=10
dd: writing `/dev/hda9': No space left on device
2+0 records in
1+0 records out

2.用lsraid -a /dev/md0查看到/dev/hda9資料全為0

如下所示:

[root@localhost root]# lsraid -a /dev/md0
lsraid: Device "/dev/hda9" does not have a valid raid superblock
lsraid: Device "/dev/hda9" does not have a valid raid superblock
lsraid: Device "/dev/hda9" does not have a valid raid superblock
lsraid: Device "/dev/hda9" does not have a valid raid superblock
[dev   9,   0] /dev/md0   86391738.19BEDD09.8F02C37B.51584DBA online
[dev   ?,   ?] (unknown)  00000000.00000000.00000000.00000000 missing
[dev   3,  10] /dev/hda10 86391738.19BEDD09.8F02C37B.51584DBA good
[dev   3,  11] /dev/hda11 86391738.19BEDD09.8F02C37B.51584DBA good
[dev   3,  12] /dev/hda12 86391738.19BEDD09.8F02C37B.51584DBA spare

3.raidstop /dev/md0

4.raidstart /dev/md0

則/dev/hda9的資料恢複正常,說明RAID的資料校正功能已起作用。

在使用Linux的過程中,可以隨時建立RAID來提高資料的可靠性和I/O效能,甚至可以將多個硬碟剩餘的較小空間組合成一個較大空間。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.