Tips & Information 今回のお題:
『FreeBSD 3.x → 4.x バイナリアップグレード』


●動機

CCLUB のサーバでは FreeBSD 3.5-STABLE が走ってるんですが、 こいつをアップグレードしろと命令が下りまして。

3.x → 4.x の場合、ソースからのアップグレードは、なんだか 素人にはお勧めできない らしいのです。

で、右と左くらいしかわからないような状態なので、 とりあえず VMWare で試してみようと思いまして。

どちらかといえば、「参考にしてください」でなくて「ツッコミ入れてください」な方向で。

●内容

1. FreeBSD 3.5.1-RELEASE のインストール、4.5-RELEASE の上書きインストール

……は省略。上書きインストールについては FreeBSD 4.0 RELEASEの上書きインストール方法 というサイトがあるんで、これを参考に。

とりあえず、/etc/fstab のハードコピーはとっておけ、とのことだったので、 スクリーンキャプチャをとる。

3.5.1 の /etc/fstab
3.5.1 の /etc/fstab

2. reboot 後

2.1 ルートパーティーションがマウントされない
Root mount failed
Root mount failed

root、すなわち / が mount できないと言っている。

3.x → 4.x ではデバイスファイルの名前がどうたら、という話を見たことがあったので探す。 で、DAMMER'S FACTORY によると、/dev/wd* は /dev/ad* に名前が変わってるらしい。そこで、

ufs:/dev/ad0s1a

と打ち込んでみる……なんか動いた。なお、ここで「:」を入力するには、 「Shift + ;(セミコロン)」とする必要があった。keymap が変なのか。

アップグレードするときに、マウントポイントやら何やらの設定をまずったのが原因か? (元の /etc/fstab と同じ容量のところに同じマウントポイントを書いただけだったので)

2.2 shell の fullpath を入力してくれ、といわれる
Enter full pathname of shell
Enter full pathname of shell

なんか「予期しない不一致がある; 手動で fsck してくれ」とか 「shell の full path を入力してくれ」とか言ってる。

shell (sh) の場所は /bin/sh で間違いないのでそのまま Enter。 すると、プロンプト "#" が表示された。シングルユーザモード? root? (っていうか、この 2 つに操作上とか権限上とかで大きな違いはあるのか)

2.3 いろいろと復帰を試みる

とりあえず、シングルユーザモードに落ちてみる。やり方は 緊急時のブート方法 にあり。 ……すると、2.2 と同じ雰囲気の表示に。 ってことは既にシングルユーザモードに落ちてたというわけね。

ページに書いてあるとおり(HDD のデバイスファイル名は違うよ)

fsck -y /dev/ad0s1a
mount -u /
mount -a

とすると、最後の mount -a で文句を言われる。「Device not configured」だそうで。

mount の manpage によると、-a は /etc/fstab に書いてあるものを全部 mount するらしい。 /dev/wd* は /dev/ad* に名前を変えているけれど、/etc/fstab には /dev/wd* と書いてあるままなのが原因か。

2.4 /etc/fstab が編集できないのをどうにかする

/etc/fstab が原因っぽいので、こいつを編集する。編集の前にバックアップをとる。

cd /etc
cp fstab fstab.bak

と、「cp: fstab.bak: Read-only file system」とか言われる。 で、たぶんこれは / が read-only な指定で mount されてるのが原因だろうと推測。

2.3 で出てきた mount の -u オプションが気になるので調べる。 上記 mount の manpage には -u オプションに関する記述なし。 そこで、CCLUB のサーバにログインして jman mount。 でもって /-u で「-u」を検索。n で次候補検索。(man の pager は less)

で、オプション -u は update の意だと判明。既に mount されているモノの、 mount の状態 (readonly とか writable とか)を変更するためのモノらしい。 さらに下へ読み進めると、オプション -w で読み書き可能になるとある。

そこで以下のように実行。

mount -uw /
cd etc
cp fstab fstab.bak

でコピーができるようになった。

2.5 vi とか使えないのをどうにかする

さて vi で fstab を編集しようとすると、

# vi fstab
vi: not found

と言った具合。ee も同様に見つからない。 たぶん、/usr が mount されていないのが原因だろうと。

mount /dev/ad0s1f /usr

で、vi が入ってそうな、元 /usr 部分を mount する。

ここで、/usr が /dev/ad0s1? なんかのうちのどれに対応しているか知るには /etc/fstab を見る。/usr に対応する /dev/wd0s1? の「wd」を「ad」に読み替えて mount すればよし。上書きインストール時に、マウントポイントの設定を 3.5.1 のときと(ほぼ)同じにしたので、これで mount できる。

で、これで vi が使えるかというとどうもそうではないっぽい。

Error: /var/tmp/vi.recover No such file or directory.
Error: /var/tmp/vi.recover No such file or directory.

なんか言われている。落ちたら編集中の文書はパーだぞ、といったところか。 /var を mount してないのが原因だろう。 とりあえず、ESC, ESC, Shift-;(:), q, ! で vi を終了する。

mount /dev/ad0s1e /var
vi /etc/fstab

とすると、いつも通りの vi の画面になった。 あとは "wd0s1?" を全部 "ad0s1?" に変えて保存し、vi を終了する。

3. リブートして終了

これで /etc/fstab に起因する問題は解消されるはず。あとはリブートするだけ。

shutdown -r now

でリブート。うまく行ったクサい。

FreeBSD 4.5-RELEASE
FreeBSD 4.5-RELEASE

前 (3.5.1) の /etc は /usr/tmp/etc に入っているので、/etc を編集する際に参考にする。


2002/08/14 追記: どうやら、snapshot CD からのバイナリインストールが終了した後、 再起動する前に Alt+F4 とすると shell が弄れるので、 この時点で /etc/fstab を編集する、というのが正しい手順らしい。 こうすれば、こんな面倒なことせんでもいいわけである。はぁ。

戻る