Windows10とUbuntu16.04のデュアルブート環境構築

#はじめに
備忘録的なもの。
参考にさせて頂いた以下のサイトの内容を自分の環境で実行したときのまとめ。

[Ubuntu16.04 + Windows10 のデュアルブート環境を構築する](http://www.iandprogram.net/entry/2015/09/15/115918)
[UEFIやセキュアブートの勘違いしやすい設定30個 まとめ](https://freesoft.tvbok.com/tips/efi_installation/uefi_28_important.html)
[Ubuntuでブートの設定を変更する](http://robotics4society.com/2016/06/15/ubuntu-boot/)

- 環境
    - ThinkPad X1 Carbon (2017ver.)
    - Core i7-7500U
    - 16GB LPDDR3
    - 512GB SSD PCIe-NVMe

Windows10インストール済みの前提。
また、UEFIがサポートされている場合は高速スタートアップを無効にしておく。
（コントロールパネルから無効にする）

#1. USBメモリの用意
USBメモリからUbuntuをブートして、その環境からPCにインストールを行う。
なので、まずはUSBメモリにブートイメージを書き込む作業を行う。

**・isoファイルのダウンロード**
下記リンク先からUbuntu16.04 LTSのisoファイルをダウンロードする。
[Ubuntu 16.04.3 LTS] (http://releases.ubuntu.com/16.04/)


**・USBメモリのフォーマット**
USBメモリはFAT32でフォーマットしておく。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/196604/e650ff88-bd64-9381-6eed-86fca7c6ebdb.png)

**・USBメモリへの書き込み**
UNetbootinを使ってisoファイルをLiveCDとしてUSBメモリに書き込む。
[UNetbootin, Universal Netboot Installer](https://ja.osdn.net/projects/sfnet_unetbootin/)

ダウンロードしたisoファイルを指定し、タイプをUSBドライブにしてOK。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/196604/0924f090-6d27-9ff8-36a3-7e4c3525046e.png)
結構時間がかかった。

これでUbuntu16.04 LTSを起動できるUSBメモリ（LiveCD）の用意が出来た。
#2. パーティションの確保
UbuntuをインストールするHDD（もしくはSSD）領域の確保、つまりパーティション分割を行う。
タスクバーのWindowsアイコンを右クリックし、ディスクの管理を開く。

Windows(C:)を右クリックしてボリューム縮小を実行。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/196604/06d3b36f-da2a-0ecc-6eb8-c83822f2bbc9.png)
縮小可能な最大値でボリューム縮小したらCドライブの容量が大体半分になった。

#3. Ubuntuの起動
USBメモリを差して再起動。BIOSを起動する。
BootのPriorityを設定してWindows Boot ManagerよりもUSBメモリの優先度を高くする。これで先ほどのUSBメモリが読み込まれるようになる。また、Secure Boot をdisabled、CSMをenabledにしておく。こうしないとwindows10起動時にBitLockerの回復キーを要求される。（これで少しばかりハマった）

![ファイル 2017-09-06 0 32 22.jpeg](https://qiita-image-store.s3.amazonaws.com/0/196604/240f7406-e743-453d-2266-629aca5020d9.jpeg)
ThinkPad X1 Carbonだとこんな感じだった

再起動するとUSBがBootされGRUBが開くのでTry Ubuntu without installingを選択する。

#4. Ubuntuのインストール
Ubuntuの起動が確認できたらインストールを行う。
ネットワークに接続したら、デスクトップ上に用意されてあるInstall Ubuntu 16.04.3 LTSを開く。

Installation typeではSomething elseを選択。
パーティション分割で確保しておいた領域（free space）を選択。＋ボタンを押し、初めにスワップ領域を設定する。

```
Size : お好み（メモリが4GB以下の場合は最低でも4GBは確保した方が良い）
Type for the new partition : Logical
Location for the new partition : End of this space
Use as : swap area
```
スワップ領域とは、二次記憶上にメモリ空間を拡張する際のメモリとして割り当てる二次記憶上の領域のこと。私の環境だと主記憶（メモリ）が16GBあるが、二次記憶に余裕があるため一応4GBほど確保しておいた。スワップ領域をどの程度確保すれば良いかは、結局のところそのOS上で何をするのかによる。通常の利用だとメモリが16GBあればスワップ領域なしでも問題ない。

残りの領域（free space）をもう一度選択し、＋ボタンを押す。
Ubuntuで使用する領域を設定する。

```
Size : 残りの全て
Type for the new partition : Primary
Location for the new partition : Beginning of this space
Use as : Ext4 journaling file system
Mount point : /
```

Install Nowを押してインストールを開始する。

#5. GRUBの設定
以上でUbuntuのインストールは完了し、デュアルブートの環境は整った。再起動してBIOSを開き、BootのPriorityをUbuntuが一番上に来るように設定する。するとPC起動時にGRUBが開き、OSやConfigの選択画面が出てくるようになる。しかし、初期カーソルの位置がUbuntuになっているため、時間経過で勝手にUbuntuが起動してしまう。私は普段Windowsを使っているので、電源ボタンを押して放置しているとUbuntuが起動してしまうのは使い勝手が悪い。

なので、初期カーソルの位置と起動までの時間を設定する。
Ubuntuを起動してターミナルを開き(Alt+Ctrl+t)、以下のコマンドを実行する。

```sh:
$ grep windows /boot/grub/grub.cfg
```

これでWindows10のブートローダ名が分かる。
私の場合は'Windows Boot Manager (on /div/nvme0n1p1)'だった。

次に適当なテキストエディタでGRUBの設定ファイルを開く。

```sh:
$ sudo gedit /etc/default/grub
``` 

以下のように書き込む。また、設定ファイルではタイムアウトの時間も変更できる。

```
GRUB_DEFAULT='Windows10のブートローダ名'
GRUB_TIMEOUT=任意の秒数
```

編集が完了したら保存して、以下のコマンドでGRUBに設定を反映させる。

```sh:
$ sudo update-grub
```

以上で、PC起動時にGRUBが開かれた際の初期カーソル位置がWindowsになるように設定された。

# 追記 2019-02-27
上記の手順で構築したデュアルブート環境において、Windows Updateを実行した際にGRUBが正常に起動しなくなる現象が起きました。これに関して、以下のサイトに解決方法をまとめましたので、同じようなことがありましたらご参考下さい。

[Windows10+Ubuntu16.04LTSのデュアルブート環境でGRUBが起動しなくなった](https://blog.medalotte.net/archives/406)