twitterよりちょっと長いの

せっかくだから書き残すよ。

Arch LinuxとWindows 10をデュアルブートした話

Arch linuxWindows 10デュアルブートを目指す。
私自身は普段お世話になっていたUbuntu 15.10のサポートが切れそうなのとArch Linuxが気になっていたので今回インストールに踏み切った。

f:id:AIN0204:20160729022027j:plain

賢明な諸兄らには説明不要であると思うが、Arch Linuxは最小限のパッケージしかないシンプルな状態から始まる。そのため、システム全容が比較的把握しやすい(多分)。さらには、インストールから運用まですることで、Linuxの勉強になるのではないだろうか。

さて、すごく気になるのでインストールしたいのだが、今までお世話になっていたUbuntuとは異なりグラフィカルなインストーラはない。困った。その辺は、まぁ、頑張る。

なお、この記事のみ読んでインストールすべきではない。ファミ通の攻略本じゃないので大丈夫じゃない。ArchWikiを読んでインストールしよう。

基本的にビギナーズガイドのとおりに進めた。見出しもビギナーズガイドから引っ張ってきているので、見出しは対応している。

私の環境

使うのはThinkPad X1 Carbon (3rd gen)。Windows 10がプリインストールされている。

同機種かつ似た環境でArch Linuxデュアルブートしている方が既にいた。安心してインストールできた。ありがとうございました。

事前の準備

さて、準備が済んだらUSBメモリからブートして作業を始めよう。

環境の確認

Wiki読んで進めるにしても、BIOS環境かUEFI環境か、パーティションテーブルはMBRなのかGPTなのかなのかが分からないと困るので、まず確認。

BIOS環境かUEFI環境か

"/sys/firmware/efi"があるか否かを調べる。

パーティションテーブルがMBRなのかGPTなのか

以下のコマンドで確認できる。

# parted /dev/sdx print

私はGPTとUEFIの環境なのでそれで話を進める。

言語の選択

キーボードレイアウトの変更

# loadkeys jp106

ロケールの変更

# nano /etc/locale.gen

"en_US.UTF-8 UTF-8", "ja_JP.UTF-8 UTF-8"をコメントアウトから外す

# locale-gen
# export LANG=en_US.UTF-8

Wikiでは"ja_JP"になっているが、後のcfdiskで豆腐■が出現するのでen_USにしておく。

インターネット接続の確立

有線接続で作業していたので特に何をするでもなく繋がった。
以下のコマンドで確認できる。

# ping -c 3 www.google.com

インターフェースは以下のコマンドで確認できる。

# ip link

時計を合わせる

# timedatectl set-ntp true

ドライブの準備

バイスの確認

以下のコマンドですべてのデバイスを確認する。

# lsblk

インストール可能なデバイスは以下のコマンドで確認できる。

# lsblk | grep -v "rom\|loop\|airoot"

以下のsdxという表現を使うが、このxはデバイスによって異なるので適宜読み替える。

なお、目指すべくはデュアルブートなので、この段階で既にパーティションがいくつかあり、Windows 10パーティション、リカバリ領域などが確認できる。Windows 10の「回復ドライブ」は用意してあるが、リカバリ領域だけは触らないように。*1

新しいパーティションテーブルの作成

前述の通りパーティションテーブルはGPTである。

パーティションは以下のコマンドで作成した。グラフィカルな感じで使いやすい。

# cfdisk /dev/sdx

必要なパーティションは以下の4つである。

  • /boot
  • /
  • swap
  • /home

ただ、今回は既にWindows 10によってEFIブートパーティションが用意されている。そのため、/bootは新しく作る必要は無く、空いているパーティションを以下3つのパーティションに分ける。なお、参考までに空きパーティションは188GBで、それを以下の通りに分けた。

  • / : 20GB
  • swap : 8GB
  • /home : 160GB

ファイルシステムの作成

以下のコマンドでパーティションが用意できているか確認する。

# lsblk /dev/sdx


swapパーティション以外(/と/home)のファイルシステムを作成する。*2 XFSというシステムもあるみたいだが、見慣れているext4を採用。

# mkfs.ext4 /dev/sdxY

スワップの有効化

swapパーティションを有効化する。

# mkswap /dev/sdxY
# swapon /dev/sdxY

パーティションのマウント

まず最初に/をマウントする。その後、他の/bootと/homeをマウントする。前述のとおり、/bootは既にあるEFIブートパーティションを使う。この辺が正直あまり分かっていないのだが、調べたところによると、このEFIブートパーティションを/bootか/boot/efiにマウントすればいいようだ。*3今回はwikiの方を採用して/boot/efiにマウントした。それを踏まえてコマンドは以下の通り。

# mount /dev/sdxR /mnt
# mkdir -p /mnt/boot/efi
# mount /dev/sdxB /mnt/boot/efi
# mkdir -p /mnt/home
# mount /dev/sdxH /mnt/home

マウント位置などは以下とかを参考に。

ミラーを選択

jaistの行を探して、一番上に持ってくる。

# nano /etc/pacman.d/mirrorlist

ベースシステムのインストール

# pacstrap -i /mnt base base-devel

fstab の生成

# genfstab -U /mnt >> /mnt/etc/fstab

生成したfstabファイルを確認。

# cat /mnt/etc/fstab

Chroot とベースシステムの設定

システムに入る。

# arch-chroot /mnt /bin/bash
ロケール
# nano /etc/locale.gen

以下の行をコメントアウトから外す

# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
コンソールフォントとキーマップ
# nano /etc/vconsole.conf

以下のように編集

KEYMAP=jp106
FONT=lat9w-16
タイムゾーン
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
ハードウェアクロック
# hwclock --systohc --utc
ホスト名
# echo ホスト名 > /etc/hostname
# nano /etc/hosts

以下のように編集

#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost ホスト名
::1   localhost.localdomain localhost ホスト名
ネットワークの設定

注意書きに従ってこの段階では無線の設定はしない。既に接続されている有線を使う。

root パスワードの設定
# passwd
ブートローダのインストールと設定

前述の通りUEFI マザーボードの場合で進める。

# pacman -S intel-ucode dosfstools efibootmgr
# pacman -S grub

無論、/bootにマウントしたなら/boot/efiは/bootに読み替える。

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug

ここはこのページを参考にさせていただいた。

デュアルブート対応

これもこのページを参考にさせていただいた。

これでgrubWindows 10が表示されるはず。

# pacman -S os-prober
# grub-mkconfig -o /boot/grub/grub.cfg

パーティションのアンマウントと再起動

# exit
# reboot 

これでインストール完了で起動するとプロンプトが出てくるはず。GUIはまだ導入していないのでCUIだけである。

少し長くなったので、GUIの導入についてはまた書く。

*1:過去にリカバリ領域について嫌な経験があるようだ

*2:パーティションを分けた段階で既にext4になっていた気がするが念の為

*3:実はインストールに一度失敗している。多分これが原因ではないのだが、そのときは/bootにマウントした。そのため結果、両方試す結果になり、/bootパーティションが群雄割拠の大荒れ状態に。なんとかできないか。