VirtualBoxでUEFI+GPTな環境にNetBSD/amd64をインストール
新調したPCことHP p6-2210jpがUEFI+GPTという環境になっていたんで、さてどうやってNetBSDを入れようかということでVirtualBoxで試したらなんとかなったというメモ。
以下ポイント。
- ブートローダーはArchLinuxからgrub2-efiだけ拝借して使用する。NetBSD標準のブートローダは使用しない
- BSD disklabelも使用せず。2TBの壁もあるし(2TB超のディスクなんて持ってないけど)
- Arch Linuxを使用したのは"grub2 efi"でGoogle先生に尋ねたら最初にでてきたから。ぶっちゃけEFI対応のGRUB2があれば何でもよし。
まずは用意するものとして、NetBSD/amd64、ArchLinux(grub2インストール用)、GParted Live CD(パーティション設定用)を用意。実際に使ったファイル名は以下の通り。
VirtualBoxに新しい仮想マシンを作成し、CDから起動できるようにする。なお、VirtualBoxのUEFIが今一微妙なのか単に使い方が悪いだけなのか、CDからうまく起動できないのでしばらくEFIはOFFにしておくこと。
仮想マシンが作成できたらまずはGParted Live CDを起動する。
Gpartedメニューから「デバイス(D)」→「パーティションテーブルの作成(C)...」とすると『警告:この作業は「ディスク /dev/sda 上の全データを削除します』と出るので、「詳細」から「パーティションテーブルの形式を選択」デ「gpt」を選択して「Apply」。
テーブルの作成が終わったら、ツールバーの「New」でまず最初にEFI領域を作成するためfat32のパーティションをディスクの先頭に作成する。容量やラベルは適当でOK。残りの領域は好きなように。どうもufsは選択できないので「未フォーマット」にでもしておく。
全て完了したら「Apply」で完了。
今回はこんな感じで、先頭にEFIパーティション、残りは全部NetBSDパーティション。
本当はGUIDも設定したいけれども設定方法がわからず。とりあえず設定しなくても大丈夫そうなのでとりあえず進める。(GUIDについては米WikipediaのGUID_Partition_Tableを参照)
次にNetBSDをインストールする。なおNetBSDのインストーラはGPTを認識できないようでご覧の通り238(0xEE)のパーティションが1つあるだけにしか見えない。仕方がないのでシェルに落ちて手動で展開する。
GPTパーティションはdkデバイスとして認識されるらしいので、まずは正しく認識されているか確認する。
#dmesg | grep dk dk0 at wd0: 78a10e7a-3ee5-448c-8afe-33fbd4083fa1 dk0: 524288 blocks at 2048, type: dk1 at wd0: 12cae2aa-aa0c-4137-82d7-0ce1a6502546 dk1: 16248832 blocks at 526336, type:
対象がdk1として認識できているようなので、newfsでフォーマット。WARNINGは気にしない(おぃ
# newfs -I -O 2 dk1 cprng sysctl: WARNING pseudorandom rekeying. /dev/rdk1: 7934.0MB (16248832 sectors) block size 16384, fragment size 2048 using 43 cylinder groups of 184.52MB, 11809 blks, 22912 inodes. super-block backups (for fsck_ffs -b #) at: 160, 378048, 755936, 1133824, 1511712, 1889600, 2268488, 2645376, 3023264, ...............................................................................
後はマウントして必要なものを展開する。
# mount -t ffs /dev/dk1 /targetroot # cd /targetroot # tar zxpf /amd64/binary/sets/base.tgz (以下略)
必要なら /targetroot/etc/以下を適当に編集して完了。ブートローダーにはgrubを使うのでinstallbootの出番はなし。
最後にArch Linuxを起動してgrub2-efiをインストールさせる。
なおgrub2のインストールは基本的には「https://wiki.archlinux.org/index.php/GRUB2」の通り。
まずはgrub-efi-x86_64をインストールする。
root@archiso ~ # pacman -yS grub-efi-x86_64
root@archiso ~ # mkdir -p /boot/efi root@archiso ~ # mount -t vfat /dev/sdxx /boot/efi
grubをインストールする。モジュールやらもEFIパーティションに入れたいので--boot-directory=/boot/efi/EFIを指定しておく。
root@archiso ~ # modprobe dm-mod root@archiso ~ # grub-install --target=x86_64-efi --efi-directory=/boot/efi \ --bootloader-id=arch_grub --boot-directory=/boot/efi/EFI \ --recheck --debug root@archiso ~ # mkdir -p /boot/efi/EFI/grub/locale root@archiso ~ # cp /usr/share/locale/en@quot/LC_MESSAGES/grub.mo /boot/efi/EFI/grub/locale/en.mo
PC起動時に実行させるため/EFI/BOOT/bootx64.efiにgrubをコピー。
root@archiso ~ # mkdir -p /boot/efi/EFI/BOOT root@archiso ~ # cp /boot/efi/arch_grub/grubx64.efi /boot/efi/EFI/BOOT/bootx64.efi
/boot/efi/EFI/grub/grub.cfgを以下のように設定する。rootで指定するのはgrubが認識しているデバイス(hd0,gpt2)で、knetbsdで指定するのはNetBSDが認識するデバイス名なのでdk1になる。
# Timeout for menu set default=5 menuentry "NetBSD" { insmod efi_gop set root=(hd0,gpt2) knetbsd /netbsd --root=dk1 boot }
なお、"insmod efi_gop"はつけ忘れると以下のようなメッセージがでてそれ以降なにも表示されなくなる。
error: no suitable video mode found. Booting in blind mode
これでインストール作業は全て完了。仮想マシン設定でEFIを有効にして起動させるとGLUB2のメニューが面が表示される。
"NetBSD"を選んでEnter(他に選択肢はないが)すると数秒後に起動。
おつかれさまでした。