Menu
はじめに
ネットワーク準備
インストール準備
インストール
 ・HDD1個
 ・RAID1
 ・アップデート
Linux基本操作
サーバー設定
 ・ネットワーク
 ・sshサーバー
 ・DNSサーバー
  ・ダイナミックDNS
 ・Webサーバー
 ・mailサーバー
  ・内部のみ許可
  ・POPbeforeSMTP
 ・ftpサーバー
 ・ntpサーバー
 ・ディスク容量制限
 ・アクセス解析
 ・webメール
 ・全文検索設置
 ・メーリングリスト
拡張・変更
 ・ディスクを交換
 ・RAID1に変更
 ・マシン入替え
 ・postfixにする
 ・kernelをソースから
 ・ドメイン名
   サーバー名
   IPアドレス変更
CGI
 ・カウンタ設置
セキュリティーアップ
格安でドメイン登録
日々のメモ
便利なコマンド

サイト内検索
www.kaji3.com


本日
昨日
---------
後からブート可能なRAID1を構築する方法
最初に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

Copyright (C) 2003-2004 Kaji3.com. All Rights Reserved.