ASUSノートPC X202E: EFIによるScientific Linux6.4とWindows8のマルチブート

前回のUbuntu13.04に続き、今回は今年、2013年3月28日にリリースされたScientific Linux6.4のインストール手順のポイントを書きます。(Scientific LinuxはRHELのクローンなので、同じくクローンのCentOS6.4でも同じ手順でできるはずです)

[ インストールメディア ]

理化学研究所のサイトからScientific Linux6.4の64ビット版ISOイメージをダウンロードし、DVDに焼いて、外付けUSBドライブでインストールしました。
http://ftp.riken.jp/Linux/scientific/6.4/x86_64/iso/SL-64-x86_64-2013-03...

[ EFIの設定 ]

  • DVDからのインストール時はCSMはenableに設定する
    インストール後はdisableに設定する
    インストール後にFedora19のDVDからRescueモードで立ち上げて作業する時(後述)、作業完了後にScientific Linux6.4を立ち上げる時はCSMはdisableに設定する

  • SecureBootはdisableに設定する。
    Scientific Linux6.4の起動時に「Secure boot not enabled」と表示される

  • インストール後にEFIからScientific Linux6.4のブートローダを起動する場合は、EFIの設定画面のBoot Option Prioritiesの設定で、Scientific Linux6.4のブートエントリを最上位に設定する。 (参考)→[EFI設定画面 - CSMとBoot Option Prioritiesの設定]

  • [ パーティション ]

    Windows8のData(D:)ドライブは空なので、この258GBのパーティションを削除し、出来た空き領域をLinuxのパーティションとして利用しました。

    「コンピュータ」の画面の抜粋

    「ディスクの管理」の画面の抜粋

     ↓ Dada(D:)のパーティションを削除

    Scientific Linux6.4をインストールして立ち上げた後のパーティションは次のようになりました。
    GPT(GUID Partition Table)対応のコマンドとしては parted があります。
    fdiskコマンドはGPTに対応していません。

    # parted -l
    モデル: ATA Hitachi HTS54505 (scsi)
    ディスク /dev/sda: 500GB
    セクタサイズ (論理/物理): 512B/4096B
    パーティションテーブル: gpt
    
    番号  開始    終了    サイズ  ファイルシステム  名前                          フラグ
     1    1049kB  316MB   315MB   fat32             EFI system partition          boot  ← Windows8が利用するEFIシステムパーティション
     2    316MB   1259MB  944MB   ntfs              Basic data partition          hidden, diag
     3    1259MB  1394MB  134MB                     Microsoft reserved partition  msftres
     4    1394MB  201GB   200GB   ntfs              Basic data partition         ← Windows8
     6    201GB   234GB   32.5GB  ext4                                            boot  ← Scientific Linux 6.4
     7    234GB   235GB   839MB   linux-swap(v1)                     ← Linux swap
    ...(途中省略)...
     5    479GB   500GB   21.5GB  ntfs              Basic data partition          hidden, diag
    

    注)
    インストール時のカスタムパーティションの設定で、Windows8による既存のEFIパーティション(/dev/sda1)を/boot/efiにマウントするように設定しました。
    このパーティションにブートローダ/boot/efi/EFI/redhat/grub.efiがインストールされます。
    間違ってフォーマットにチェックを入れないように注意します。(フォーマットにチェックを入れるとWindows8のブート関連のファイルが消えます)
    Scientific Linux6.4独自のEFIパーティションを設定することもできます。

    # df -T -x tmpfs -x rootfs -x devtmpfs
    Filesystem    Type   1K-ブロック    使用   使用可 使用% マウント位置
    /dev/sda6     ext4    31245232  20270036   9387996  69% /
    /dev/sda1     vfat      303104     72148    230956  24% /boot/efi
    
    # ls -l /boot/efi/EFI/redhat/grub.efi          ← Scientific Linux6.4のブートローダ
    -rwx------ 1 root root 251274  2月 27 01:30 2013 /boot/efi/EFI/redhat/grub.efi
    # ls -l /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi    ← Windows8のブートローダ
    -rwxr-xr-x. 1 root root 1354480  7月 25 05:57 2012 /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
    

    [ EFIブートエントリの作成とgrub.confのコピー ]

    Scientific Linux6.4のカーネルはEFIに対応し、grubパッケージにはEFI対応のブートローダも含まれています。

    # grep CONFIG_EFI /boot/config-2.6.32-358.el6.x86_64
    CONFIG_EFI=y
    CONFIG_EFI_VARS=y
    CONFIG_EFI_PARTITION=y
    
    # rpm -ql grub | grep efi
    /boot/efi/EFI/redhat
    /boot/efi/EFI/redhat/grub.efi
    

    しかし、インストール後にGRUBからすぐには起動はできず、GRUBの設定ファイルgrub.confのコピーと、EFIから起動したLinux上でefibootmgrコマンドによるEFIブートエントリへの登録が必要です。
    これには以下のようにFedora19のISOイメージを焼いたDVDで、Rescueモードで立ち上げると作業がしやすいと思います。
    手順:
    1. EFIの設定でCSMをdisableにし、Fedora19のDVDを起動
    2. メニュー画面で[ Troubleshooting -->] から [ Rescue a Fedora system ]を選択
    3. [ System to Rescue ]画面が表示されたら、インストールしたScientific Linux6.4を選択
    4. シェルプロンプトで以下のコマンドを実行

    # chroot /mnt/sysimage
    # efibootmgr -c -p 1 -l '\EFI\redhat\grub.efi' -L sl6.4
    # cp /boot/grub/grub.conf /boot/efi/EFI/redhat
    
    参考:
    efibootmgrコマンドはEFIのNVRAMに保持されるブートエントリの表示、登録、削除を行うことができます。
     -c エントリの作成、-p パーティション番号、-l ローダの名前(パス)、-L エントリラベル(←適当な名前を付ける)

    「# efibootmgr」あるいは「# efibootmgr -v」でブートエントリの表示ができます。
    「$ man efibootmgr」が参考になります。

    以上の作業が終わったらシステムを再起動し、EFI設定画面のBoot Option Prioritiesで、上記で設定したブートエントリ[sl6.4]を最上位に設定し(上記のefibootmgrコマンドでも優先順位の変更が可能)、USB-DVDドライブを外して、起動するとScientific Linux6.4のGRUBのメニュー画面が表示されます。

    注)
    USB-DVDドライブを接続したままで起動しようとすると、以下のメッセージが表示されたり、画面に何も表示されなかったりして、Scientific Linux6.4を立ち上げることができません。理由不明。。

    grub_open(("(hd0,6)/grub/splash.xp.gz") failed
    Error 5: Partition table invalid or corrupt

    [ grub.cfgの設定 ]

    インストール後のgrub.confではWidnows8を起動できません。以下のように書き換えます。

    title Windows8
    	rootnoverify (hd0,0)
    	chainloader /efi/Microsoft/Boot/bootmgfw.efi
    

    [ イーサネットI/Fドライバの組み込み ]

    X202Eには無線LANとイーサネットのコントローラチップが搭載されています。
    このうち無線LANのドライバ ath9k.ko は入っているのでそのまま使えますが、イーサネットコントローラのドライバ alx.ko がScientific Linux6.4には入っていないので使えません。

    # lspci | tail -2
    02:00.0 Network controller: Atheros Communications Inc. AR9485 Wireless Network Adapter (rev 01)
    03:00.0 Ethernet controller: Atheros Communications Inc. AR8162 Fast Ethernet (rev 10
    
    alx.koはELRepoプロジェクトで提供されているので、そこからダウンロードしてインストールしました。
    手順:
    # rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
    # yum install kmod-alx
    # rpm -q kmod-alx
    kmod-alx-0.0-7.el6.elrepo.x86_64
    # find /lib/modules -name alx.ko
    /lib/modules/2.6.32-358.el6.x86_64/extra/alx/alx.ko
    # modprobe alx
    # lsmod | grep alx
    alx                    29190  0 
    mdio                    4769  1 alx
    # ifconfig
    eth0      Link encap:Ethernet  HWaddr 60:A4:4C:70:01:33  
              inet addr:172.16.210.150  Bcast:172.16.255.255  Mask:255.255.0.0
    ......
    wlan0     Link encap:Ethernet  HWaddr 6C:71:D9:2F:2E:E9  
              inet addr:172.16.210.151  Bcast:172.16.255.255  Mask:255.255.0.0
    ......
    

    [ Windows8の設定 ]

    Linuxをインストールした後、Windows8を立ち上げるとLinuxのパーティションが適当なドライブ文字を付けて表示されます。
    誤ってアクセスして壊したりしないように非表示に設定しました。

    手順:
    「ディスクの管理」画面 → パーティションにポインタを合わせて右クリック → 「ドライブ文字とパスの変更」 → ドライブ文字を削除