にへるつおるぐ | src | ブログ | コンタクト | 統計 | 御串 | 小束 | 裏ミク | つ痛 | 顔本 |

10年ぶりに部屋に入るとコウモリや猫の巣窟だった

Debian -- ユニバーサルオペレーティングシステム

2007-09-12 15:57:51 JST-9 | akebia | Debian | コメント | トラックバック | 履歴

これは、あけび猫が使っているマシンのディスクが壊れた時にあけび猫が復旧のやり方を思い出せるように作ったメモです。しかし、Debian「sarge」の頃に作ったメモなので、今でもこのとおりでうまくいくかは謎です。RAIDレベルは「RAID 1」です。

Debian「squeeze」になってから試した記事「ソフトウェアRAID(その2)」を作りました。下記の方法でうまくいかない場合には、お試し下さい。

1. RAIDデバイスの状態確認
2. RAIDデバイスの管理
2.1. mdadm
2.2. mdadm.conf
2.3. fstab
2.4. initrd
3. ディスクの管理
3.1. パーティション
3.2. ファイルシステムのタイプ
3.3. GRUBを使ったブートプログラムのインストール
3.4. フロッピーディスクを使ったシステムの起動
3.4.1. 起動用FDの作成
3.4.2. システムの起動
4. ディスクが壊れた場合の復旧方法
4.1. パーティションサイズの変更が伴わない場合
4.2. パーティションサイズの変更をする場合
4.3. 動作確認
5. 既存のシステムをRAID化する
6. コマンド例
6.1. アレイの作成
6.2. アレイにディスクを追加
6.3. アレイからディスクを削除
6.4. アレイを削除
6.5. アレイの状態を表示
6.6. アレイの状態をmdadm.confに記述する形式で表示
6.7. アレイの復活

1. RAIDデバイスの状態確認

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 hda1[0] hdc1[1]
45030080 blocks [2/2] [UU]

unused devices: <none>

hda1やhdc1は論理ディスク(パーティション)です。これらは、hdaやhdcといったディスクデバイス内に存在します。

md0はRAIDデバイス(ディスクアレイ)です。この中には複数の論理ディスクを含めることが出来ます。

md0
  hda1
  hda2

2. RAIDデバイスの管理

2.1. mdadm

mdadmを使って、ディスクアレイ内の任意のディスクを不良とマークしたり、削除したり、ディスクを追加したりできます。詳しくは、mdadmのマニュアルを参照して下さい。

2.2. mdadm.conf

mdadmを使うと、その結果は即座にシステムの動作に反映しますが、mdadm.confはmdadmによって更新されないので、mdadm.confは手動で編集する必要があります。mdadm.confはシステム起動時に必要なinitrdを生成する時に重要な意味を持ちます。

DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=1cbd3222:746ed5f7:cf18bf20:92e74ad1
  devices=/dev/hda1,/dev/hdc1


DEVICE partitions
ここで、あらかじめARRAYで使われるデバイスを列挙する必要がありますが、「DEVICE partitions」としておけば、/proc/partitionsにあるデバイスが列挙されたことになります。
 
ARRAY
ここで、ディスクアレイ毎の設定を記述します。devices以外のパラメータは、mdadmを使うと得られます。先ずmdadmでディスクアレイを編成し、稼動させておいてから、mdadmを使ってmdadm.confに記述すべきパラメータを得るとお手軽です。

# mdadm --detail --scan
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=1cbd3222:746ed5f7:cf18bf20:92e74ad1

これをそのまま写して、devicesを付け加えればOKです。devicesには実際にディスクアレイを構成してるデバイスを記述します。UUIDはディスクアレイを再編成すると変わることがあるので注意して下さい。

2.3. fstab

fstabもシステム起動時に必要なinitrdを生成する時に重要な意味を持ちます。

# <file system> <mount point> <type>   <options> <dump> <pass>
/dev/md0        /             reiserfs noatime   0      1

このように起動時にマウントさせるディスクアレイを記述しておきます。各詳細なパラメータは各自の環境に合わせて設定します。

2.4. initrd

ディスクアレイを構成した結果、構成が以前のものと変わったり、UUIDが変わった場合には、initrdを再作成する必要があります。さもないと、システムの起動時にディスクアレイが正しく編成されず、システムが起動できなくなることがあります。initrdを再作成するには以下のコマンドが使えます。

dpkg-reconfigure kernel-image-`uname -r`

上記のコマンドは、同時にGRUBのmenu.lstを書き換えてしまうので、それが嫌な場合には以下のコマンドで代替できるでしょう。

mkinitrd -o /boot/initrd.img-`uname -r` `uname -r`

-oオプションでinitrdファイルの位置を指定し、`uname -r`で現在のシステムのバージョンを指定しています。

上記の各コマンドを実行する前には必ずinitrdファイルのバックアップを取っておきます。同じディレクトリに適当なファイル名でコピー又はリネームしておけばよいでしょう。さすれば、万一起動に失敗した場合でもGRUB等のブートローダでinitrdをバックアップしておいたものに指定しなおせば、取りあえず起動できます。

上記の各コマンドを実行する前に、mdadm.conffstabを正しく編集しておく必要があります。

Debian「etch」になってからは、mkinitrdの代わりにmkinitramfsを使うとよいみたいです。

mkinitramfs -o /boot/initrd.img-`uname -r` `uname -r`

3. ディスクの管理

3.1. パーティション

パーティションは、fdiskやcfdiskを使って管理します。

# fdisk -l

Disk /dev/hda: 46.1 GB, 46115758080 bytes
255 heads, 63 sectors/track, 5606 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 5606 45030163+ fd Linux raid autodetect

Disk /dev/hdc: 46.1 GB, 46115758080 bytes
16 heads, 63 sectors/track, 89355 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 1 89355 45034888+ fd Linux raid autodetect

3.2. ファイルシステムのタイプ

ファイルシステムのタイプは、マウントしてみると分かります。既にマウントされているファイルシステムのタイプは、単にmountとタイプすれば出てきます。

# mount
/dev/md0 on / type reiserfs (rw,noatime)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda2 on /home/akebia/public_etc type reiserfs (rw,noatime)
usbfs on /proc/bus/usb type usbfs (rw)

3.3. GRUBを使ったブートプログラムのインストール

1: # grub
2: device (hd0) /dev/hdc
3: root (hd0,0)
4: install /boot/grub/stage1 (hd0) /boot/grub/stage2 p /boot/grub/menu.lst
5: quit

  1. 「grub」とタイプして、GRUBのコマンドラインプログラムを起動します。
  2. /dev/hdcを1番目のHDDとします。ここのデバイスファイル名は、GRUBをインストールするディスク(新しいディスク)を示すように便宜読み替えて下さい。
  3. 1番目のディスクの1番目のパーティションを現在のルートデバイスとします。この時、ファイルシステムやパーティションのタイプが認識されるので、この操作は省略できません。
  4. 1番目のディスクにGRUBをインストールします。

この方法はフロッピーディスクから起動したGRUBでも使えます。その場合には、3の手順から始めます。またこの場合、「quit」はできないみたいなので、続けてシステムを起動させるか再起動させるか電源を落とすことになります。

「stage1」や「stage2」のファイルは上記の場所とは別の所にあることもあるかもしれません。その場合には、シェルにて「dpkg -L grub | grep stage」とでもして、それらしき場所を探して下さい。

GRUB2を使っている場合には、「grub-install」コマンドを使います。

3.4. フロッピーディスクを使ったシステムの起動

マシンを新しいディスクを取り付けたりしてごそごそしていると、何故かブートブログラムのインストールを忘れていたりうまくいってなかったりして、HDDからシステムが起動しなくなることがよくあります。その時に備えて起動用のフロッピーディスクを作っておくと便利です。

3.4.1. 起動用FDの作成

GNU GRUBのサイトから、GRUBのFDのイメージを入手してFDに書き込みます。FDイメージの名前は、「grub-0.97-i386-pc.ext2fs 」のような感じで配布されています。書き込みにはNTRawrite等が使えます。

最近は、「Super Grub2 Disk」というのを使うのがお手軽みたいです。この場合には、「super_grub_disk_hybrid-1.98s1.iso」というようなファイルをFDやCD-Rに書き込んで使います。これのFDへの書き込みにも、NTRawriteが使えます。

3.4.2. システムの起動

root (hd0,0)
configfile /boot/grub/menu.lst

取りあえず、システムが最初のディスクの最初のパーティションに入っていてGRUBのメニューを使っていれば、上記のようにタイプすればGRUBのメニューが出てくるのでそれに従って起動できます。

GRUBのコマンドラインにはシェルのTABキーのような機能が付いているので、たとえば、「boot (」までタイプしたところで、TABキーを押すとマシンに接続してあるディスクのシンボルが列挙されます。

システムがGRUBを使っていない場合には、kernel、initrd、bootといったコマンドを直接入力して起動させます。

Super Grub2 Diskの場合には、起動して出てきたメニューから「Detect any OS」を選ぶと自動的に起動可能なOSを列挙してくれます。CD-Rから起動した場合には、FDDが繋がっていないFDDコントローラが有効だと列挙に時間がかかことがあるみたいなので、あらかじめ、BIOS設定でFDDを無効にしておくとよいみたいです。

4. ディスクが壊れた場合の復旧方法

4.1. パーティションサイズの変更が伴わない場合

  1. mdadm を使って壊れたディスクをディスクアレイから削除します。
  2. マシンの電源を落とし、新しいディスクに取り替え、電源を入れます。
  3. システムが起動しない場合にはBIOS設定にてもう片方のディスクから起動するようにします。
  4. cfdisk を使って新しいディスクのパーティションを設定します。パーティションサイズは片方のディスクのものと同じにします。わずかに違っていても次のステップで問題が発生しなければ問題ありません。
  5. mdadm を使って新しいディスクをディスクアレイに追加します。
  6. grub を使って新しいディスクにブートプログラムをインストールします。

4.2. パーティションサイズの変更をする場合

  1. mdadm を使って壊れたディスクをディスクアレイから削除します。
  2. fstabを編集して、ルートに現在稼動中のシステムが入ったパーティション(たとえば、「/dev/hda1」とか)を直接マウントするようにします。
  3. マシンの電源を落とし、新しいディスクに取り替え、電源を入れます。
  4. ブートローダの設定にて、2で設定したディスクからシステムを起動するようにします。たとえば、「kernel /boot/vmlinuz-2.6.8 root=/dev/md0」とかなっているのを、「kernel /boot/vmlinuz-2.6.8 root=/dev/hda1」に修正したりします。
  5. システム起動後、ディスクアレイの残骸が残っている場合には、「mdadm --stop /dev/md0」等としてディスアレイを削除します。
  6. cfdisk を使って新しいディスクのパーティションを設定します。
  7. mdadm を使ってディスクアレイを編成します。その際、ディスクアレイは、新しいディスクのみの縮退状態にします。これは、現在稼動中のパーティションはディスクアレイに加えることができないからです。
  8. ディスクアレイをマウント(たとえば、「/mnt/md0」に)し、現在稼動中のパーティションの中身をそこへコピーします。 現在稼動中のパーティションをルート以外のディレクトリ(たとえば、「/mnt/hda1」に)にマウント(ルートへマウントしたまま重複してマウントできるみたい)してから、その中身をディスクアレイをマウントしたディレクトリに全てコピー(たとえば、「cp -a /mnt/hda1/* /mnt/md0」)するとお手軽です。
  9. RAIDデバイスの管理を参考にして、mdadm.confとfstabを編集し、initrdを作成しなおします。これは、現在稼動中のパーティションで行います。
  10. できあがった、mdadm.confとfstabとinitrdファイルを新しいディスクアレイへコピーします。その後、現在稼動中のパーティションのfstabは念の為、編集前の状態に戻します。9の手順を8の前にやれば7で全てと一緒にinitrdやらがコピーされてお手軽そうですが、そうするとコピーには時間がかかることが多いので、その間、なんらかの原因でマシンを再起動させると、fstabの関係で起動が途中で止まってしまいます。 initrdの作成をchrootを使って新しいディスクアレイの中でやってしまうという手も考えられますが、未確認です。
  11. マシンを再起動させます。ブートローダの設定はディスクアレイから起動するようにします。
  12. cfdisk を使って、まだディスクアレイに追加していないディスクのパーティションを設定します。パーティションサイズはディスクアレイのものと同じにします。わずかに違っていても次のステップで問題が発生しなければ問題ありません。
  13. mdadm を使って12のパーティションをディスクアレイに追加します。
  14. grub を使って新しいディスクにブートプログラムをインストールします。

4.3. 動作確認

ディスクアレイの構成を変えた時には、2.2を参考にして、設定ファイル等に矛盾が無いか確認し、再起動させてもディスクアレイが正しく保たれているか確認します。動作がおかしな場合には設定ファイルを修正し、initrdを作成しなおします。

5. 既存のシステムをRAID化する

4.2の手順がほぼそのまま使えます。新しいディスクを取り付けマシンを起動させた後、4.2の6から読み進めて下さい。

6. コマンド例

6.1. アレイの作成
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hda1 missing
6.2. アレイにディスクを追加
mdadm /dev/md0 -a /dev/hda2
6.3. アレイからディスクを削除
mdadm /dev/md0 -f /dev/hda2 -r /dev/hda2
6.4. アレイを削除
mdadm --stop /dev/md0
6.5. アレイの状態を表示
cat /proc/mdstat
6.6. アレイの状態をmdadm.confに記述する形式で表示
mdadm --detail --scan
6.7. アレイの復活
mdadm --assemble --scan
これは、アレイを構成しているディスクの取り付け場所を変更したりして、単にアレイがバラけてしまったものを元に戻すのに使えます。mdadm.confのdevicesを修正してから、上記のコマンドを実行します。

MyMiniCity 人気ブログランキングへ

  1. mdadm.conf (513)
  2. super_grub_disk_hybrid-1.98s1.iso floppy (297)
  3. mdadm conf (30)
  4. mdadm 削除 (25)
  5. mdadm アレイ 削除 (21)

Comments

2 件のコメントがあります

205 DMZ l239177.ppp.asahi-net.or.jp 2011-08-21 12:08:34 JST-9
うーむ。
http://nyan.co.uk/n/skins/a... HTML/ScrInject.B.Gen ウイルス」を検出したようだ。
206 akebia p094093.doubleroute.jp 2011-08-21 12:50:26 JST-9
http://www.google.co.jp/sea...
誤検出?

Add Comment

Trackback

このトラックバックURL(右クリックして、リンクのURLをコピー)を使ってこの記事にトラックバックを送ることができます。もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。トラックバックの手動送信に失敗したり、拒否された場合には、あけび猫が入力しますので、こちらまでご連絡下さい。重複したトラックバックは、自動的に1つにまとめられるようなので、気軽に色々試してみて下さい。


http://2hz.org/akebia/