Apr 18, 2010

FreeBSD 7.xにext3のイメージファイルをmountする方法

Linuxでdd if=/dev/hda1 of=/tmp/ext3image.imgなどとやって作成したext3のディスクイメージをFreeBSD 7.3にマウントするのに手間取ったので、成功した手順を記録する。

(1) カーネルにext2fsモジュールをロードしておく
 例)kldload ext2fs
(2) fsckする必要がある場合は、e2fsprogsをインストールしておく
(3) mdconfig -f (イメージファイル名)
以下、(3)によりmd0と表示された(unit 0に割り当てられた)ものとする。
(4) fsckする場合は、e2fsck /dev/md0
(5) mount -t ext2fs /dev/md0 /mnt

See more ...

Posted at 22:43 in UNIX | WriteBacks (0)
WriteBacks

Apr 11, 2010

玄箱HGのDebianが起動しなくなった

このwebサーバーは、玄箱HGという小型の機械で動いている。モニターもキーボードも接続できない、単なるハードディスクをネットワークに接続するための機械である(一応)。その機械がネットワーク経由でアクセスできない状態になると、機械表面に付いている4つのLEDでしか状態を知る術が無くなる。
先週、その玄箱HGが全く応答しない状態に陥り、電源を抜いて再起動すると、赤色LEDが6回点滅して起動しなくなった。玄箱の説明書によると、赤点滅6回はハードディスク異常を意味するらしい。

この玄箱HGで動かしているOSはDebian Linuxである。2年前にインストールした後、起動しないというトラブルはこれまで一度も無かった。先週まで順調に動いていたものだし、OSが壊れたとは考えにくい。HDD自体が壊れたのだろう。
…と考えて、HDDを取り出して別のPCに接続して、Linuxを動かしてmountを試みると、何の異常もなくmountできて、fsckも無事に終わってしまった。しかし、そのfsckが済んだHDDを再度玄箱に接続しても、やはり赤点滅6回であった。
では玄箱が壊れたのか?と思って別のHDDを接続すると、エラーになること無く、EMモード(FROM内蔵のOS)だが正常に起動した。さらに、玄箱用のHDDのバックアップを取ってフォーマットして以前の手順でDebian(sarge)をインストールすると、問題無く起動した。
正常に起動するsargeのバックアップをddで取ってHDDをフォーマットしてddでリストアしてもsargeが正常に起動することを確認して、ddで元のシステム(lenny)をリストアしても、やはり起動しなかった。どうやらDebianが起動不能になってしまったらしい。

起動しなくなった原因のヒントを求めてネットサーフィンしまくった結果、初期の玄箱のファームウェアは2.6系であるLenny(Debian 5.0)のカーネルを起動できないのが原因であることが判明した。
この玄箱のDebianはインストール時には3.0(sarge)で、aptitudeで更新したら自動的にetch(4.0)になり、aptの設定ファイル(/etc/apt/sources.list)がDebianのstableなバージョンを参照する設定だったので、そのままaptitudeを使い続けたら、去年の3月に自動的に5.0(lenny)になってしまったのである。

という訳で、www.revulo.comの手順を参考にして、Lennyの起動に関連する部分だけ再構築することにより、思ったより楽に復旧できたので、その手順を記録する。

●旧Lennyシステムのバックアップ
 HDDを接続したLinuxを起動して、先頭のパーティションのディスクイメージを作成する。
 dd if=/dev/hdb1 of=/tmp/kuro-debian.img
 (HDDが/dev/hdbとして認識されている場合)

●MontaVistaのインストール
HDDの最初のパーティションにある2.6系のLinux kernelを起動するには、"U-Boot"というものを使う方法があるらしいが、FROMを書き換える必要があり、失敗すると玄箱が使用不能になるリスクがある。それに代えて、HDDの最初のパーティションに2.4系のカーネルを置いて、別のパーティションにある2.6系のカーネルを起動するという方法がある。www.revulo.comにあるのは、後者の安全な方法である。
そこで、まず先頭のパーティションにMontaVistaを再インストールする。

1. 玄箱をEMモードで起動
 先頭のパーティションを削除して玄箱を起動するとEMモードになる。
2. telnetで入る
 IPアドレスは玄箱のファームウェアダウンロードツール(付属CDとか玄人指向のサイトとかにある)の中のKuroBoxSetup.exeを起動するとわかる。
 出荷状態ではrootのパスワードはkuroadminである。
3. パーティション作成
 mfdisk -c /dev/hda とすると、懐かしいfdiskのUIが出て来る。
 dで全てのパーティションを削除した後、nでプライマリパーティションを
  hda1: 256M(MontaVista用)
  hda2: 256M(swap用)
  hda3: 4G(Lenny用)
  hda4: 残り
 と作り、tでhda2のタイプを82にしてwでHDDに書き込む。
4. ファイルシステム作成
 mkswap /dev/hda2
 mke2fs -j /dev/hda1
 mke2fs -j /dev/hda3
 mke2fs -j /dev/hda4
5. hda1をmountする
 mount -t ext3 /dev/hda1 /mnt
6. MontaVista一式の圧縮ファイルを転送
 玄箱のファームウェアの中のimage.zipの中にあるtmpimage.tgzを/mnt/にFTPで転送する。
7. MontaVistaを展開
 cd /mnt
 tar xvfz tmpimage.tgz
8. EMモード終了
 echo -n "OKOK" > /dev/fl3
 reboot

●Lennyのインストール
1. インストーラー一式を転送
 www.revulo.comにある以下のファイルを/tmpに転送する。(hda1が256MでMontaVistaをインストールした直後なら全て/tmpに入る)
 debian-lenny-installer-kuroBOX-20090317.tgz
 debian-lenny-kuroBOX-20090317.tgz
 kuro-bootsel2-debian.tgz
 kuro-bootsel2.20080419.tar.gz
 loader.o
 kernelimage-2.6.25.1-kuroHG.tgz
 modules-2.6.25.1-kuroHG.tgz
2. インストーラー実行
 cd /tmp
 tar xvfz debian-lenny-installer-kuroBOX-20090317.tgz
 sh debian-lenny-installer-kuroHG.sh
3. 電源長押しで再起動
 Lennyが起動していることを確認する。

●旧システムのリストア
1. バックアップを転送
 FTPなりsambaなりで/mntに転送する。FTPでもsambaでも、何らかの設定が必要である。
 別のパソコンにHDDを繋いで4番目のパーティションにコピーしても良い。
 今回はaptitudeを使ってsambaをインストールし、このためだけの設定を行った。
2. ディスクイメージをマウント
 mkdir /mnt/hda1-org
 mount -o loop /mnt/kuro-debian.img /mnt/hda1-org
3. ディスクイメージを展開
 cd /mnt/hda1-org
 tar cf - (dev, proc以外の全て) | (cd /; tar xvf -)
 例: tar cf - bin boot etc home lib opt root sbin selinux sys usr var | (cd /; tar xvf -)
4. 電源長押しでシャットダウン
5. 電源を抜いて差して再起動

See more ...

WriteBacks