パソコンで Windows /Linux を使う場合、システムの内部では
通常 O/Sの起動に先立って UEFIから Windows/Puppy などのブートデバイスを選択し、それぞれのブートローダーに処理を渡してカーネルを起動する。
Puppyなどの UEFI対応ブートローダーは Grub2で、ディスクの boot, esp フラグが付いた fat32フォーマットの EFIシステム・パーティション(ESP)に配置されここから Windowsなどの O/Sも起動可能で、デュアルブートでも使われる。
しかし、この EFIシステム・パーティションが Windows O/Sと同じデバイス(ディスク)上に存在していた場合、Windowsにアップデートなどがあると Windowsがセキュリティ対策でこの Grub2のブートローダーを書き換えてしまい Puppyは選択・起動できなくなる。
私も何回かこの現象に遭遇して、そのたびに Grub2の再インストールをせざるを得なかった。再インストールは 数分で終わるので大した手間ではないが、それでも急いでいる時など Puppyを起動するつもりが いきなり Windowsが起動してしまうのは避けたい。
更に、PCをいじくり回しているうちにも起動できなくなることが多々あるが、バックアップイメージなどから復元する場合、一部の Windows PEベースのバックアップソフトでは、Linuxのブートローダーを正常に認識できず、イメージのリストアでは問題が解決しないこともある。
こうした問題を何とか出来ないか考えてきたが、最近になって一つの解決策を思いついた。それは Grub2の ESPパーティションを Windowsの存在するドライブとは別のドライブに配置しておくことで、Windowsのアップデート処理から独立できるのではないかというアイデアだ。
更に、今までと同様 Windows の O/Sが存在するディスクにも 従来どおり ESPパーティションを残しておくことで、UEFIのブートプライオリティを変えるだけで、通常の Windowsの起動プロセスを実行できるので、何かあった場合の緊急の選択肢が増える。
などと考えているうちに試さずにいられなくなった。ジャンク箱を漁ると 20年ほど前に販促品としてもらった 256MBの USBメモリが出てきた。今更 256MB容量のメモリを使うシーンがあるとは思いもしなかったが、これだからジャンクはいつまでも捨てられない。
実際の手順とシステムは図の通りで、
-
まず Grub2のインストールが実行できる Puppyなどの O/S(Dev4)から起動しておいて
Windowsや Linuxなどが存在するディスク (Dev2, Dev3)を接続しておいて、更に上記の EFIパーティション用のディスク (Dev1 > 100MB)も接続する。
-
GPartedなどのパーティション操作ユーティリティで、Dev1 を Fat32にフォーマットして、boot esp フラグを立てる。
-
Grub2 インストーラを起動して、Dev1 に Grub2をインストールする。この際、起動選択したい O/Sが存在するディスクを全て指定する。
実際の Grub2インストール方法は ここを参照。
-
Dev1に Grub2 がインストール出来たら、Dev4は外して一旦シャットダウンしてから、再起動して Delキーなどを押して UEFI ブートマネージャの設定画面を起動して、上記 Dev1を最優先で起動するように設定する。
右図の 点線は Grub2インストール時のデバイス認識、実線矢印が ブートローダーのデバイス認識の様を示す。
このようにすることで、UEFIブートマネージャは Dev1の EFIパーティションから Grub2のブートローダーを探して起動し、Grub2の O/S選択画面を表示する。
万が一 Windowsのアップデートが行われて、Dev2のブートローダー部分が書き換えられても Dev1の EFIパーティションには影響しない(と思われる)ので、起動トラブルに見舞われることもなくなる(ハズ)。
私もこの設定をしてからまだあまり日にちが経っていないので、どれくらい効果があるかは不明だが、現時点では問題は起きていない。
なお 私は確認していないが、Dev1は独立した USBメモリではなくても、例えばデータ用のパーティションと同じディスク上に EFIパーティションを作成したり、あるいは Dev3のような Windows以外の O/Sのパーティションが存在するディスクに EFIパーティションを作成しても構わないと思う。
なお、私の場合 実際のデスクトップ機への実装は、Dev1がケース前面USB端子に常にぶら下がっているのも不安定だ。
そこで 近くの DOSパラ店で見つけた USBメス同士のコネクタ(写真左上)を半分に切断したものに、10Pin コネクタをハンダで直接続し、エポキシ接着剤で補強して写真のような加工をし(写真 左下)、マザボの空き USB端子にこの USBコネクタを接続して(写真 右)ケース内部に隠れるようにしてある。