Linux Software raid

software RAID 笔记
===========================================================

1,software RAID Configuration
Create and define RAID devices using mdadm
mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sda1 /dev/sdb1 /dev/sdc1

-l: raid级别
-n: 硬盘数
-x: 热备份硬盘数

format each RAID device with a filesystem
mke2fs -j /dev/md0

test the RAID devices
mdadm allows you to check the status of your RAID devices
mdadm --detail /dev/md0


2,software RAID testing and recovery
simulating disk failures
mdadm /dev/md0 -f /dev/sda1
(模拟sda1硬盘坏 )

recovering from a software RAID disk failure
replace the failed hard drive and power on
reconstruct partitions on the replacement drive

增加新硬盘
mdadm /dev/md0 -a /dev/sda1
删除硬盘
mdadm /dev/md0 -r /dev/sda1

mdadm,/proc/mdstat,and syslog messages


例子:
1,准备的分区信息
/dev/sda5 1864 1988 1004031 83 Linux
/dev/sda6 1989 2113 1004031 83 Linux
/dev/sda7 2114 2238 1004031 83 Linux


2,建立阵列
[root@tonykorn97 ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sda{5,6,7}
mdadm: /dev/sda5 appears to contain an ext2fs file system
size=1004028K mtime=Sun May 18 06:03:36 2008
Continue creating array? y
mdadm: array /dev/md0 started.

此时fdisk 可以查看到/dev/md0分区
[root@tonykorn97 ~]# fdisk -l
...
Disk /dev/md0: 1027 MB, 1027997696 bytes
2 heads, 4 sectors/track, 250976 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md0 doesn't contain a valid partition table


3,格式化分区并挂载
[root@tonykorn97 ~]# mkfs.ext3 /dev/md0
...
[root@tonykorn97 ~]# mkdir /data
[root@tonykorn97 ~]# mount /dev/md0 /data

4,查看当前raid信息
[root@tonykorn97 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jul 13 10:15:49 2008
Raid Level : raid1
Array Size : 1003904 (980.54 MiB 1028.00 MB)
Device Size : 1003904 (980.54 MiB 1028.00 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jul 13 10:17:27 2008
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

UUID : 95695625:471aa8d7:1d74ab8c:1224f36e
Events : 0.2

Number Major Minor RaidDevice State
0 8 5 0 active sync /dev/sda5
1 8 6 1 active sync /dev/sda6

2 8 7 - spare /dev/sda7
[root@tonykorn97 ~]#


4,模拟一个硬盘坏
[root@tonykorn97 ~]# mdadm --fail /dev/md0 /dev/sda5
mdadm: set /dev/sda5 faulty in /dev/md0

此时raid的状态
[root@tonykorn97 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jul 13 10:15:49 2008
Raid Level : raid1
Array Size : 1003904 (980.54 MiB 1028.00 MB)
Device Size : 1003904 (980.54 MiB 1028.00 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jul 13 10:20:03 2008
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 1
Spare Devices : 1

Rebuild Status : 41% complete

UUID : 95695625:471aa8d7:1d74ab8c:1224f36e
Events : 0.4

Number Major Minor RaidDevice State
2 8 7 0 spare rebuilding /dev/sda7
1 8 6 1 active sync /dev/sda6

3 8 5 - faulty spare /dev/sda5
[root@tonykorn97 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda7[2] sda6[1] sda5[3](F)
1003904 blocks [2/1] [_U]
[============>........] recovery = 64.6% (649344/1003904) finish=0.2min speed=20946K/sec

unused devices: <none>
[root@tonykorn97 ~]#

阵列用备用盘代替坏掉硬盘后的状态:
[root@tonykorn97 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jul 13 10:15:49 2008
Raid Level : raid1
Array Size : 1003904 (980.54 MiB 1028.00 MB)
Device Size : 1003904 (980.54 MiB 1028.00 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jul 13 10:20:53 2008
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0

UUID : 95695625:471aa8d7:1d74ab8c:1224f36e
Events : 0.6

Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 6 1 active sync /dev/sda6

2 8 5 - faulty spare /dev/sda5
[root@tonykorn97 ~]#


移出这个出问题的磁盘:
[root@tonykorn97 ~]# mdadm --remove /dev/md0 /dev/sda5
mdadm: hot removed /dev/sda5
[root@tonykorn97 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jul 13 10:15:49 2008
Raid Level : raid1
Array Size : 1003904 (980.54 MiB 1028.00 MB)
Device Size : 1003904 (980.54 MiB 1028.00 MB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jul 13 10:23:11 2008
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : 95695625:471aa8d7:1d74ab8c:1224f36e
Events : 0.8

Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 6 1 active sync /dev/sda6
[root@tonykorn97 ~]#


添加硬盘
[root@tonykorn97 ~]# mdadm -a /dev/md0 /dev/sda5
mdadm: added /dev/sda5
You have new mail in /var/spool/mail/root
[root@tonykorn97 ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jul 13 10:15:49 2008
Raid Level : raid1
Array Size : 1003904 (980.54 MiB 1028.00 MB)
Device Size : 1003904 (980.54 MiB 1028.00 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sun Jul 13 10:23:45 2008
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

UUID : 95695625:471aa8d7:1d74ab8c:1224f36e
Events : 0.8

Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 6 1 active sync /dev/sda6

2 8 5 - spare /dev/sda5
[root@tonykorn97 ~]#



《Linux的Software Raid》练习题

上一篇 / 下一篇  2008-02-13 06:05:08 / 个人分类:LINUX系统

g d9p"anjO01)查看本系统是否支持mdstatLUPA开源社区zGBT B'T`n

Z*Z x@yi"dN0参考答案:

S _./H4A1y0

n)S ^ C)B7?4~6B0cat /proc/mdstat
或lsmod | grep md
#U M*X:y�|0Ur0

-Yw'G~/h#g'n O%H0 LUPA开源社区�DQ%VQ sc!}&p

LUPA开源社区&dkUo&y$b9E+c y
2)在/dev/md0上创建raid1,指定每个条带单元的大小为32,设备为sdb1和sdb2

*r5W nM%n-H&hp0

U7Fi+{^z0参考答案:
mdadm -C /dev/md0 -l 0 -c 32 -n 2 /dev/sdb1 /dev/sdb2
LUPA开源社区I%gK;y5yx

9e#p#i&J(Wt-?GE!y0

+/C9cT O!E0
3)查看创建的结果
YQ%e6/]`'pB)^'a0LUPA开源社区f4o;}^/D,@

LUPA开源社区3D:ztN!n0pm

参考答案:
cat /proc/mdstat
LUPA开源社区[-S/S|#d n]

Y8W;IwW$JDnl0

P8KCg/^0LUPA开源社区5E'gg*`T{i
4)格式化md0,在根目录建立raiddata目录,并将md0挂载到raiddata目录下
LUPA开源社区;Z7MV~|

b)E_"s}*RW0参考答案:
mkfs -t ext3 /dev/md0
mkdir -p /raiddata/
mount /dev/md0 /raiddata/
df -h
LUPA开源社区_PP[,//Gr(Wu&enD'Kj]rI$h&V0"d h/Si8sR0LUPA开源社区l B%kh{eDNcvLUPA开源社区-r)g#~ K a^3T@

,L1//O"/[yXX5|+`0
5)查看md0的详细资讯
@RU"oD7sN6Nl0LUPA开源社区Y6^I5J*lqu

b2d^*T[2bv0参考答案:
mdadm -D /dev/md0
LUPA开源社区/0nY%~5pYLv

f5o+JG4C5j0

$z)M],y:`sgEv0
6)查看sdb1和sdb2的详细资讯
9cSa~`5G([0Y0

4K3j;X0{h{#C8{0 LUPA开源社区J.EK+Z/

参考答案:
mdadm -E /dev/sdb1
mdadm -E /dev/sdb2
LUPA开源社区GW/xV_+g$~iL%U {N4h9Wv[wbj0LUPA开源社区t,i(?/`,W^NT-nk

KS&n%iOQ!BwH.?0
7.1)停止md0
7.2)查看/proc/mdstat
7.3)再次启动md0,并查看/proc/mdstat
7.4)卸载/raiddata目录,并停止md0
f7TDjAAo0K�r B6RY5{U�/0!{,Hc?�l/^ yx3E0LUPA开源社区V?5F@�Wg{2Te

.A:a k-y"P4~0

3Z2l(Sk9G1nc0参考答案:
mdadm -S /dev/md0
cat /proc/mdstat
mdadm -A /dev/md0 /dev/sdb1 /dev/sdb2
cat /proc/mdstat
umount /dev/md0
mdadm -S /dev/md0
G_�{J!e#B0n�_:h�oQ8N0LUPA开源社区_$G�[1vQ;d9gR'kXh;r Oz@0 c`F6UM8Wh7HEbV�~0LUPA开源社区IF,^)Y&pELUPA开源社区$R+W&v];b m

g s3KC.B0
8.1)用fdisk增加一个磁盘分区
8.2)在md0上将sdb1,sdb2做成raid1,用sdb3做hotspace盘,指定每个条带单元的大小为128
8.3)重新格式化md0,并将其挂载到/raiddata目录上,用df查看空间及设备
f4WW#f-M/k;~0]E v j-XNz0LUPA开源社区%hsmTNJ*]:t

7X%G u6Egd�b0 LUPA开源社区e!~5o /kN%y

参考答案:
fdisk /dev/sdb
mdadm -C /dev/md0 -l1 -c 128 -n2 -x1 /dev/sdb1 /dev/sdb2 /dev/sdb3
mkfs -t ext3 /dev/md0
mount /dev/md0 /raiddata
I?ou(fp#Q O0+b,zoQ1g0LUPA开源社区M gG{^LUPA开源社区jkl.P2z8f7u{

{!J6__{}&}2[4aEDm0 LUPA开源社区.@ |w#R7?2["E#j


9.1)将md0中的sdb1重置成fail
9.2)将md0中的sdb1移除
9.3)在md0中的添加一块磁盘分区sdb1
9.4)卸载/raiddata目录,并停止md0
7J~1N e4d[k ^3Ch5G0LUPA开源社区k$eh3Y8xuLUPA开源社区&Ev%I�r0M1Q0SJ;kJ$]z6w7`fT0

/j/V.G:Y{T0 LUPA开源社区�h�mi)C4kG

参考答案:
mdadm /dev/md0 -f /dev/sdb1
cat /proc/mdstat
mdadm /dev/md0 -r /dev/sdb1
mdadm /dev/md0 -a /dev/sdb1
umount /dev/md0
mdadm -S /dev/md0
5nBSrt] cQ0g3Di4og:~;TYa$H0LUPA开源社区;w,i9B(} y`p CI2X.~�HDM'R.o0;hp4X"h G%G,T0LUPA开源社区9~])f7TN[E

1ps~#/�H0/c0

;{JC;_W3v|0LUPA开源社区�f zia~"eT:S+V0/!BG
10.1)增加一个磁盘分区
10.2)同步分区表
10.3)在md0上创建由三个磁盘和一个hotspace组成的raid5,
10.4)格式化md0,并挂载md0到/raiddata目录
g9] _2D}]xaBM;@b0LUPA开源社区9HnzzC2cU0S~7u @ RLUPA开源社区8O+p;VJ*y5q|8NLUPA开源社区Qp^k5o~T)DC

LUPA开源社区/G1S y K:Jv.|

参考答案:
fdisk /dev/sdb
partprobe
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb5
mkfs -t ext3 /dev/md0
mount /dev/md0 /raiddata
df -h
umount /dev/md0
mdadm -S /dev/md0
LUPA开源社区K'b'n9y'GS5^OLUPA开源社区8L$bQlT$FLUPA开源社区�cVY-j%?%m*b4V1S:OLUPA开源社区l4K"c PY v8f6lv {|p5^/LUPA开源社区CEM+P&qVLUPA开源社区j(vIeR.pE,[G!eT4RSsZ0(]M"W!I&m d2D4t:h0

1n2P s6G(s�s0 LUPA开源社区's)}~ ~"W8?w�KF

LUPA开源社区}_3bS7n6T
11.1)在md0上用sdb1和sdb2做raid1
11.2)在md1上用sdb3和sdb5做raid1
11.3)在md2上用md0和md1做raid0
11.4)格式化md2,并挂载md2到/raiddata目录,最后查看分区空间
4m"d^4F-~p0LUPA开源社区:B f(M.LoQj)[*GO#PD3]|-]'Q0

BS![9U(o0

rA(gv/0mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdb2
mdadm -C /dev/md1 -l1 -n2 /dev/sdb3 /dev/sdb5
mdadm -C /dev/md2 -l0 -n2 /dev/md0 /dev/md1
mkfs -t ext3 /dev/md2
mount /dev/md2 /raiddate
LUPA开源社区(P hnA:L;{)aLUPA开源社区9F(]a}e0A2s e)iIC;IQD`}U)N+A0Ra(ker5aQ`:?0LUPA开源社区X'UQ5N+WW




我想大家也聽過RAID 吧! 它能夠保護你的資料, 或是增加讀取的效能,或是把數個硬碟結合在一起。正如大家所知道RAID 也有Hardware RAID Software RAID 之分。Hardware RAID 是透過硬體的支援令OS 認為它是一個device。而Software RAID 則是利用OS 的功能來模擬RAID。由於在Linux 下支援的RAID 卡實在不多, 所以在Linux 下要用IDE RAID 便只能用Software RAID 的方法了。

 

RAID 主要分為Linear RAID 0 to 5 各種Level 我想大家也很清楚其分別吧, 所以只會簡介一下 Linear mode 是會把2 個或以上的Harddisk 連起來, 寫完一個再寫一個。RAID-0 Linear 差不多, 但資料會同時寫在那數個harddisk 上。好處是能夠增進讀寫效能,壞處則是只要其中一個harddisk 有問題則整個RAID-0 partition 的資料也會不見了(~ 筆者家中的電腦舊harddisk 壞了, 所有資料全部失去.. 但和RAID-0 無關 ^^) RAID-1 則會把資料重複寫進harddisk 好處當然是能夠保護資料, 即使一個harddisk 有問題另一個仍然會保留了應有的資料。 壞處便是效能可能會下降。

至於RAID4 5 都必須有3harddisk 以上才能執行。 它們在儲存資料時會同時儲存一寫計算出來的資料。那麼3harddisk 中其中一個有問題時便能夠靠那寫特點計算的資料重新建立數據。4 5 的不同之處在於,RAID-4 會把所有計算出來資料存儲在一個 harddisk 上, 但如果所有harddisk 均同速的話那便會拖慢整個RAID-4 partition。而 RAID-5 則會把計算出來的資料分開。

值得一提的是在同一RAID partition 內的harddisk 最好速度一樣, 大小也一樣。除了 Linear mode 外其他level RAID 在使用不同速度和大小的 harddisk時都可能會令到效能下降。

另外在RAID-45 中我們常常會加進一個spare disks spare disks 在平常是不會被讀寫的,只有在其中一個harddisk fail spare disks 才會代替原有harddisk 的功能。

最後, Swap parition 是不需要RAID 的,因為linux kernel 本身已經能夠同時控制多個 swap parition 的存取來增進效能了。

Kernel Setting

Linux 中設定Software RAID 其實是十分簡單的,首先你必需重新compile 一個support RAID kernel。最新的kernel 2.4.x 已經內建RAID support 了。

你必需要enable 以下的RAID 選項:

Multidevice support ->

 

Multiple devices driver support (RAID and LVM) -- y

RAID support -- y

Linear (append mode) -- y (如果你用linear mode)

RAID-0 (striping) mode -- y (如果你用RAID - 0)

RAID-1 (mirroring) mode -- y (如果你用RAID - 1)

RAID-4 /RAID-5 mode --y (如果你用RAID 4 5)

以上的選項如果你的RAID partition 將會是root paritition 的話請必定要選y 而不是 compile modules。但如果不是的話(例如只有/home RAID paritition),那用modules 也無問題。

然後compile kernel 也不用教吧 ^^

make dep;make bzImage;make modules;make modules_install

設定RAID tools

現在reboot 一下, 看看有沒有問題, 沒有的話便要裝raidtools 了多數的distribution 也附有raidtools 的, 如果沒有的話, debian 的請安裝raidtools2

apt-get install raidtools2

RPM 的話便自己到rpmfind.net 下載了並安裝 ,或到ftp 下載sources compile~ (對不起~ 筆者也中了Debian ^^)

完成安裝了嗎? 那麼便要設定 /etc/raidtab 了,現在你應該沒有這個file 的,但mkraid 預設是會讀取這個設定檔。

Linear mode 的範例設定檔:

raiddev /dev/md0               <--device

       raid-level       linear              <--Raidlevel linear

       nr-raid-disks      2            <--會被加進partition 的總parition

       chunk-size       32          

       persistent-superblock       1

       device            /dev/hde1       <--0parition

       raid-disk  0

       device            /dev/hdf1       <--1parition

       raid-disk  1

至於chunk-size persistent-superblock 是什麼呢? chunk-size 是指寫進單一個 partition 的大小, 例如在RAID-0 中把一個file同時寫進兩個或以上parition 時, 會把 file 分成多大才寫進一其中一個partition 呢? (總不能1 bit 寫在這, 1bit 寫在那吧) chunk-size linear mode 中也許沒意義, 但在其他level RAID-0 對效能是會有影響的。至於persistent-superblock 加上許是為了令kernel 在開機時能直接detect 到那 partition

RAID-0 的範例設定檔:

raiddev /dev/md0

       raid-level 0

       nr-raid-disks      2

       chunk-size       32

       persistent-superblock       1

       device            /dev/hde1

       raid-disk  0

       device            /dev/hdf1

       raid-disk  1

RAID-1 的範例設定檔:

raiddev /dev/md0

       raid-level 1

       nr-raid-disks      2

       nr-spare-disks    1            <-- 還記得剛才說過的spare-disks ?

       chunk-size       4

       persistent-superblock       1

       device            /dev/hde1

       raid-disk  0

       device            /dev/hdf1

      



Linux Software RAID 1 實作

http://cha.homeip.net/blog/archives/2007/12/linux_software.html

  • 於單顆硬碟的系統加上另一顆硬碟, 做成 Software RAID 1
  • 狀況測試:
    • 指令熱插拔
    • 摘除一顆硬碟
    • 掛回摘除的硬碟
    • 摘除其中一顆硬碟, 以另一顆全新硬碟取代
  • 取消 Software RAID 1, 回到最原始的單顆硬碟環境

環境

  • Fedora Core 6 (on VMware Server)
  • /etc/sysconfig/selinux → SELINUX=disabled
  • fdisk -l
Disk /dev/sda: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 456 3662788+ 83 Linux
/dev/sda2 457 521 522112+ 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

(第二顆硬碟是空的, 尚未分割磁區)

操作步驟

#安裝所需工具
yum -y install mkinitrd mdadm

#將第一顆硬碟的磁碟分割表複製給第二顆硬碟
sfdisk -d /dev/sda | sfdisk /dev/sdb

fdisk -l

Disk /dev/sda: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 456 3662788+ 83 Linux
/dev/sda2 457 521 522112+ 82 Linux swap / Solaris

Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 456 3662788+ 83 Linux
/dev/sdb2 457 521 522112+ 82 Linux swap / Solaris

fdisk /dev/sdb

Command (m for help): t
Partition number (1-4):
1
Hex code (type L to list codes):
fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-4):
2
Hex code (type L to list codes):
fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): w

#清除 RAID superblock
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2

#Fedora Core 6 預設只有 /dev/md0, 但我們有兩個 partition, 所以手動再建一個 md1
mknod /dev/md1 b 9 1

#建立 RAID 1
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

#查看 RAID 狀態: RAID 1 已經建立, 目前只有 /dev/sdb 掛入 ARRAY
cat /proc/mdstat

Personalities : [raid1] 
md1 : active raid1 sdb2[1]
522048 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
3662720 blocks [2/1] [_U]

unused devices: <none>

#產生 RAID 設定檔
cp /usr/share/doc/mdadm-2.5.4/mdadm.conf-example /etc/mdadm.conf
mdadm --examine --scan >> /etc/mdadm.conf

#格式化第二顆硬碟的磁區, 並將第二顆硬碟的 root ( / ) 掛載到 /mnt/md0
mkfs.ext3 /dev/md0
mkswap /dev/md1
mkdir /mnt/md0
mount /dev/md0 /mnt/md0

#修改相關設定, 準備以第二顆硬碟 (/dev/md0) 開機
vi /etc/fstab

/dev/md0/ext3defaults11
/dev/md1swapswapdefaults00

vi /boot/grub/menu.lst

default=0
timeout=5
title Fedora Core (2.6.18-1.2798.fc6)
root (hd
1,0)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=
/dev/md0
initrd /boot/initrd-2.6.18-1.2798.fc6
-raid.img

#將 Software RAID Module 載入 initrd.img
mkinitrd --preload raid1 /boot/initrd-`uname -r`-raid.img `uname -r`

#將第一顆硬碟裡的資料全數複製到第二顆硬碟
cp -ax / /mnt/md0

#將 GRUB 寫入第二顆硬碟
grub

grub>root (hd1,0)
grub>
setup (hd1)
grub>
quit

reboot

#將第一顆硬碟的 Partition Type 改為 Linux RAID
fdisk /dev/sda

Command (m for help): t
Partition number (1-4):
1
Hex code (type L to list codes):
fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-4):
2
Hex code (type L to list codes):
fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): w

#把第一顆硬碟的磁區加入 RAID
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md0 /dev/sda1

#監看 RAID Recovery 的進度
watch cat /proc/mdstat

完成後↓

Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
3662720 blocks [2/2] [UU]

unused devices: <none>

#修改 GRUB root device
#其實完成 RAID 1 後, 不管是 root (hd0,0) 還是 root (hd1,0) 都能開機, 但改成 hd0 較好, 因為若其中有一顆掛點, 只剩一顆硬碟開機的時候, 那顆硬碟就是 hd0 啦!

vi /boot/grub/menu.lst

default=0
timeout=5
title Fedora Core (2.6.18-1.2798.fc6)
root (hd
0,0)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/md0
initrd /boot/initrd-2.6.18-1.2798.fc6-raid.img


狀況測試

  1. 指令熱插拔:
    mdadm --manage /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1
    mdadm --add /dev/md0 /dev/sdb1
    watch cat /proc/mdstat 觀察 recovery 進度
     
  2. 摘除其中一顆硬碟, 開機後一樣可以正常運作
     
  3. 掛回剛剛摘除的硬碟, 開機後查看 /proc/mdstat, 把缺少的那顆再掛載進來:
    例如:
    mdadm --add /dev/md0 /dev/sda1
    掛載後,
    cat /proc/mdstat 可看到系統正在進行 recovery
     
  4. 摘除其中一顆硬碟, 以另一顆全新硬碟取代 (新硬碟當第二顆), 開機後執行:
    sfdisk -d /dev/sda | sfdisk /dev/sdb
    mdadm --add /dev/md1 /dev/sdb2
    mdadm --add /dev/md0 /dev/sdb1
    watch cat /proc/mdstat 靜候 recovery 作業完成


附錄: 取消 RAID 1, 回到最原始的單顆硬碟環境

#設定以第二顆硬碟開機
vi /boot/grub/menu.lst

default=0
timeout=5
title Fedora Core (2.6.18-1.2798.fc6)
root (hd
1,0)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=
/dev/sdb1
initrd /boot/
initrd-2.6.18-1.2798.fc6.img (不是 -raid 那個)

vi /etc/fstab

/dev/sdb1/ext3defaults11
/dev/sdb2swapswapdefaults00

#刪除 Software RAID 設定檔
rm /etc/mdadm.conf

#所有的 partition 都改回 83 (linux)、82 (swap)
fdisk /dev/sda && fdisk /dev/sdb

reboot

#清除 RAID superblock
mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2

mount /dev/sda1 /mnt

chroot /mnt

#改回以第一顆硬碟開機
vi /etc/fstab

/dev/sda1/ext3defaults11
/dev/sda2swapswapdefaults00

vi /boot/grub/menu.lst

default=0
timeout=5
title Fedora Core (2.6.18-1.2798.fc6)
root (hd
0,0)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=
/dev/sda1
initrd /boot/initrd-2.6.18-1.2798.fc6.img

exit


參考資料

LUPA开源社区[U7qA5qg'G(P'[


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值