歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

快速完成 RAID 配置

  如果你想實現一個 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-superblo



raiddev /dev/md0 raid-level 0 nr-raid-disks 2 persistent-superblo



Copyright © Linux教程網 All Rights Reserved