2013年7月5日金曜日

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

Windows8+UEFIなPCにUbuntuを入れる苦闘の続き。

前述の方法では、grub画面が表示されずそのままWindows8の起動シーケンスに進んでしまう例が見られた(2013春モデルのVAIO E, VAIO Tで確認)。

grubメニューでUbuntuを選んでいる限りはgrubが有効になっているが、いったん有効なWindowsエントリを選択するとそれ以降はgrubメニューを経ることなく、常にWindowsが起動してしまう。

まずgrubを復活する(見える状態に戻す)方法。BIOS設定でUEFIモードをOFFに(VAIOの場合は "Legacy" を選択)して再起動すると、"Operating System not Found"と言われるが、ここで電源ボタン長押しで強制終了する。次にASSISTボタンでBIOS設定を開いて設定をUEFI ONに戻すと、次の再起動時にはなぜかgrubメニューが再び表示される。面倒。

そこでBoot-Repairを導入して試してみた。 ここではBoot-Repair導入の説明のうち、リポジトリを追加してapt-getする方法を採用。
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && (boot-repair &)
これで起動したBoot-Repairで "高度なオプション" を選択し、"バックアップを取ってファイル名を変更" にチェックが入っていることを確認して適用すると、必要なEFIイメージファイルをEFIパーティション上に適切な名前でコピーしてくれるっぽい。再起動すれば、「消えない」grubメニューが動く。
 
なお、この状態ではgrubメニューにやたらとリストが並ぶので、grub customizerを導入して整理するとよいかも知れない。

なお、以上の方法は基本的にUbuntu 13.04 amd64に入っているEFI対応grub2を使ってブートする話であり、rEFIndで対応する方法は模索中。rEFIndの作者はBoot-Repairが若干おかしい挙動をしている旨を指摘しているので、そこも検討する必要がある。

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設定を変えるなど、ちょっと前提条件が違ってるケース)。

英語配列のノートPCで日本語配列設定にしちゃった時に、アンダースコアを入力するTips

US配列のLG gram SuperSlimを購入した。で、Windowsの初期セットアップを始めたところ、最初に選択できるキー配列はMicrosoft IME(まあ要するに日本語配列)だけ。で、その後に「追加のキー配列」を選択できるのだが、後でやればいいやと思ってスルーしてしま...