
Ubuntu日本語フォーラム

ログインしていません。
ubuntu 10.10 (64bit) をmacbook pro (late 2008、macbookpro5,1、64bit EFI)の pci express card (32gb ssd、外付けhdd扱い)にインストールしてみました。内蔵hdd (500gb) に既にいくつかパーティションを切っていて、
/dev/sda1 EFI
/dev/sda2 MacOSX 10.6.5
/dev/sda3 hfs+ データ領域
/dev/sda4 Windows 7
となってます。このため、pci express の sdd (/dev/sdb) にubuntuをインストール (/dev/sdb3)しても、option 起動や rEFIt を利用しても、うまく起動できませんでした。
rEFIt は http://refit.sourceforge.net/ からダウンロードできます。
pci express sdd のパーティション
/dev/sdb1 EFI
/dev/sdb2 hfs+ (rEFIt をインストール)
/dev/sdb3 ubuntu10.10
/dev/sdb4 swap
rEFIt を立ち上げると、ubuntuも見えない状態です。しかし、内蔵hddを1パーティションのみにして、MacOSXだけをインストールした状態なら、rEFIt (/dev/sdb2 にインストール)で /dev/sdb3 の ubuntu を立ち上げることが出来ます。それで、EFI boot に挑戦してみました。
http://grub.enbug.org/TestingOnMacbook に従いました。
grub1.99 beta0 のコンパイル
sudo apt-get install bzr autoconf flex autogen bison
bzr branch --revision -1 http://bzr.savannah.gnu.org/r/grub/trunk/grub
cd grub
./autogen.sh
./configure --with-platform=efi --target=x86_64 --program-prefix=""
make
おしまいの方のdocsのところでエラーが出たので、該当箇所はコメントアウトしてコンパイルを完了させました。
コンパイル完了後、
./grub-mkimage -d . -o grub.efi part_gpt hfsplus fat ext2 normal sh chain boot configfile linux
/dev/sdb はGUID でパーティションしてます(OSX のディスクユーティリティを利用)ので、/dev/sdb1 は EFI パーティションになってます。このパーティションをubuntu にマウントします。
sudo mkdir /mnt/EFIDISK
sudo mount /dev/sdb1 /mnt/EFIDISK
sudo mkdir -p /mnt/EFIDISK/EFI/BOOT
上記 grub のコンパイルディレクトリに戻り、コンパイルしたものをEFIパーティションにコピー。
Apple bootloader を使うために、grub.efi は BOOTX64.EFI という名前にする。
cd ~/grub/grub-core
sudo cp grub.efi /mnt/EFIDISK/EFI/BOOT/BOOTX64.EFI
sudo cp *.mod *.lst /mnt/EFIDISK/EFI/BOOT
sudo touch /mnt/EFIDISK/EFI/BOOT/grub.cfg
grub.cfg の中身です。
*******ここから
set debug=video
insmod efi_gop
menuentry "ubuntu 10.10 (with bios dump)" {
search --set -f /vmlinuz
loadbios /boot/vbios.bin /boot/init10.bin
linux /vmlinuz root=/dev/sdb3 video=efifb
initrd /initrd.img
}
menuentry "ubuntu 10.10 (without bios dump)" {
search --set -f /vmlinuz
fakebios
linux /vmlinuz root=/dev/sdb3 video=efifb
initrd /initrd.img
}
*******ここまで
この中にある、vbios.bin、init10.bin は
sudo dd if=/dev/mem of=/boot/vbios.bin bs=65536 skip=12 count=1
sudo dd if=/dev/mem of=/boot/init10.bin bs=4 skip=16 count=1
として作ります。
これでoption 起動すると、ubuntu が立ち上がりますが、Xは立ち上がりません。コンソールに落ちます。
そこで、/etc/X11/xorg.conf の
Section "Device"
Identifier "Default Video Device"
Driver "nvidia"
BusID "PCI:3:0:0"
EndSection
のように変更します(BusID の行を追加)。
これでXも立ち上がるようになりました。
このようにして、EFI boot させることができるようになり、最初のパーティションがたくさんある内蔵hddに変えても、option 起動でubuntuを立ち上げることが出来るようになりました。grub.cfg の menuentry は2つありますが、どちらでも立ち上がります。
オフライン
ここに書いたgrub.cfgでは、rEFIt を削除してしまうと起動しなくなりました。また、ときどきシステムのルートを見つけられなくてBusyBoxに落ちるということも起こります。そこで、UUIDを使うことにしました。
menuentry "ubuntu (with bios dump) uuid" {
insmod part_gpt
insmod ext2
search --set --fs-uuid <uuid>
loadbios /boot/vbios.bin /boot/init10.bin
linux /vmlinuz root=UUID=<uuid> ro video=efifb
initrd /initrd.img
}
としておくと、uuidで起動するようになり、rEFIt を削除しても、起動に失敗することも減少しました。
uuid は ubuntu の blkid で調べます。
この過程で分かったのですが、/dev/sdb1 に置いた grub2 (grub.efi、名前はBOOTX64.EFI) で起動すると、このディスク(/dev/sdb3)は、(hd0,3) になります。また、ネット上には、menuentry で search --fs-uuid --set <uuid> としているものも多いのですが、こう書くとエラーになって起動しませんでした。上記のように、--fs-uuid の直後に<uuid>を書いておかないとエラーになりました。
これは、仕様の変更?、それともバグ?
オフライン
ubuntu のパッケージのgrub-efi-amd64 を試してみました。version は1.98です。
apt-get install grub-efi-amd64
しかし、探してもどこにもgrub.efiは見あたらない。それで、
grub-mkimage -O x86_64-efi -o grub.efi part_gpt hfsplus fat ext2 normal chain boot configfile linux
として作った。できた grub.efi を hfsplus のところにコピー。
sudo mkdir -p /media/refit/efi/grub
/media/refit は /dev/sdb2 でhfsplus になってます(macosx 拡張、ジャーナルオフ。ジャーナルオフにしておかないとubuntuから書き込めない)
sudo cp grub.efi /media/refit/efi/grub
cd /usr/lib/grub/x86_64-efi
sudo cp *.mod *.lst /media/refit/efi/grub
grub.cfg もここにコピーしておく。
MacOSX にして、ターミナルで、
sudo bless --folder=/Volumes/refit --file=/Volumes/refit/efi/grub/grub.efi --setBoot
これでオプションキーを押しながら起動すると、EFI Boot が2つ見えるようになりました(一つは、従来のgrub 1.99 のもの)。しかし、ubuntu からダウンロードした grub 1.98 ではinitrd が見つからないと出て起動しませんでした。
同じ方法で、今までの grub 1.99 に置き変える(もちろんモジュールなども全部1.99のもの)と、うまく起動しました。
ubuntu 謹製の grub 1.98 では、うまく起動しないようです。
オフライン