| 最初にRAIDでインストール出来なかった場合に、あとから追加でRAIDを構築する方法です。失敗すると大きな痛手ですので、十分に注意して実施してください。
免責事項:このページを見て同じようにやったにも関わらず、失敗して復旧出来ないなどのいかなる損害が発生した場合に私は責任を負えません。必ずご自身の責任において実施するようにして下さい。
今回のトラブル:kernelとraidtoolsを最新版にアップしないで、CDでインストールしたままでやったら失敗しました。その時の記録はこんな感じ・・・
再起動して元の/dev/hda1から立ち上げてみます。すると、、、 starting
up
RAIDd
devices
:
md0(skipped) なんて表示されて、起動時にraidの部分はskipされている? rootでログインしてmdstatの状態を見ると確かに動いていない。試しに
#
raidstart
/dev/md0
をすると動く。 仕方なしにもう一度 mkraidをすることにした。いったん
#
raidstop
/dev/md0
してあげて、もう一度上記のRAIDを作るからやり直してみた。すると、、、 前回とは違うメッセージが出てきた。さっきはmd0:
no
spare
disk
to
reconstruct
array!
--
continuing
in
degraded
modeと警告が出ていたのがない。もしかしてこれか! 続けて作業してみる。が、しかし、、、 結果は同じこと。/var/log/dmesgを見てみるとことごとく失敗している。他にもいろいろと試したけどダメなので、とりあえずkernelとかみんなアップデートしてからまたやり直してみることに。どこのページもうまく行っている様なんだけどなぁ・・・ やっぱり因縁のWindowsからのディスク流用が問題なのかなぁ・・・ で、up2dateでkernelも含めてアップデートしてみて再起動すると、なんとmdで引っかからずに動いてる! はまってしまいました
苦笑 念のためにもう一度fdiskからやり直して見ましょう。今回はうまく行きました。 参考までに警告が出ていても問題ないです。
以下手順
新しいディスクをセカンダリーマスターに繋ぐ。ここは/dev/hdcと呼ばれます。
電源をいれてLinuxを立ち上げてrootでログインします。
hdaの状態を記録する。 下の表を埋めておくと便利です。
#
fdisk
/dev/hda で表の領域以降を記録します。
| 決める |
#mount |
|
|
|
|
|
|
|
| RAID番号 |
マウント先 |
領域 |
ブート |
始点 |
終点 |
ブロック |
ID |
システム |
| md0 |
/boot |
/dev/hda1 |
* |
1 |
13 |
104391 |
83 |
Linux |
| md1 |
/ |
/dev/hda2 |
|
14 |
77 |
514080+ |
83 |
Linux |
| md2 |
/usr |
/dev/hda3 |
|
78 |
332 |
2048287+ |
83 |
Linux |
| |
|
/dev/hda4 |
|
333 |
788 |
3662820 |
5 |
拡張領域 |
| md3 |
/var |
/dev/hda5 |
|
333 |
496 |
1317298+ |
83 |
Linux |
| md4 |
/home |
/dev/hda6 |
|
497 |
628 |
1060258+ |
83 |
Linux |
| md5 |
/user/local |
/dev/hda7 |
|
629 |
755 |
1020096 |
83 |
Linux |
| md6 |
swap |
/dev/hda8 |
|
756 |
788 |
265041 |
82 |
Linuxスワップ |
#
mount
で上記にマウントした場所を付け加える
hdcをfdiskする。 上記表の順番で領域を確保します。サイズは同じか大きくとることが必要。同じディスクならサイズは同じになるはずです。大きく取った場合には最初にあったディスクに戻すことは出来なくなります。hdaを最後にRAID取り込む時には、hdcで追加したのと同じ大きさのものかそれ以上のものを用意して下さい。
#fdisk
/dev/hdc
- p
コマンドで現在の状態を確認。新品なら何もないはず。もし何かのHDDを流用する場合には、ここで
d
コマンドですべて削除する
- n
コマンドでhdc1から作成する。hdc1-hdc3までは基本領域で確保すること。p
で番号、最初のシリンダがhdaの表の始点、終点シリンダが終点。3まで繰り返します。
- hdc4は拡張
e
で終わりまで確保します。ここで追加したHDDがhdaより大きい場合にhdaの最後の値(この例では788)で取ってしまうと残りがまったく使えないのでもったいないです。かならず最後まで取りましょう。
- hdc4を拡張領域で確保したら、続けて
n
コマンドでhdc5以降を確保します。これ以降は番号は自動でつきます。順番を間違えないように。
- 余っている領域があるようでしたらここで更に確保します。今回はhdc9。
- すべて確保したら、p
コマンドで確認します。/dev/hdaに対応する領域の順番とブロック数が同じか大きいことをしっかり確認して下さい。この時点ではシステムはLinuxになっています。
- 続いて
a
コマンドでブートパーティションを指定します。今回の場合には/dev/hdc1です。
- t
コマンドでhdc4と余りのhdc9を除くすべてのデバイスのシステムをsorfware
RAIDに変更します。領域1から順番に行います。16進コードは
fd
です。hdc4を選んでしまっても変更できないので安心して下さい。
- p
コマンドでもう一度確認しましょう。間違っていたら
d
コマンドですべて削除してもう一度やり直すほうがいいでしょう。OKでしたら
w
コマンドで書き込みます。
RAID設定ファイルを新たに作成する
#pico
/etc/raidtab
raiddev
/dev/md0
raid-level
1
nr-raid-disks
2
chunk-size
32k
persistent-superblock
1
nr-spare-disks
0
device
/dev/hdc1
raid-disk
0
device
/dev/hda1
failed-disk
1
raiddev
/dev/md1
raid-level
1
nr-raid-disks
2
chunk-size
32k
persistent-superblock
1
nr-spare-disks
0
device
/dev/hdc2
raid-disk
0
device
/dev/hda2
failed-disk
1
.
.
以下md6まで
RAIDを作ります
#
mkraid
-R
/dev/md0
md6 まで繰り返します。
RAIDの状態を見ます
#
cat
/proc/mdstat
Personalities
:
[raid1]
read_ahead
1024
sectors
md6
:
active
raid1
hdc8[0]
264960
blocks
[2/1]
[U_]
ってな感じです。
フォーマットします
#
mke2fs
-c
/dev/md0
#
tune2fs
-j
/dev/md0
md5まで繰り返します。
swapをフォーマットします
#
mkswap
/dev/md6
grubにRADIでの起動を追加します。
#
pico
/boot/grub/grub.conf
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title
Red
Hat
Linux
(2.4.20-24.9)
root
(hd0,0)
kernel
/vmlinuz-2.4.20-24.9
ro
root=LABEL=/
initrd
/initrd-2.4.20-24.9.img
title
Red
Hat
Linux
(2.4.20-24.9)
RAID(/dev/md1)
root
(hd0,0)
kernel
/vmlinuz-2.4.20-24.9
ro
root=/dev/md1
initrd
/initrd-2.4.20-24.9.img
title
Red
Hat
Linux
(2.4.20-8)
RAID(/dev/md1)
root
(hd0,0)
kernel
/vmlinuz-2.4.20-8
ro
root=LABEL=/
initrd
/initrd-2.4.20-8.img
シングルユーザーモードに移行してコピーします
リブートしてシングルモードに入ることにする。(私のはどうしても #
init
1で何も画面が出てこないので・・・・ 仕方ないリブートしてます)
grubの起動画面でRAIDでない最新バージョンを選んで
e
、kernelの行を選んで
e
、最後に
single
と打ち込んでエンター、そしてb
これで
sh-2.05b#
になったら、ここがシングルモードです。この状態で作業します。
ファイルのコピーをする。
まず、仮のフォルダを
/
に作る。cd
/
mkdir
new
mount
/dev/hdb1
/new
cd
new
dump
0uaf
-
/boot
|
restore
xf
- 最後に
set
owner/mode
for
'.'?
[yn]
と聞かれるので y
cd
/
umount
/new
上記をswap以外すべてに繰り返す。
新しいディスク側(/dev/hdc)の/etc/fstabの編集 (今回は
/etcは
/以下にありますので/dev/md1となります)
#
mount
/dev/md1
/new
#
cp
/new/etc/fstab
/new/etc/fstab.bak
#
pico
/new/etc/fstab
LABEL= の部分を /dev/mdxに置き換える 6箇所
LABEL=/ >> /dev/md1
#
cd
/
#
umount
/new
このままshutdown
-r
nowで再起動して、RAIDを選んで立ち上げます
が、、、、 kernel
panicになってしまった 泣 ちょっと見直しです。
ここで動作状態を確認してみます。
#
swapon
-s 正常に
/dev/md6がマウントされてるのを確認します。
#
cat
/proc/mdstat md0〜md6までactiveなはずです。でないと起動してる時にエラー出てるはず。それぞれは[U_]になっている。
#
mount これも設定した通りのはずです。
hdaをfdiskしてraidに加える
#
fdisk
/dev/hda
今回はもともとのhdaのパーティションサイズはhdcと同じなので、t
コマンドでシステムだけをLinux
raid
自動検出(0xfd)に変更して、w
コマンドで記録する。もし、サイズが異なるものに入れ替える場合には(この場合はもともとのhdaをバックアップとして保存出来る)サイズをhdcで割り付けた値かそれ以上にして、Linux
raid
自動検出にして、ブートもきちんと書き込んで記録する。
#
pico
/etc/raidtab
failed-disk
1 を raid-disk
1 に6箇所書き換えます。
#
raidhotadd
/dev/md0
/dev/hda1
順番にmd6まで間違えのないように表で対応するhdaの番号を確認しつつ繰り返す。
#
cat
/proc/mdstat
で確認すると以下のようになっていて、[UU]は正常なRAIDの状態、recovery=
は現在リビルド中、[U_]はまだ未実施のもの。適当に時間が経ったらまた確認してすべてが終わるのを待ちましょう。
md2
:
active
raid1
hda3[2]
hdc3[0]
2048192
blocks
[2/1]
[U_]
[==========>..........]
recovery
=
67.5%
(1383716/2048192)
finish=1.1min
speed=10060K/sec
md1
:
active
raid1
hda2[1]
hdc2[0]
513984
blocks
[2/2]
[UU]
両方のドライブから起動出来るようにする これをしないとhdcが死んだ時にはリブート出来ないので意味がなくなってしまう。慎重に入力して下さい、ミスすると立ち上がらなくなります。
#
grub
Probing
devices
to
guess
BIOS
drives.
This
may
take
a
long
time.
grub>
device
(hd0)
/dev/hda
grub>
root
(hd0,0)
Filesystem
type
is
ext2fs,
partition
type
0xfd
grub>
install
/grub/stage1
d
(hd0)
/grub/stage2
0x8000
(hd0,0)/grub/menu.lst
grub>
device
(hd0)
/dev/hdc
grub>
root
(hd0,0)
Filesystem
type
is
ext2fs,
partition
type
0xfd
grub>
install
/grub/stage1
d
(hd0)
/grub/stage2
0x8000
(hd0,0)/grub/menu.lst
grub>
quit
grubのメニューから/dev/hdaで起動する部分を削除します
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title
Red
Hat
Linux
(2.4.20-24.9)
RAID(/dev/md1)
root
(hd0,0)
kernel
/vmlinuz-2.4.20-24.9
ro
root=/dev/md1
initrd
/initrd-2.4.20-24.9.img
title
Red
Hat
Linux
(2.4.20-8)
RAID(/dev/md1)
root
(hd0,0)
kernel
/vmlinuz-2.4.20-8
ro
root=LABEL=/
initrd
/initrd-2.4.20-8.img
これで最初からRAIDで起動されます
最後にきちんどどちらのドライブからも起動できることを確認しましょう
これから片方ずつディスクを外して起動するかの確認とリカバリーを試してみます。この経験は実際にディスクが壊れたときに慌てずに確実に元に戻す練習になります。必ずやってみましょう。
- シャッドダウンして、hdaを取り外します。取り外すといっても電源ケーブルを抜くだけです。
- 電源を入れるとRAIDで立ち上がるはずです。
- #
cat
/proc/mdstatでRAIDの状態を確認します。みごとにhdcだけで動き、[U_]の状態になっているはずです。
-
- #
raidhotadd
/dev/md0
/dev/hda1
以下繰り返してmd6まで行い、また状態を確認します。時々画面がdisk
xx,
s:0,....... だらけになりますが、エンターを押すとプロンプトに戻ります。
- 無事にリカバリーが終了したら、シャットダウンして今度はhdcを取り外して同じ事を繰り返します。
以上でRAID1が完全に構築されました お疲れ様でした。
参項URL:
http://galaxies.jp/mt/archives/000003.html
http://erpc1.naruto-u.ac.jp/~ootaka/obara/raid.html
|