2013年7月5日金曜日

Windows8+UEFIなPCでUbuntuをデュアルブートした

職場内部的にはまとめを書いておいたのだけど、もうちょっと世の中的に見える場所に書いておいた方がよさげなのでブログに書く。

目標は「タッチパネル搭載のWindows8マシンにUbuntuを入れる」。対象機種は2012年10月発売のSony VAIO T (SVT1312AJ)。いわゆるUEFI対応の機種で、ディスクもGPTで管理されている。Secure bootはenabledのままで実施。

2013年4月段階で、Canonicalは公式に「UEFIマシンに対してWubiは使うな、12.04.2か12.10の64ビット版を使ってインストールせよ」と指定。 32ビット版はUEFIを認識しないらしい。ここではUbuntu 13.04 (raring)のLiveUSBを使用する。
  1. まずWindows8上のディスクパーティションツールで、Cドライブを減少させて20GB程度の未使用領域を作成。リカバリ領域やツールなどが個別のパーティションに入っていて既に5つくらいあるが気にしない(もしディスクがMBR方式で管理されている場合、当然こんなにパーティションが分かれてたらUbuntuが入らない)。 
  2. Windows8のデスクトップでマウス右上端に移動→設定→コントロールパネル→ハードウェアとサウンド→電源オプション→電源ボタンの動作の変更→「現在利用可能ではない設定を変更します」→高速スタートアップを有効にするのチェックを外す。
  3. USBから起動し、LiveUSBのgrubメニューから「Try Ubuntu」を選択(ここではInstallを選ばない)。
  4. Liveデスクトップ上のInstall Ubuntuアイコンをクリックし、インストール開始。
  5. Windows 8 とは別に Ubuntuをインストール、という項目を選択。
  6. 未使用領域があれば、そこに勝手にパーティションを作ってインストールが続行される。無い場合はパーティションエディタが起動する…と思う(未確認)。
インストールが完了すると、再起動時にgrubの選択画面が表示され、Ubuntuを選択した場合は普通に起動する。 しかしWindows 8を選択しても起動しない(VAIO以外の機種では、そもそもgrubが表示されない事例がある)。

Windows 8 搭載のVAIOの場合、電源OFFからASSISTボタンを押すことでEFIメニューが表示され、そこで強制的にWindows 8を起動できる。ただしこの方法をやると、今度はgrubが見えなくなる。

grubからUbuntuを起動できた場合、以下の方法でUbuntu/Windows 8を選択可能なgrub.cfgを作成する(基本的にはここの情報に基づく)。

  1. EFIシステムパーティション(ESP)のUUIDを以下のように取得する。
    $ sudo grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
    5678-9ABC (←この出力を記録)
    $
  2. EFIのsearchコマンドで必要なヒント情報を取得する。
    $ sudo grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
    --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 (←記録)
    $
  3. 上記1.2.の結果に基づいて、/etc/grub.d/40_customに以下の設定を追記する。 (/boot/grub/grub.cfgに同じ記述を書いてテストすることが可能だが、カーネルのアップデートがあるとgrub.cfgが書き換えられるので、最終的には上記設定ファイルに書いておくべき。)
    menuentry "Windows UEFI-GPT"
       {
         insmod part_gpt
         insmod fat
         insmod search_fs_uuid
         insmod chain
         search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 5678-9abc chainloader /efi/Microsoft/Boot/bootmgfw.efi
       }
  4. 以下のコマンドでgrub.cfgを更新する。
    $ sudo update-grub
ただしこれではうまく行かない事例も散見される(BIOS設定を変えるなど、ちょっと前提条件が違ってるケース)。

0 件のコメント:

コメントを投稿