公開日: 2021年7月4日
マルチブート事例 2: Windows 10 と FreeBSD
Windows 10 がプリインストールされているハードディスクをパーティション分割して、FreeBSD とのデュアルブートを実現する方法を紹介します。ここでは Secure Boot は無効、HDD は Advanced Format (物理セクタサイズ 4096 バイト、論理セクタサイズ 512 バイト)、パーティション形式は GPT、ファイルシステムは UFS という前提で話を進めます。
目次
供試 PC
ヒューレット・パッカード SPECTRE 13-af520TU
- CPU: Intel Core i5-8250U 1.60 GHz
- メモリ: 8 GB
- ストレージ: SSD (360 GB) Windows 10 プリインストール済み
- ディスプレイアダプタ: Intel UHD Graphics 620
- 無線 LAN アダプタ: Intel Dual Band Wireless AC8265
- 備考 1: 起動時に ESC キー押しで UEFI 設定、F9 キー押しでブートデバイス選択に移行
- 備考 2: UEFI で Secure Boot の設定を変更・保存し、再起動すると、"Operating System Boot Mode Change ... XXXX + ENTER ..." というメッセージが表示される。"XXXX" の部分に表示される 4 桁の数字を入力すれば次に進める。
用意するもの
- USB メモリ (FreeBSD インストールメディアとして)
- Win32DiskImager (FreeBSD インストールメディアを作成するのに使う)
- FreeBSD インストールイメージFreeBSD-<バージョン>-RELEASE-amd64-memstick.img
- rEFInd
ハードディスク (SSD) のパーティション構成を検討する
上に掲載した供試 PC は、SSD に 4 個のパーティションを持っています。すなわち EFI システムパーティション、予約パーティション、Windows パーティション、回復パーティションです (参考: UEFI/GPT ベースのハードドライブパーティション)。このうち大半を占める Windows パーティションを少し削って、FreeBSD 用のパーティションを捻出し、ついでに Windows 10、FreeBSD 双方からアクセス可能な共有パーティションを 1 個確保することにしましょう。次のような構成になります。
セクタ数 × 論理セクタサイズ = 558088192 × 512 = 285741154304
となり、4096 で割り切れる値になっています (わざわざ Excel で表を作って確認したので、合っているはず…)。
- EFI システムパーティション
- 予約パーティション
- Windows パーティション
- 回復パーティション
- FreeBSD 用スワップパーティション
- FreeBSD パーティション
- Windows/FreeBSD 共有パーティション
セクタ数 × 論理セクタサイズ = 558088192 × 512 = 285741154304
となり、4096 で割り切れる値になっています (わざわざ Excel で表を作って確認したので、合っているはず…)。
- セクタサイズを知るには、Windows 上でコマンドプロンプトを管理者権限で開き、「fsutil fsinfo ntfsinfo D:」のように実行すると表示させることができます。「セクターあたりのバイト数」が論理セクタサイズ、「物理セクターあたりのバイト数」が物理セクタサイズです。
既存パーティションのバックアップを取る
パーティション分割を行う前に、既存のパーティションのバックアップを取っておきます。次の記事を参照してください。
FreeBSD のインストールメディアを作る
FreeBSD のインストールメディアを作る方法はいろいろあると思いますが、ここでは Windows 上で Win32 Disk Imager というソフトを使用します。ソフトをインストールし、起動したら [Image File] 欄で FreeBSD-<バージョン>-RELEASE-amd64-memstick.img を選択し、[Device] 欄で書き込み先 USB メモリのドライブレターを選択します。[Hash] 欄でアルゴリズムを選択して [Generate] ボタンを押すとイメージファイルのハッシュ値を表示させることができます。[Write] ボタンを押すと、USB メモリへの書き込みが始まり、「Write Successful.」と表示されたら完成です。
ハードディスク (SSD) に新しいパーティションを作成する
FreeBSD インストーラの Shell モードを利用して、インストール先のハードディスクに新しいパーティションを作成します。先ほど作成したインストールメディアからパソコンを起動するために、UEFI 設定画面で Legacy Support 有効、Secure Boot 無効にし、 USB メモリから起動されるようにブートデバイスの優先順位を設定します。設定を保存してパソコンを再起動すると、FreeBSD のインストーラが起動するので、メニューから [Shell] を選択し、下記のようにコマンドを実行します (一度実行してしまうと後戻りが利かないので、慎重にお願いします)。
# gpart list
# gpart show -l nvd0
# gpart destroy -F nvd0
# gpart create -s gpt nvd0
# gpart add -t ms-basic-data -b 2048 -s 532480 nvd0
# gpart add -t ms-basic-data -s 32768 nvd0
# gpart add -t ms-basic-data -s 558088192 nvd0
# gpart add -t ms-basic-data -s 2007040 nvd0
# gpart add -t ms-basic-data -s 33554432 nvd0
# gpart add -t ms-basic-data -s 100663296 nvd0
# gpart add -t ms-basic-data -s 8388608 nvd0
# gpart show -l nvd0
=> 40 703282528 nvd0 GPT (335G)
40 2008 - free - (1.0M)
2048 532480 1 (null) (260M)
534528 32768 2 (null) (16M)
567296 558088192 3 (null) (266G)
558655488 2007040 4 (null) (980M)
560662528 33554432 5 (null) (16G)
594216960 100663296 6 (null) (48G)
694880256 8388608 7 (null) (4.0G)
703268864 13704 - free - (6.7M)
1行目: | gpart list コマンドの出力 (掲載は省略) を見て、目的のハードディスク (SSD) を見つける。ここでは nvd0 がそれと判断した。くれぐれも他のハードディスクと間違えないように。 |
2行目: | nvd0 の現在のパーティションレイアウトを確認する。 |
3行目: | 既存のパーティションをすべて削除する。 |
4行目: | GPT を指定してパーティショニングスキームを作成する。 |
5~11行目: | 事前に決めた構成に従ってパーティションを作る。 |
12行目: | 変更後のパーティションレイアウトを確認する。 |
FreeBSD 用のパーティション (nvd0p5,p6) を含め、すべてのパーティションのタイプに ms-basic-data を指定していますが、あとで変更するので問題ありません。むしろここで freebsd-swap や freebsd-ufs などを指定してしまうと、あとで FreeBSD をインストールするときに「パーティションの上書きができません」というようなメッセージが表示されて先に進めなくなる現象が見られたので2)、いろいろ試した結果このようにしています。
- 具体的には "The chosen root partition has a preexisting filesystem." と表示され、それでも進めようとすると "Error while extracting base.txz: Can't unlink already-existing object" と表示され、インストーラの先頭に戻ることしかできなくなります。個人的には、ここまで来たら強制的に上書きしてもらっても良いのですが、こういう仕様のようです。
FreeBSD をインストールする
事例 1 の記事に書いた手順とほぼ同じです。違いはインストール先がハードディスク (ada0) ではなく SSD (nvd0) になることのみ。先ほど決めたレイアウトのとおりなら、スワップパーティションが nvd0p5、FreeBSD 本体用のパーティションが nvd0p6 になります。
それともう一点。インストールが終わったら、パーティション作成を行ったときと同様に、FreeBSD インストーラを起動して Shell モードに入ります。そして EFI システムパーティションに boot1.efi をコピーしておきます。
# mount -t msdosfs /dev/nvd0p1 /mnt
# cp /boot/boot1.efi /mnt/EFI/Boot/bootx64-freebsd.efi
# exit
バックアップしておいたパーティションをリストアする
もともとあった 4 個のパーティションのバックアップデータをリストアします。次の記事を参照してください。
rEFInd のインストール・設定
rEFInd を使用すると EFI/UEFI ベースのパソコンでマルチブートを実現することができます。インストールにはいろいろなやり方がありますが、ここでは Windows 10 上で作業する方法を採ります。詳しくは下記 URL を参照してください。
- 公式サイトのリンクをたどって refind-bin-<バージョン>.zip をダウンロードし、適当なフォルダで解凍する。
- 管理者権限で DOS プロンプトを起動し、EFI システムパーティションを S ドライブにマウントする。
C:\WINDOWS\system32>mountvol s: /s
- 手順 1 で解凍したフォルダ (例えば D:\hoge\) の中にある refind フォルダをS:\EFI\ の下に丸ごとコピーする。
C:\WINDOWS\system32>s: S:\>xcopy /e d:\hoge\refiind-bin-<バージョン>\refind efi\refind\
- 不要なドライバを削除する。しないと起動に余計な時間がかかるどころか、システムクラッシュを引き起こすかも。みたいなことがドキュメントに書かれている。私の場合は x64 を残して ia32 と aa64 を削除。
S:\>cd efi\refind S:\EFI\refind>del refind_aa64.efi refind_ia32.efi S:\EFI\refind>rd /s drivers_aa64 drivers_ia32 tools_aa64 tools_ia32
- ブートマネージャを Windows Boot Manager から rEFInd に変更する。
S:\>bcdedit /set "{bootmgr}" path \efi\refind\refind_x64.efi この操作を正しく終了しました。 S:\>bcdedit /set "{bootmgr}" description "rEFInd" この操作を正しく終了しました。
S:\>bcdedit /set "{bootmgr}" path \efi\microsoft\boot\bootmgfw.efi この操作を正しく終了しました。 S:\>bcdedit /set "{bootmgr}" description "Windows Boot Manager" この操作を正しく終了しました。
- 設定ファイルのサンプルをコピーし、メモ帳等の適当なエディタで変更する。
S:\>cd efi\refind S:\EFI\refind>copy refind.conf-sample refind.conf S:\EFI\refind>notepad refind.conf
refind.conftimeout 0 textonly scanfor manual menuentry "Windows 10" { loader \EFI\Boot\bootx64.efi } menuentry "FreeBSD 12.2-R" { loader \EFI\Boot\bootx64-freebsd.efi }
1行目: この値を 0 にするとオートブートしない。 2行目: テキストベースのメニュー画面を有効にする。 3行目: ブートローダの検索方法を指定する。"manual" にすると、この設定ファイルに記述されたスタンザ (定型詩を構成する数行単位のまとまりをそう呼ぶんだそうです) に従う。 5行目: Windows 10 用のスタンザ 9行目: FreeBSD 用のスタンザ - UEFI の設定。パソコンによって設定方法が違うので詳細は書かないが、下記のように UEFI を設定の上、パソコンを再起動する。
- Legacy Support: 有効
- Secure Boot: 無効
- ブート優先順位の設定で rEFInd を Windows Boot Manager よりも上に持ってくる。
結果、こうなる
広告