
Linux におけるデュアルブートの方法について
Linuxをデュアルブートするための概ね4つの方法を思いついた。デュアルブートとはそのままの意味で、Windows上で仮想化して動かすわけでもなく、ハイパーバイザー上で動かすわけでもない。実機でLinuxをハンドルする、という意味である。
目次
はじめに
まずはじめに、注意事項がある。
本記事では外部メディアから起動するためのメディアとして、安価に手に入れられるUSBメモリを例に上げている。しかし、本来はOSを動かすための高いIO性能を求められるデバイスとしてUSBデバイスは不適切である。そして、よりアクセス性能の高いメディアなどを使用した場合はこの限りでない。本記事は、以下の記事の補填的な内容となっていることに注意すること。
https://yokkin.com/blog/dualboot-manjaro-with-usbstick.html
閑話休題
ちなみにここで言う安全とは、ヒューマンエラーが無い限りの安全なので、root 権限が誇る強大な力、例えば
- 「dd で間違って上書きしたー」や
- 「
rm -rf /*
しちゃった!テヘ☆」
などによって発生する大災害を前に、これらの方法は完全に無力である。
方法
以下に4つの方法を紹介する。
BOOTMGRを書き換えてGRUBをインストール
/
をC:\
ドライブと同系列のパーティションに同居させる方法。BOOTMGR はWindows標準のブートローダー。
- 利点
- インストール先が同一ディスクで管理が楽
- 高速
- 欠点
- Windowsが起動不可能になる可能性がある
- 外部のブートローダーがWindows Boot Managerを上書きしたり、その逆パターンもあったりする。WindowsアップデートやLinuxカーネル、及びGRUBのアップデートの際にどちらかのOSが起動不可能になる可能性が非常に高い。
- Windowsが起動不可能になる可能性がある
BOOTMGRを活かす
/
をC:\
ドライブと同系列のパーティションに同居させる方法。
- 利点
- 高速
- 欠点
- やったことないのでわからん
ブートパーティション及び /
も別ドライブ上
それぞれのOSがそれぞれのドライブを使用している状態。OS同士がドライブを巡って干渉する可能性が一番低い。
- 利点
- 高速
- 1OS、1ディスクが実現できる。
- ブートローダーをドライブ単位で隔離できるため安全。
- 欠点
- 2つのインストール先メディアを用意する必要がある
- USBメモリなどのメディアでは頻繁に固まる
- ランダムライトが絶望的に遅いため書き込み待ちが発生する。以下のベンチマーク結果参照。
/boot
のみUSBメモリ上
SSDを新しく買うお金もケチっている筆者が考えついた方法。この方法では/boot
をUSBメモリ上において、/
をC:\
ドライブのパーティションと同系列に同居させる。
- 利点
- 高速
- ブートローダーをドライブ単位で隔離できるため安全。
- 欠点
- 2つのインストール先メディアを用意する必要がある。
- 同居OSのことを考える必要がある。
C:\
ドライブの拡張伸長性が悪くなる。また、なにかのタイミングでメインSSDのパーティションを変更する際は、どのパーティションがどの役割を果たしているのか把握する必要がある。
備考: ベンチマーク
KDiskMarkでディスク速度を測ったときの結果。USBメモリはBUFFALOのRUF3-YUF16GA-BK。
[Read] セクションでは、比較的良好なスピードを記録しているが、[Write] セクションをみると、連続的なデータを書き込むのにも、読み込みのそれと比べて22%の性能しか出ていないことがわかる。ランダムなデータに関しては、論外。
KDiskMark (2.3.0): https://github.com/JonMagon/KDiskMark
Flexible I/O Tester (fio-3.31): https://github.com/axboe/fio
-----------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
[Read]
Sequential 1 MiB (Q= 8, T= 1): 122.837 MB/s [ 120.0 IOPS] < 67011.44 us>
Sequential 1 MiB (Q= 1, T= 1): 119.722 MB/s [ 116.9 IOPS] < 8565.00 us>
Random 4 KiB (Q=32, T= 1): 16.091 MB/s [ 4022.9 IOPS] < 7820.90 us>
Random 4 KiB (Q= 1, T= 1): 13.648 MB/s [ 3412.1 IOPS] < 315.19 us>
[Write]
Sequential 1 MiB (Q= 8, T= 1): 26.837 MB/s [ 26.2 IOPS] < 315429.81 us>
Sequential 1 MiB (Q= 1, T= 1): 22.201 MB/s [ 21.7 IOPS] < 77014.15 us>
Random 4 KiB (Q=32, T= 1): 0.132 MB/s [ 33.2 IOPS] < 752318.56 us>
Random 4 KiB (Q= 1, T= 1): 0.202 MB/s [ 50.5 IOPS] < 21728.93 us>
Profile: Default
Test: 1 GiB (x5) [Interval: 5 sec]
Date: 2022-09-11 08:43:10
OS: manjaro unknown [linux 5.15.60-1-MANJARO]
思考
1番目のもともとあったBOOTMGRを上書きする方法に関しては、そもそも上書きしてしまうことのリスクが高すぎる。こういった要因でWindowsが復旧できなくなるとなると、きっとかんたんに1日が潰れる。そしてWindowsというプロプライエタリなOSを使っている以上、最悪復旧できなくなることもある。2番目もWindowsのDOSコマンドはできれば触りたくないし却下。
3番目のOSとディスクを完全に分離する方法はついこの間まで行っていた。高速なドライブを確保できれば、これが一番うまくデュアルブートできそうだけど、肝心なドライブの性能が悪ければ実用に耐えないほど遅い。たとえば、コマンドを叩いても数秒間レスポンスが返ってこなかったり、Firefoxのタブが数十秒遅れて開いたりする。Linuxのために新しいドライブを買うかどうかというところなのだ。
ケチだけどデュアルブートしたい
それでは、速度と費用を両立させるためにはどういった方法がとればよいのだろうか。お金がない読者には、4番目の方法を提案したい。この方法では、安価なUSBメモリの/boot
内にGRUBとEFIシステムパーティションだけ置いておいて、/
ディレクトリをWindowsのデータが入っているパーティションと同系列で同居させることができる。以下記事を参照。