2007年5月7日 星期一

LPI心得筆記簿 ─ 硬碟規劃(RAID)

今年一月,跑去上了某電腦補習班有關於LPI的認證課程,花了不少的銀子,所以只好乖乖的去上課(全勤,唸書有這麼乖就好),之後一直忙於轉換工作的事情,總是覺得沒時間複習,所以就上來跟大家一起分享上課的心得,同時也在這地方與大家做個交流吧!如果有所遺漏之處還請各位不吝指教

前言:

1. 其實在上LPI之前,有先安排關於網路概論的課程,這裡不加說明(跳線就是當時老師說不用教的地方= =+),不過這跟大學課程中機算機概論的部份有許多雷同之處(除了ROUTE TABLE之外),需要的人還是回去翻翻家中已蓋滿灰塵的機概吧!

2.說明一下上課時所用的系統,使用FEDORA6(那時剛出約一個多月吧!),雖然說只是LINUX的一個分支,不過因為使用者較多,且社群的資料較多,硬體部份就略過了(補習班的硬體能夠多好呢?唉...),現在還有一股熱潮的UBUNTU當然也不可小看(因為有金主支持總是比較有利),不過因為使用模組不同(不知這說法有無不當UBUNTU為Debian、FEDORA為 Redhat),真的有需要的也可以去參考一下

安裝:

在安裝之前要先介紹一下硬體的規畫,在剛開始上手時,可以用防呆的安裝法,全部下一步(同時關閉防火牆及SELINUX),如果是要在實務上應用的主機,就要動點頭腦規畫

硬碟規畫:首先要先有RAID或是LVM的規畫概念,這裡先介紹RAID

RAID(Redundant Array of Independent Disks,俗稱為磁碟陣列),level有分為RAID0~6七種類型,不過一般常見的應用仍只有RAID 0、1和5三種

舉例來說:如果我們要存一份資料,其中包括了A、B、C、D四個資料的組合

RAID 0:需二個硬碟
分別把A、B和C、D分別存在不同的PARTITION中,特性是速度快,但無安全性,因為資料是分存在兩個不同的磁碟中(如果兩個PARTITION是在同個硬體磁碟區中則無意義),所以可以增進存取速度,但是其中一個硬碟如果毀損就會造成該資料無法存取

RAID 1:最少需二個硬碟
分別把A、B、C、D存在兩個不同的PARTITION中,特性是安全性高,但速度慢,因為是將資料同步存在兩個不同硬碟當中,故所需時間較久,所以也不能夠把兩份資料存在同一個硬體磁碟中,不然硬體壞了,資料受損機率也極高

RAID 5:最少需三個硬碟
意思類似將A、B、C和B、C、D及A、C、D分別存在三個不同硬體磁碟區中,特性是速度比RAID 1快、安全性較RAID 0好,因為只要三個其中一個硬碟毀損,我們還是可以利用剩下兩個讀取到完整的資料,但是建構成本較高(硬碟多一個)

PS:當RAID1和5的其中一個硬碟毀損時,需要一個新的硬碟來做為備援(Hot Spare),這個備援的硬碟也可以在一開始時就加入mdadm在建立raid的架構中,所以在本文後段的範例中,筆者已經直接把備援的硬碟,在建立raid時就直接加入(即時性
的考量)

在linux中的製作模組為mdadm,當準備好四個相同大小的硬碟後,以
# rpm -qa | grep mdadm(以rpm方式查詢是否具有此套件)

無:mdadm
# yum -y install mdadm (利用線上更新yum來安裝此套件)

有:mdadm
# uname -r(確認kernel 2.4以上版本才支援RAID)

建立RAID的使用指令

建立RAID 0:
# mdadm -Cv -l 0 /dev/md0 -n 2 /dev/hdc {8,9}
-C是指建立
-v是指察看過程
-l是指建立的屬於level 0、1或5
/dec/md0是指在linux中建立的裝置名稱為RAID 0
-n 2是指幾個RAID裝置屬於建立好的RAID 0
/dev/hdc {8,9}是指建立在/dev/hdc8/dev/hdc9兩個partition上

可利用--detail參數來觀看建立好的RAID 0(1、5)的資訊
# mdadm --detail /dev/md0(md1、5)

其中有chunk-size是指寫進一個partition的大小 ,例如RAID 0中把一個file同時寫進兩個或以上partition時,會把file分成多大寫進其中一個partition(系統記錄在/proc/mdstat)

格式化:
# mke2fs -v -b 4096 -R stride=16 /dev/md0(md後為數字0)
(-R stride=n來增加效能,因為chunk-size=block*stride,因此對於RAID 0來說可以增加效能,對於其它RAID不一定能增加效能,例:RAID 1)

掛載並使用
# mkdir /mnt/md0(建立/mnt/md0資料夾)
# mount /dev/md0 /mnt/md0(掛載/dev/md0至/mnt/md0)

解除RAID裝置
# umount /dev/md0(卸載/dev/md0)
# mdadm -S /dev/md0(參數-S會直接解除 /dev/md0上的RAID 0)

寫入/etc/fstab(開機時會載入的硬體設定檔)
# vi /etc/fstab(以vi編輯/etc/fstab設定檔)

最後一行加入
/dev/md0 /mnt/md0 ext2 default 1 2

(fstab欄位說明)
第一欄 實際的 device 名稱。
第二欄 對應到的目錄結構(mount point)。
第三欄 該分割區的檔案系統ext、ext2、msdos、iso9660、nfs、swap。
第四欄 在 mount 時的參數。
第五欄 在使用 dump 時是否記錄,不需要則輸入0。
第六欄 決定在開機時執行 fsck 的先後順序。

建立RAID 1(建立流程,並參考RAID 0之說明)
#mdadm -Cv --level=1 /dev/md0 -n 2 /dev/hdc8 /dev/hdc9 -x1 /dev/hdc10
-x:指定備用的硬碟,當其中一個毀損時會自動備援)
# mke2fs -j /dev/md0
# mount /dev/md0 /mnt/md0
# cp -a /bin /mnt/md0(copy /bin中的資料做測試)
# mdadm /dev/md0 -f /dev/hdc9 (測試/dev/hdc9壞掉時)
# mdadm -D /dev/md0

恢復/dev/hdc9
# mdadm /dev/md0 --remove /dev/hdc9
# mdadm /dev/md0 --add /dev/hdc9

建立RAID 5(建立流程,並參考RAID 0之說明)
# mdadm -C -l 5 /dev/md0 -n 3 /dev/hdc{8,9,10} -x 1 /dev/hdc11
(可加入-c128的參數,代表chunk-size為128)

這些就大略是RAID在Linux(Fedora)中的實作,如有興趣也可以自己實作一下,當然不用真的準備這麼多實體硬碟,可以在同個硬碟中割出4個相同大小的PARTITION來測試,等真的有這麼多實體硬碟時才能派上用場

不過這種軟體的RAID,效能上一定比不上動輒數萬元的硬體RAID備援來得高,但是對於小市民來說,也無非是種資料備援的手段之一(也要看是那種重要資料啦!)

PS:發現隨便整理一小點筆記就可以寫出來一堆,真害怕後面的路...

6 則留言:

  1. RAID 0:最少需要二個硬碟
    RAID 1:需要二個硬碟
    RAID 5:最少需三個硬碟
    RAID5如果是三顆硬碟所組成的話,會將所貯存的資料拆成兩份再將加上一份資料作XOR運算的一個值,且再平均寫入到所有的硬碟內,所以它會多佔一顆硬碟的空間,所以RAID5可以真的可用的空間就是
    N-1顆硬碟的空間。
    另外mdadm作raid0/5 不一定要有spare喔~~
    參考資料:http://zh.wikipedia.org/wiki/RAID

    回覆刪除
  2. bie:

    你說的這一點沒錯,這是raid架構中建立的規則,
    RAID 0:最少需要二個硬碟
    RAID 1:需要二個硬碟
    RAID 5:最少需三個硬碟

    這一點我可能沒有好好說明

    其實我在文中用”只有軟體RAID才有此要求”來帶過

    這是我的疏忽之處,多謝你的指正

    其實,我只是直接把我在實作過程中,比較"安全"的方式寫出來,因為在raid-1、5在其中一個partition毀損時,能夠即時利用spare的備源補上做rebuild的動作是很重要的(其實也是mdadm支援的功能之一)

    不過,你寫的raid0/5不一定要有spare...raid0可能就算有也沒有東西讓它rebuild吧?還是我想錯了?

    我文章中的說法似乎是變成在做mdadm時所必須的!你應該就是要指出這一點吧?

    多謝你的指較,我再回頭來修正一下!

    回覆刪除
  3. sorry 我打錯了是raid 1/5啦!!

    如果沒有spare的話就是要換上新的硬碟再去做rebuild,所以在換上新的硬碟之前是會風險且存取效能會變差。

    你文章中的說法似乎是變成在做mdadm時一定要有spare的!事實上我之前使用的經驗是不用的。

    回覆刪除
  4. 沒關係啦!筆誤是常有的啦!

    我知道手動換上新硬碟的狀況其實還有很多,就算是使用spare其實也有風險,例如:還未確認好之前就rebuild...反而更糟糕

    你說的沒錯,在原本設定時是不用加入spare那個的硬碟,我在文章中也修正過了!

    真的很感謝你的指正與建言呢!

    回覆刪除
  5. 我之前的系統有作soft raid,但現在無法開機,想救回硬碟中的資料,上網找到你的文章,但裏面並沒有談到回覆的方法,所以我把我的問題描述一下,希望您能提供我幫助,謝謝!!

    我的server是red hat linux 7.3
    兩顆scsi的硬碟
    在安裝時我使用內建的soft raid (raid 1)
    現在系統掛了,無法開機
    想把scsi的硬碟裝到另一台 red hat linux 7.3的機器讀出來
    但是我在dmesg中看到訊息如下

    ide-floppy driver 0.99.newide
    Partition check:
    hda: hda1 hda2 hda3 hda4 < hda5 hda6 hda7 >
    Floppy drive(s): fd0 is 1.44M
    FDC 0 is a post-1991 82077
    RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
    ide-floppy driver 0.99.newide
    md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
    md: Autodetecting RAID arrays.
    md: autorun ...
    md: ... autorun DONE.
    ....
    ....
    ....
    ....
    hdd: ATAPI 52X CD-ROM drive, 128kB Cache
    Uniform CD-ROM driver Revision: 3.12
    SCSI subsystem driver Revision: 1.00
    PCI: Found IRQ 11 for device 02:04.0
    sym53c8xx: at PCI bus 2, device 4, function 0
    sym53c8xx: setting PCI_COMMAND_PARITY...(fix-up)
    sym53c8xx: 53c875 detected with Tekram NVRAM
    sym53c875-0: rev 0x3 on pci bus 2 device 4 function 0 irq 11
    sym53c875-0: Tekram format NVRAM, ID 7, Fast-20, Parity Checking
    scsi0 : sym53c8xx-1.7.3c-20010512
    blk: queue cea95618, I/O limit 4095Mb (mask 0xffffffff)
    Vendor: FUJITSU Model: MAN3367MP Rev: 0110
    Type: Direct-Access ANSI SCSI revision: 03
    blk: queue ce52b418, I/O limit 4095Mb (mask 0xffffffff)
    sym53c875-0: detaching ...
    sym53c875-0: resetting chip
    scsi : 0 hosts left.
    parport0: PC-style at 0x378 [PCSPP,TRISTATE]
    SCSI subsystem driver Revision: 1.00
    PCI: Found IRQ 11 for device 02:04.0
    sym53c8xx: at PCI bus 2, device 4, function 0
    sym53c8xx: 53c875 detected with Tekram NVRAM
    sym53c875-0: rev 0x3 on pci bus 2 device 4 function 0 irq 11
    sym53c875-0: Tekram format NVRAM, ID 7, Fast-20, Parity Checking
    scsi0 : sym53c8xx-1.7.3c-20010512
    blk: queue cea95618, I/O limit 4095Mb (mask 0xffffffff)
    Vendor: FUJITSU Model: MAN3367MP Rev: 0110
    Type: Direct-Access ANSI SCSI revision: 03
    blk: queue ce3d9018, I/O limit 4095Mb (mask 0xffffffff)
    sym53c875-0: detaching ...
    sym53c875-0: resetting chip
    scsi : 0 hosts left.

    看起來scsi應該有抓到,但想mount不知該如何下指令

    我以前系統裏面的df 如下
    /dev/md4 1003960 94528 858432 10% /
    /dev/md2 124323 8953 108951 8% /boot
    /dev/md0 13100784 4669592 7765704 38% /home
    none 257216 0 257216 0% /dev/shm
    /dev/md1 13100720 10559788 1875448 85% /usr
    /dev/md3 5036160 1734036 3046300 37% /var

    現在想將 /var 裏面的資料備份出來
    我下底下的指令
    mkdir /mnt/md0
    mount -t ext3 /dev/md3 /mnt/md0

    出現如下的錯誤
    mount: wrong fs type, bad option, bad superblock on /dev/md3,
    or too many mounted file systems
    (could this be the IDE device where you in fact use
    ide-scsi so that sr0 or sda or so is needed?)

    不知到底要何下指令,如何將資料救出

    回覆刪除
  6. RICHARD你好!

    首先,我要先跟你說聲sorry,因為我沒有玩過scsi介面的hd,所以不敢說一定瞭解...,不過我還是根據你提供的資料給你點方向。

    第一:你有確定你的scsi的硬碟有正確的被抓到嗎?(看一下fdisk -l)

    第二:你把舊的那顆hd拿到另一台 red hat linux 7.3的機器上,兩台的配置方式都一樣?(而且排列順序也都相同?例:到新機器上一樣是抓md3?)

    第三:根據你提供的錯誤訊息~
    出現如下的錯誤
    -----------------------------------
    mount: wrong fs type, bad option, bad superblock on /dev/md3,
    or too many mounted file systems
    (could this be the IDE device where you in fact use
    ide-scsi so that sr0 or sda or so is needed?)
    -----------------------------------

    如果你確定有抓到md3(我印象中scsi不是會使用sdx嗎?其實錯誤訊息的最後一句就是要提醒你這個),有可能就是superblock毀損,至於復原的方式就是用fsck來試著修復。(參考 --> http://www.lpi-tw.org:88/u8/lpi-china.org/bbs/archiver/?tid-3179.html。來做修復的動作)

    最後一個可能性,就是你搬去新的那一台電腦中的硬碟也割了為數不少的partition(還是主要分割區),所以當你要加上你拔過去想救資料的這個scsi hd時,已經超過了最多只能四個主要分割區的原始限制,造成你mount不上去。

    不然你可以在mount時加上-v的參數,看它是在那個階段發生錯誤。

    以上是我的小小建議,希望對你有所幫助,如果你救援成功的話,也歡迎你留言發表你的救援過程!謝謝。

    回覆刪除