2014/04/03

2014版 VAIO Pro (SVP1322A1J) で Arch Linux と Windows 8.1 を デュアルブートする

VAIO Pro 13インチを買いました。
こいつです


初めてのWindows8.1です。
そして、ひとしきり楽しんだ後はやっぱりLinuxを入れたいですね。
そんなときはArch Linuxがおすすめです。

しかし、VAIO ProにArch、もといLinuxを入れるのはなかなか手こずるようで
自分も苦労しました。
なので、メモ書きとして残しておきます。

さて、まずはWindowsを普通に起動してパーティションの縮小です。
自分はWindows 100GB, Arch 100GBくらいにしました。

この時に、高速スタートアップを無効にしておきます。
これをしておかないとインストールはできますがインストール後に一度Windowsを起動するとArchもWindowsも起動できなくなってしまいます。
場所は、コントロールパネル→電源オプション→カバーを閉じた時の動作の選択(左側)→シャットダウン設定の中にあります。
ここでチェックボックスのチェックを外しておきましょう。

基本的にはInstallation Guide (日本語)を参考に進めていきます。
インストール用のUSBインストールディスクを作ります。
isoからddコマンドとかで普通に作れば問題ないです。

そして、BIOS設定で
AT Support System: disabled
Secure Boot: disabled
External Media: enabled
に変更します。
更にブート順序をExternal Mediaを一番上にします。
これらを保存してUSBを挿した状態で起動するとUSBからブートすることができます。
この時に稲妻マークのUSBポートだとうまくできないとかなんとか。

さて、ここで大事なポイントがありまして、ブートローダのオプションとして
一瞬の選択画面で"e"を押して、libata.force = noncqを追加してください。
これがないとSSDがエラーを起こしてすごく遅くなります。

起動後に縮小してできたあまりのエリアをgdiskで切り分けましょう。
gdiskはfdiskのGPT版らしいです。
そのあと、
% mkfs.ext4 /dev/sdaX
のようにフォーマットに掛けます

Arch用のパーティションは/と/homeに分割します。
また、デュアルブートするのでWindows用に標準で存在するEFIパーティションシステムであるsda3を/bootとして使用します。

そしたらマウントです。
自分の環境だとこんなんでした。
このときhomeとbootは無いので作成します。
% mount /dev/sda7 /mnt
% mount /dev/sda8 /mnt/home
% mount /dev/sda3 /mnt/boot
で、ここで無線LANを接続します。
% wifi-menu
を使うと簡単につなげます。

インターネットに接続できたのでこれからインストールするミラーをより早いところに接続するようにします。
% cd /etc/pacman.d/
% cp ./mirrorlist ./mirrorlist.original
% rankmirrors -n 5 > ./mirrorlist
次にArchのベースシステムをインストールします。
この時、再起動してからwifi設定できるように2つのパッケージを追加で指定しておきます。
% pacstrap /mnt base base-devel dialog wpa_supplicant vim
しばらく時間がかかるので放っておきましょう。
これが終わったらfstabを設定します
genfstab -U -p /mnt >> /mnt/etc/fstab
USBブート環境はここまでです。

% arch-chroot /mnt
を実行してインストールした新しい環境に切り替えましょう。

切り替え後は、まずHostnameを設定します。
適当なエディタで
% vim /etc/hostname
を編集して好きな名前を設定しましょう。

そして、タイムゾーンを日本にします
% ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
言語も日本語を有効にしておきましょう
% vim /etc/locale.gen
でen_US.UTF-8とja_JP.UTF-8のコメントアウトを解除します。
そしたら
%locale-gen
をして反映させ、
%/etc/locale.conf
LANG="ja_JP.UTF-8"と書き込みます。
次にrootのパスワードを設定します。
% passwd

さて、ここからが大事なところです。
ブートローダにはgrubを使用します。
% pacman -S grub efibootmgr
% grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
これで/bootにgrubの設定ファイルもろもろができます。
そして、冒頭で設定したブートオプションをgrubにも追加します。
% vim /etc/default/grub
で開いてGRUB_CMDLINE_LINUX_DEFAULTlibata.force=noncqを追加します。
% grub-mkconfig -o /boot/grub/grub.cfg
次にブート時に読み込まれるWindwos用ファイルをgrubが生成したものに差し替えます。
この時、元のファイルは控えて起きます。
% cp /boot/EFI/Microsoft/Boot/bootmgfw.efi /boot/EFI/Microsoft/Boot/bootmgfw.efi.original
% cp /boot/EFI/grub/grubx64.efi /boot/EFI/Microsoft/Boot/bootmgfw.efi
実際、この辺自分もよくわかってないのですが、VAIO Proは手が加えられているようで
普通のUEFIのファイルとは場所が違うそうです。
それが原因ですんなり起動できないのかなーと。

はい、とりあえず、ここまででArchの起動は可能です。
しかし、grubにWindowsが表示されないです。(される人もいるとか)

ですので、grubのメニューエントリを追加しましょう。
% grub-probe --target=fs_uuid /boot/EFI/Microsoft/Boot/bootmgfw.efi.original
>> AEF2-4537

% grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi.original
>> --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3
この2つの出力結果を以下のように/etc/grub.d/40_customに追記します。
menuentry "Windows 8" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 AEF2-4537
    chainloader /efi/Microsoft/Boot/bootmgfw.efi.original
}
で、grubの設定を更新します。
% grub-mkconfig -o /boot/grub/grub.cfg
これで一番下にWindows8という項目が追加されたかと思います。

デュアルブートについてはこれで以上です。

おまけとして、無線LANの設定を書いておきます。
wifi-menu -o
を実行して、無線LANを有効可します。
このときに自動で/etc/netvtl/SSID名というファイルが作成されます。
このファイルにハイフンが含まれていると良くないので適当に名前を変えておきます。
そして、
% netctl enable 変えたSSID名
とすると次回起動時から自動で接続してくれます。
ここに書いたのはとりあえずなやり方なのでnetctlのページを見ることをおすすめします。


以下、参考にしたURLです。
大変助かりました。ありがとうございます。