端末セットアップ Windows10(Pre-installed)+FreeBSD

プリインストールされたWindows10のノートに、FreeBSD 12.0-RELをデュアルブートできるようにインストールしました。

UEFIまわり、Windows 10と他OSのデュアルブートにまつわるトラブルに詳しくないので、次にセットアップするときのために手順をまとめてみました。

# Windows10の回復ドライブを作成

何はともあれ、まずはこれ。32GBのUSBメモリに回復ドライブを作成します。この段階ではネットに繋げていません。完全にオフライン状態、初期インストール状態でやっています。

画像は省略。

USBメモリを挿入。検索窓に"回復"と入力して、回復ドライブを起動します。後は画面の指示に従うだけです。およそ1時間30分ほどかかって回復ドライブの作成が完了しました。

# MemTest86

いつもは[MemTest86](https://www.memtest86.com/)を使ってメモリテストを一晩中走らせています。今回はいち早くUEFIまわりのごたごたに突入したいので、メモリテストを省略します。

# USB起動ディスクの作成方法の確立

いつも使っている[Easy2Boot](http://www.easy2boot.com/)でUSB起動できるか試します。Easy2Bootは、複数の起動用ISOファイルを切り替えてUSBから起動するためのものです。パーティション変更([MBM](http://www.elm-chan.org/fsw/mbm/mbm.html))や緊急起動ディスクやインストールメディアなど、複数のISOイメージを一つのUSBメモリにまとめて入れておくことができるので重宝しています。しかし、UEFI環境で試すとうまく動きません。

ここで、冒頭で作成したWindows回復ディスクUSBを使用して色々確認してみます。UEFI画面はInsyde社製のものです。標準ブートマネージャーは、USBの活抜にリアルタイムで反応してくれるようです。Windows回復ディスクUSBを入れると、リアルタイムでUSBのブート領域が表示されます。Easy2BootのUSBは標準ブートマネージャーには認識されません。UEFI対応の部分で見えていない模様です。[正しくやればEasy2Bootでもできる](https://diary.palm84.com/entry/20141111/1415652199)のだろうと思います。しかしやってみたけどうまくいかず。

マルチISO切り替えは一旦諦めて、単独ISOファイルをUSB起動する方法を探します。いくつか試して[LinuxLive USB Creator](http://www.linuxliveusb.com/)がうまく動きました。これに決定します。

この試行錯誤の中で、[UEFIを勉強](https://orumin.blogspot.com/2014/12/whats-uefi.html)して、Secure Bootを無効化しています。本当は[もっと色々するべき](https://orumin.blogspot.com/2015/05/securebootlinux.html)なのだろうと思います。今回はパスです。

# パーティション変更

[FreeBSD](https://www.freebsd.org/)をインストールするパーティションを用意します。[GParted-0.33](https://gparted.org/)を使用します。

Windows上のパーティション初期状態は、以下のようになっています("ディスクの管理"の画像を省略)。
- EFIシステムパーティション (260MB)
- Windows 10 (930GB)
- Windows RE tools (990MB)

GParted上のパーティション初期状態は、以下のようになっています。
- EFIシステムパーティション (260MB)
- Microsoft reserved partition (16MB)
- Windows (930GB)
- Windows RE tools (990MB)

順番を変えると危険な気がするので、以下のようにしました。
- EFIシステムパーティション (260MB)
- Microsoft reserved partition (16MB)
- Windows (930GB⇒200GB、縮小)
- Windows RE tools (990MB、Windowsパーティションの縮小化に伴って前に移動)
- 共用 (残り、新規作成)
- FreeBSD (200GB、新規作成)
- 空き領域 (40GB)

最後の空き領域(40GB)は実験用領域です。色々OSインストール実験するなら40GBもあれば十分でしょう。

さて、Windowsを起動できるか確認します。OKです。"ディスクの管理"でも変更されたパーティションが見えています。大丈夫そうなので、次のステップに移ります。

# FreeBSDのインストール

起動USBを作成したもののうまく認識できません。LinuxLive USB CreatorはやっぱりLinuxしかダメなのか。

"FreeBSD 12.0-REL"のMemStick版を[Win32 Disk Imager](https://sourceforge.net/projects/win32diskimager/)で書き込んで起動すると、うまく起動しました。

Installを選択
Japanese 106を選択
Hostnameはlocalhostを指定
ports(Ports tree)とsrc(System source tree)を追加

UEFIになってからのパーティション作成を手動でやるほどの知識はまだありません。自動割り振りでどうなるか見てみます。

| Device | Type          | Size  | Mount Point | Label |備考|
|:-------|:--------------|------:|:------------|:------|:---|
| ada0p1 | efi           | 260MB |             |       |    |
| ada0p2 | ms-reserved   |  16MB |             |       |    |
| ada0p3 | ms-basic-data | 200GB |             |       |    |
| ada0p4 | ms-recovery   | 990MB |             |       |    |
| ada0p5 | ms-basic-data | 486GB |             | share |    |
| ada0p6 | efi           | 200MB |             |       |追加|
| ada0p7 | freebsd-ufs   | 240GB | /           |       |追加|
| ada0p8 | freebsd-swap  | 4.0GB | none        |       |追加|

UEFIになってからかなり変わったようです。スライスの概念がなくなったのでしょうか。それともMBRと比べてパーティション制約が緩くなったのでスライスは使われなくなったのでしょうか。自動割り当てを参考に手動割り当てし直します。

| Device | Type          | Size  | Mount Point | Label |備考|
|:-------|:--------------|------:|:------------|:------|:---|
| ada0p1 | efi           | 260MB |             |       |    |
| ada0p2 | ms-reserved   |  16MB |             |       |    |
| ada0p3 | ms-basic-data | 200GB |             |       |    |
| ada0p4 | ms-recovery   | 990MB |             |       |    |
| ada0p5 | ms-basic-data | 486GB |             | share |    |
| ada0p6 | efi           | 200MB |             |       |追加|
| ada0p7 | freebsd-ufs   | 200GB | /           |       |追加|
| ada0p8 | freebsd-swap  | 4.0GB | none        |       |追加|

インストーラーはEFI(ada0p6)を作る必要があると言っています。ネットでは、Linux用の説明ながらEFIは1つでいいという情報があります。矛盾していると思いながら次のステップへ。

パスワード入力
ネットワーク設定
CMOS Clock UTC = NO
Asia/Japan
日時調整スキップ。9時間ずれているような気がします。CMOS Clock UTCをYESにしてもNOにしても結果が同じになっています。[以前書いたもの](https://qiita.com/szly/items/dcc67c85689725795c26)と辻褄が合いません。後で調べようと思います。

# ブートローダーのインストール

FreeBSDのインストール中に、ブートローダーをインストールするステップがありません。ネットで検索すると、もはやインストールされなくなったようです。よく使われるのはgrub2かrEFIndが多い模様です。rEFIndを使ってみます。

[先達](https://www.starlink.jp/freebsd/freebsd-windows10-dualboot/)の書いたものを参考に、Windows側から操作します。

rEFIndのインストール
EasyUEFIをインストール
EasyUEFIを実行して、Windows側のEFIシステムパーティション(ada0p1)の"refind_X64.efi"を指し示すエントリーを作成
作成したエントリーを先頭に移動

EasyUEFIがFree版ではなくて15日間のTrial版になっていました。常用を考えるとこれは使えません。ひとまずUEFIの理解を深めるためにこのまま進めます。

さて、再起動してみます。するとrEFindのメニューが表示されました。しかしそこにはWindowsしか表示されません。

はたと気が付いて、UEFIに付属のブートマネージャーを起動してみます。すると今回作成したrEFIndがエントリーに追加されています。ということは、FreeBSD用のEFIシステムパーティション(ada0p6)の"BOOTx64.efi"をエントリー追加すれば、このブートマネージャーにエントリーが表示されるのではないでしょうか。

試してみるとビンゴです。付属のブートマネージャーに以下のエントリーが表示されるようになりました。

- Windowだけが表示されるrEFInd
- Windows Boot Manager
- FreeBSDの起動に使えるエントリ

ということは、この状態でrFEInd.confの登録をすればうまくいきそうです。rFEInd.confに以下のmenuentry設定を追加します。

```
# FreeBSD
menuentry "FreeBSD" {
    icon /EFI/refind/icons/os_freebsd.png
    volume 65FFA539-586C-11E9-A1DD-80FA5B5F2D6F
    loader /EFI/boot/BOOTx64.efi
}
```

これでブート時にrFEIndのメニューが表示され、rFEInd上でWindowsとFreeBSDを切り替えられるようになりました。

よくよく考えると、VolumeIDはWMI経由で取得できます。Nameの文字列の"{}"の間がIDです。

```
PS > Get-WmiObject Win32_Volume | Select-Object Label,FileSystem,Path

Label            FileSystem Path
-----            ---------- ----
   : (略)
EFISYS           FAT        \\?\Volume{65ffa539-586c-11e9-a1dd-80fa5b5f2d6f}\
   : (略)
PS >
```

# 最終状況

Windowsで見ると"ディスクの管理"はこんな感じです。

![パーティション-3.png](https://qiita-image-store.s3.amazonaws.com/0/381550/f2ce376b-e66c-847d-e4dd-c8ea7c9a987b.png)

EasyUEFIで見ると、UEFIエントリはこんな感じです。

![UEFI-rEFInd.png](https://qiita-image-store.s3.amazonaws.com/0/381550/fa39f2b2-f65c-4657-ef37-cf91974c513f.png)
![UEFI-Windows.png](https://qiita-image-store.s3.amazonaws.com/0/381550/b804831f-762c-5d4e-2919-a0410e4afe22.png)

![UEFI-FreeBSD.png](https://qiita-image-store.s3.amazonaws.com/0/381550/3583779f-eaf5-873d-3670-65585d7fea15.png)

ひとまずこれで、WindowsとFreeBSDを切り替えて起動できるようになりました。将来的にはEasy2UEFIの代替ソフトを探すかgrub2に移行する必要がありそうです。近々対応しようと思います。

とりあえずここからWindows側のセットアップ、WindowsUpdateやアンチウィルスなどを進めていきます。FreeBSD側も、Xのセットアップなどまだまだこれからです。しかし、一番不安なところは過ぎたので安心しています。