FreeBSD 8.2R + Raidz + HP ProLiant Microserverを構築中。
インストールの手順は:
- DVDから起動
- インストール先にda0を選択(後述)
- fdisk内でA(自動)を選んで全部割り当て
- 普通のブートマネージャをインストール
- disklabelでもAを選んで自動割り当て
- インストール元にCD/DVDを選択
- ZFSを構成
- ちまちま設定
となった。
まずはUSBメモリスティックからのブート時に出た問題を列挙する。Macばかり使うようになって久しいのでPCのUSBブートの条件などまったく把握しておらず、またFreeBSDも浦島太郎すぎで初めてのようなもの。ひどく試行錯誤をして、ようやく少し把握した次第。大きく分けて、
である。3はカードリーダーの不良だったが、1,2,4は知らないとうまくいかないことだった。
1. インストール時にfdiskがメモリスティックを認識しない
現象: インストール先メディアを選択する際に、USBメモリのデバイス/dev/da0が出てこない
Alt+F2のコンソールには、メモリスティックを抜き差しするたびに告知が出ているのに、インストーラのドライブ選択画面では:
┌───────────── Select Drive(s) ───────────────┐ │ Please select the drive, or drives, on which you wish to perform │ │ this operation. If you are attempting to install a boot partition │ │ on a drive other than the first one or have multiple operating │ │ systems on your machine, you will have the option to install a boot │ │ manager later. To select a drive, use the arrow keys to move to it │ │ and press [SPACE] or [ENTER]. To de-select it, press it again. │ │ │ │ Use [TAB] to get to the buttons and leave this menu. │ │ ┌──────────────────────────────────┐ │ │ │ [ ] ad10 ad10 │ │ │ │ [ ] ad4 ad4 │ │ │ │ [ ] ad6 ad6 │ │ │ │ [ ] ad8 ad8 │ │ │ └──────────────────────────────────┘ │ ├─────────────────────────────────────┤ │ [ OK ] Cancel │ │ [ OK ] Cancel │ └──[ Press F1 for important information regarding disk geometry! ]─┘
といった具合で、HDDしか認識されていなかった。
解法: Optionsの右下にあるRe-scan Devices <*>にカーソルを合わせてSpaceまたはEnterを押す。
速すぎて見えにくいが、何度も押していると「リスキャン中」みたいな表示が出ていた。
Options画面はこんな風で:
Options Editor Name Value Name Value ---- ----- ---- ----- NFS Secure NO Browser Exec /usr/local/bin/links NFS Slow NO Media TypeNFS TCP NO Media Timeout 300 NFS version 3 YES Package Temp /var/tmp Debugging NO Newfs Args -b 16384 -f 2048 No Warnings NO Fixit Console serial Yes to All NO Re-scan Devices <*> DHCP NO Use Defaults [RESET!] IPv6 NO FTP username ftp Editor vi Extract Detail high Release Name 8.2-RELEASE Install Root / Browser package links Use SPACE to select/toggle an option, arrow keys to move, ? or F1 for more help. When you're done, type Q to Quit. Re-run sysinstall's initial device probe
ここでリスキャンしたあとでドライブ選択画面に戻ると、ちゃんと認識されていた。
┌───────────── Select Drive(s) ───────────────┐ │ Please select the drive, or drives, on which you wish to perform │ │ this operation. If you are attempting to install a boot partition │ │ on a drive other than the first one or have multiple operating │ │ systems on your machine, you will have the option to install a boot │ │ manager later. To select a drive, use the arrow keys to move to it │ │ and press [SPACE] or [ENTER]. To de-select it, press it again. │ │ │ │ Use [TAB] to get to the buttons and leave this menu. │ │ ┌──────────────────────────────────┐ │ │ │ [ ] ad10 ad10 │ │ │ │ [ ] ad4 ad4 │ │ │ │ [ ] ad6 ad6 │ │ │ │ [ ] ad8 ad8 │ │ │ └──────────────────────────────────┘ │ ├─────────────────────────────────────┤ │ [ OK ] Cancel │ │ [ OK ] Cancel │ └──[ Press F1 for important information regarding disk geometry! ]─┘
2. インストーラが書き込もうとするとデバイスファイルが見つからない
現象: インストールをコミットしようとすると
Unable to find device node for /dev/da0 in /dev
(次画面)
The creation of filesystems will be aborted
と出る。
解法: パーティションテーブルが壊れているので修復する。
これはわかりにくかったが、MBRが壊れると起きる現象みたい。なぜこんなことが起きたかというと、microSDにmemstick.imgを書き込んだ際に、Macで以下のようなコマンドを叩いたためだ:
dd if=FreeBSD-8.1-STABLE-201008-i386-memstick.img of=/dev/disk1 bs=10240
これが悪かった。disk1(2番目のハードディスク。この場合はUSBメモリスティック。デバイスファイル名を知るには、USBメモリスティックを抜き差ししながらls -ltr | tailするとよい)の先頭から書いたら壊れた。たぶんof=/dev/disk1s1を指定すれば大丈夫だった。
修復は、MacのDisk Utility.appでFATのパーティションを切ることで行った。ふたたびメモリスティックとして普通に認識されるようになり(memstick.imgを書き込んだ状態だとMacから認識されなくなる)、FreeBSDのインストーラからデバイスノードが見えないということもなくなった。
MBRにゼロを書き込む手もあるらしい。
dd if=/dev/zero of=/dev/ad0 bs=512 count=64
3. 書き込みそのものができない
現象: めでたくデバイスノードが見えるようになったのに、
Unable to write data to disk da0
と出てきた。
これはSDカードリーダが中途半端に不良品で、しっかり差し込むとうまく書き込めなかったり、突然認識されなくなったりするというものだった。他のカードリーダを持ってきたら何のも問題もなく進行した。
ようやくインストール成功!
4. インストール後に止まるようになった
現象: インストール後に再起動するとUSBメモリスティックのルートファイルシステムをマウントしてくれない。
これはUSBブート周りのトラブルとして有名なものらしい。カーネルのブートに軽くディレイをかけてやることでうまくいくとのこと。
解法: /boot/boot.conf に
kern.cam.boot_delay=10000
を書く。最初はboot.confをいじれないので、ブートメニューで6.を選んでプロンプトに落ち、
set kern.cam.boot_delay=10000
boot
でうまくいく。
その他
- まともにfdiskなパーティションテーブルがあれば、どのソケットに挿してもブートする
USBブートは条件が厳しい世界だと思っていたのだが、実はわりと自由だった。写真の読み込みなどに使っている多機能で大型のカードリーダからでも普通にブートしてくれるなど、とても楽しい機能である。ただ、常時ここからブートしていると起動中に引っこ抜きそうなので、早めに新しい小型リーダを買わねばならぬ。
つづく。