萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 如何實現Linux的軟件磁盤陣列(RAID)

如何實現Linux的軟件磁盤陣列(RAID)

class="21035"> ;;;如果你想實現一個;Linux;的軟件磁盤陣列(以下簡稱;RAID;或;raid),;那麼在開始前,;下面的這個最重要的網點是你應該首先去涉獵的:;

Linas;Vepsta;的;raid;主頁:;http://linas.org/linux/raid.html;

本文發表的時間是;1998年10月29日,;目前已有的文檔還不全,;比較混亂.;這篇文章就是;澄清一些當你在實現;raid0;和;raid1;時會遇到的問題.;(譯者注:;raid0;--;是指將數據散布在不同的硬盤上操作,;無冗余數據,;讀寫都可以並行操作,;速度快,;英文簡稱為;striping,;以下譯作"分散讀寫";;raid1;--;是指磁盤鏡像,;英文為;mirroring.);

我想實現基於分散讀寫模式(striping)的鏡像模式(mirroring).;分散讀寫模式具備優異;的讀寫性能,;而鏡像模式帶來備份和讀的性能增強.;

我使用一個;2.0.30;的內核,;實現了;raid0(striping).;然後我將內核升級到;2.0.35,;這下笑話開始了.;在同;raid0;做了一番爭斗後(譯者注:;可能未成功),;我開始處理;raid1.;然後,;你猜怎樣,;扔掉你所知道所有的;raid;知識,;從打草稿開始!;(因此)一個簡化工作;的好主意是,;首先使;raid0;能用,;之後增加;raid1.;故事是這樣的:;

工作於內核;2.0.30;下的;Raid0;(striping)
從;2.x;版本開始,;內核已經實現了線性和;raid0(striping);模式.;你必須重新編譯內核;以帶有多設備界面支持(multiple;devices).;我強烈建議將它編譯到內核中.;如果你是;使用模塊方式,;你將會吃盡苦頭.;
檢查是否多設備界面(multiple;devices)已經安裝.;dmesg;|more;然後檢查是否;存在;md;驅動器(md;driver)和;raid0;已經注冊(raid0;registered)的信息(想不起精確的;詞語;-;"夜太深";;-(;);

或敲入;cat;/proc/mdstat;查看你的;md;驅動器的狀態.;你應該看到;/dev/md0;到;/dev/md3;處於非激活狀態.;

奇怪的是,;內核工具;mdtools-0.35;通常並不隨銷售包提供.;那裡面有建立,;運行和使;raid;停止的工具.;

你在;Slackware;的銷售包中可以找到它(;大小為;23k;);

http://sunsite.unc.edu/pub/Linux/distributions/slackware/slakware/ap1/md.tgz;

下載到;/usr/local/src;然後:;


cd;/;
tar;-zxvf;/usr/local/src/md.tgz
它將把文件放在正確的位置.;
sbin/mdadd
sbin/mdcreate
usr/etc/mdtab
install/doinst.sh
usr/man/man5/mdtab.5.gz
usr/man/man8/mdadd.8.gz
usr/man/man8/mdcreate.8.gz
usr/doc/md/COPYING
usr/doc/md/ChangeLog
usr/doc/md/README
usr/doc/md/md_FAQ
通讀;README;文件(毫無疑問,;忽略警告們).;這份文檔極適合於內核版本;2.0.30;和;線性(linear)/raid0;模式.;Linux;日報(Linux;Journal)(1998年六月或七月刊)中有一篇精采的介紹怎樣實現;raid0(striping);的文章.;它增強了我的興趣.;
Linux;公報(LG);中有另一篇文章,;也有所幫助:;
http://www.ssc.com/lg/issue17/raid.html;

你應該在;fsck;-a;之前開始啟動;raid;陣列,;在;Slackware;中它(fsck)通常;位於;/etc/rc.d/rc.s;文件中,;而在;/etc/rc.d/rc.0;和;rc.6;中停止;raid;陣列.;(BTW:;既然在;slackware;中這兩個文件相同,;我們能不能做一個軟聯結,;然後只需;修改一個?);

為了檢查它是否工作,;敲入;cat;/proc/mdstat,;它(輸出的信息)將指示;md;設備的情況.;(/dev/md0;raid0;using;/dev/sda1;and;/dev/sdb1).;

測試,;測試,;再測試你的;raid.;關機,;上電,;看看它是否如你所願地工作.;

我曾做過有趣的拷貝,;使用;cp;-rap;開關將全部目錄結構拷入;raid;陣列中.;(測試完成)然後修改;/etc/fstab;以包括新的驅動器(指;raid).;

交換分區不需要分塊操作.;當一個優先級啟用時,;他們將自動這樣做.;閱讀;Software-RAID-mini-HOWTO;和傻瓜問題一段可知詳情.;這出乎意料地簡單.;

現在使用;UPS!
如果(運行中)掉電了,;你將失去你的;raid;和上面的所有數據!;你應該使用一個;UPS;後備電源.;UPS;的作用是讓你的系統在燈火管制或電源失敗時能夠保持運行一小段時間.;UPS;能夠在電源失敗時通過一個串口通知你的系統.;在後台,;有一個精靈程序在運行監控這個串口.;當它被通知電源失敗時,;它將在發出關機命令前等待一段預定時間;(通常是;5;分鐘).;如此的工作原理是如果;5;分鐘內還是無電,;那麼將持續很長時間.;
大多數;Linux;銷售包帶有基本的;UPS;電源精靈程序.;使用;"man;powerd";可以得到;更多信息.;這是一個簡單的精靈程序,;它在;/etc/inittab;中.;從根本上來說,;一個;啞;UPS,;只是在串口保持一個接力聯結.;powerd;檢測這個聯結是否已經斷掉.;一旦;聯結斷掉,;它將在預定時間後將;PC;關閉.;警告用戶,;並且向;root;發一封郵件.;

我使用一台;APC;智能;UPS,;它通過串口通訊.;有一個稱作;apcupsd;的卓越精靈如有;神助般地工作.;它在這兒.;請閱讀布告,;贊同作者,;他完成了一項優異工作;(作者的光榮!).;安裝工作如同魔法,;文檔也十分優秀.;

http://www.dyer.vanderbilt.edu/server/apcupsd/;

RAID0;基於;2.0.31;to;2.0.34
沒有嘗試過.;因為我直接從;2.0.30;升級到;2.0.35,;一個最新的穩定版本.;
RAID0;基於核心版本;2.0.35
mdtools;在我家中的機器上編譯地很順利(運行;2.0.30),;但在我的工作機上不能編譯;(已經升級到;2.0.35).;我不斷地得到一個關於;MD_Version;(記不住確切的名稱)沒有定義的錯誤.;經過大量撓頭的搜索,;我發現在;/usr/src/include/md.h;中有;md;驅動器;的版本號.;在版本;2.0.30;中,;它是;0.35;;而在;2.0.35;中它是;0.36.;如果你使用;"mdadd;-V";它將指示;mdadd;可以工作的;md;的版本號.;所以我取得了錯誤的;mdtools;版本.;這裡是正確版本的位置:;
ftp://ftp.kernel.org/pub/linux/daemons/raid/raidtools-0.41.tar.gz;

下載到;/usr/local/src;然後;

tar;-zxvf;raidtools-0.41.tar.gz
將生成一個新目錄;/usr/local/src/raidtools-0.41;
進入新目錄,;閱讀;INSTALL;文件,;然後;

../configure
我記不清之後是否必須做;make;和;make;install.;我不能復現;這一過程,;因為我已經為;raid;打了一個新補丁.;
你應該有一個新的;mkraid;和;mdadd;的運行文件(binary).;敲入;mdadd;-V;以;檢查是否你的運行碼已經更新了.;它應該顯示一些像;mdadd;0.3d;compiled;for;raidtools-0.41的信息.;然後閱讀;QuickStart.RAID;獲得最新信息.;對於;raid0,;比以前版本沒有多少改變.;

RAID1;基於內核;2.0.35
若想使用;raid1,;4;或;5,;你必須為內核打一個補丁,;它位於;
ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raid0145-19981005-c-2.0.35.tz;

拷貝到;/usr/src;directory,;將補丁解壓縮:;

tar;-zxvf;raid0145-19981005-c-2.0.35.tz
注意補丁將搜索;/usr/src/linux-2.0.35;目錄.;如果你將;2.0.35;的源碼安裝在目錄;/usr/src/linux;下,;你需要mv;/usr/src/linux;/usr/src/linux-2.0.35,;然後做一個符號聯結;ln;-s;/usr/src/linux-2.0.35;/usr/src/linux;
為了使用這個補丁,;進入目錄;/usr/src:;

patch;-p0;(在我的系統中有些地方小寫的;c;會變成大寫的;C;嗎?;也許在解壓後?);
你現在可以去重新編譯內核.;當你選擇多設備(選項)時,;你將看到有選擇;raid1,4和5.;依次步驟是;

make;menuconfig;(or;config;or;xconfig)
make;clean
make;dep
make;zImage
make;modules;(如果你使用了模塊)
make;modules_install
將新內核拷到你系統中適當的地方(/;或;/boot).;我建議你同時擁有一個無;raid;的內核;和一個有;raid;的內核.;你能夠通過修改;lilo.conf;來確定使用那一個內核啟動.;這根本;不困難,;盡管初看起來有些恐怖.;查看;/usr/lib/lilo;的例子和文檔.;(譯者注:;可能為;Slackware;中的目錄,;Redhat5.1;中無);
查看;dmesg;|;more;的輸出內容確定;md;驅動器已經裝載,;raid0;&;1;已經注冊.;敲入;cat;/proc/mdstat;看看你是否有了新的;md;驅動器.;你應該看到;16個;md;驅動器而不是;4;個.;

你將必須升級你的;raidtools.;mdadd,;/etc/mdtab;和;mdcreate;是舊的,;新工具應該是;raidstart,;/etc/raidtab;和;mkraid.;從這一點上來說,;(當前的)文檔的確是過時了.;

ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/raidtools-19981005-B-0.90.tar.gz;

下載到/usr/local/src;然後;


tar;-zxvf;raidtools-19981005-B-0.90.tar.gz
這將產生一個新目錄;/usr/local/src/raidtools-0.90.;進入這個目錄作;
../configure
又一次,;我記不起是否該接著做;make;和;make;install.;
一個較簡單的方式完成內核;2.0.35;下的;RAID0
使用兩個;scsi;設備;/dev/sda1;和;/dev/sdb1;完成一個;raid0;陣列的步驟:;
將;/dev/sda1;和;/dev/sdb1;分區,;讓他們有相同的塊大小.;
將分區的類型設為;0xfd.;這是用來讓新內核在啟動時自動識別;raid.;
按下面例子修改;/etc/raidtab;文件(隨;raidtools;提供的例子缺少一些重要的信息):;

#;Striping;example;
#;/dev/md0;using;/dev/sda1;and;/dev/sdb1

raiddev;/dev/md0
raid-level;0
nr-raid-disks;2
persistent-superblocks;1
nr-spare-disks;0
chunk-size;32
device;/dev/sda1
raid-disk;0
device;/dev/sdb1
raid-disk;1
敲入;mkraid;-f;/dev/md0;一定注意;-;閱讀錯誤信息,;明確方向!;
cat;/proc/mdstat;檢查輸出信息,;確定;md;設備是否正確地做好.;
使用;mke2fs;-c;/dev/md0;格式化新;raid;設備.;
產生一個安裝目錄(例如;/raidtest)以測試它是否工作.;
mount;/dev/md0;/raidtest; <
copyright © 萬盛學電腦網 all rights reserved