Ubuntu

USBフラッシュメモリーでマルチーブート

いま、ちょっとやりたいことがあって、USBフラッシュメモリーから複数のLive CDというか、インストーラーというかISOが起動したい。

具体的には、

  • Windows 10 installer
  • Ubuntu 20.04 desktop installer
  • Boot-Repair

が起動したくて、できるなら他の幾つかのISOも入れられたらいいなと思っている。



広告


幾つかの手順を試し、最終的にはGrubで構築している。

Grubで構築(2週目)

最初、ArchLinuxにエスコートしてもらってなんとか形ができたので記事をリリースしたのだが、VMwareの特性だとか、GrubってひょっとしたらLegacyとUEFIの両方のバージョンをインストールできるんじゃね?とか、Windowsの起動方法がなんとなく分かってきて、最初からやり直してみた。

結論、こんなメニューができて、思い通りに起動ができるようになった。
もちろんセキュアブートにも対応している。

これの何が良いかって、Windowsを起動してUSBフラッシュメモリーをセットすれば、Grubメニューを書き換えたり、ISOを足したり引いたり、Windowsインストーラを新しくしたり、といった操作が簡単にできること。もちろん、Ubuntuでも同じで、至極メンテナンスがしやすいのだった。

空いているところはデーター領域としても使えるから、フラッシュメモリーから起動して、そのデータを使ったりすることもできる。
とにかくやりたいことが何でもできちゃう感じ。

テスト環境

VMwareはUSB起動を完全サポートしていない(UEFIのみ)ため、USBフラッシュメモリーとほぼ同じサイズ(32GB)のHDDイメージを使って作成・テストした後、同じ手順でUSBフラッシュメモリーを作成する作戦。

仮想PCのvmxファイルに以下を追加してUEFI+セキュアブート対応にする。

firmware = "efi"
efi.legacyBoot.enabled = "FALSE"
uefi.secureBoot.enabled = "TRUE"

仮想PCに、この記事で作成したUbuntu 20.04 Live DVD(カスタム)をセットして起動。
狙いはUEFI用のGrubが入っていることだったり、作業用のコマンドをコピーペーストできることだったりするので、カスタムDVDでなくとも、起動後に以下の必要なパッケージをインストールすれば同じ操作ができるはず。

$ sudo apt install open-vm-tools-desktop
$ sudo systemctl restart display-manager
$ sudo apt install grub-efi-amd64-signed shim-signed

ディスクを構成

ディスクはmsdos(MBR)で作成し、EFIのシステムパーティション、LinuxのISOイメージを入れるパーティション、Windowsのインストーラーを入れるパーティションを作成する。すべてFAT32とし、EFIのシステムパーティションには、bootとespのフラグを立てる。

BIOSがLegacyで動作していれば、WindowsのインストーラーをISOから起動することができるが、UEFIで動作している場合にはどうやっても起動できなかった。将来解決するのかもしれないけれど、今の時点ではどうにもならないので、Windows用にはパーティションを1つ用意する。

サイズは適当。必要になったらGPartedでサイズを増減させよう。

Grubをインストール

Grubをインストールしていく。UEFIとBIOSの両方で起動できるように、UEFIとLegacyの両方をインストールしている。
ちょっと余所で見かけない操作ではある。

$ sudo mount -o uid=999,gid=999 /dev/sda1 /mnt

$ sudo grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removable
Installing for x86_64-efi platform.
Installation finished. No error reported.

$ sudo grub-install --target=i386-pc --boot-directory=/mnt/boot --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

ISOをコピー

LinuxはISOファイルをloopbackで指定すれば起動できるので、ISOファイルをそのままコピーしてくる。
WindowsはISOから起動できないので、ISOをマウントして、中身をコピーする。

Grubメニューを作成

Grubの起動メニューは手で作成する。

rootがどこなのかを示すためにUUIDを利用しているが、これは、Ubuntuを起動して、Disksアプリを起動し、デバイスを見ればすぐに分かるはず。
それを以下のUUIDっぽい場所にセットすれば、思い通りの起動ができるはずだ。
Arch Wiki / GRUB/ヒントとテクニック

ISOファイルはコピーしたものを書いておけば起動できる。

/mnt/boot/grub/grub.cfg

loadfont unicode
insmod all_video
insmod gfxterm
#set gfxmode=1920x1080
set gfxmode=auto
terminal_output gfxterm

set partition1='2DEC-1B38'
set partition2='2DF7-544E'
set partition3='2E09-E507'

grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Windows 10 version 20H1 x64' {
        search --fs-uuid $partition3 --set=root
        insmod chain
        chainloader /efi/boot/bootx64.efi
}
else
menuentry 'Windows 10 version 20H1 x64' {
        search --fs-uuid $partition3 --set=root
        insmod ntldr
        ntldr /bootmgr
}
fi

menuentry 'Ubuntu 20.04 desktop amd64' {
        search --fs-uuid $partition2 --set=root
        set isofile='/ubuntu-20.04.1-desktop-amd64-custom.iso'
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram quiet splash ---
        initrd (loop)/casper/initrd
}

menuentry 'Boot-Repair amd64' {
        search --fs-uuid $partition2 --set=root
        set isofile='/boot-repair-disk-64bit.iso'
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram quiet splash --
        initrd (loop)/casper/initrd
}

if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
        exit
}
menuentry 'UEFI Firmware Settings' {
        fwsetup
}
fi

ポイントは、Windowsの起動で、それを場合分けしたので、だいぶきれいにそれぞれが起動できるようになっていると思われる。

テスト

VMwareを使ってざっくりとテストをする。

BIOSWindowsUbuntu 20.04Boot-Repair
Legacy
UEFI
UEIF+セキュアブート×

起動できるかできないか程度のテストでしかないが、こんな結果だった。
適当すぎるGrubのインストールに対して、十分すぎるレベルの結果が得られたと思う。

なお、UEFI+セキュアブートでBoot-Repairが起動しないのは不思議ではあるものの、その環境では元々正しく動作できないので、割り切りとした。
何が不思議って…Boot-Reapirをセキュアブート環境で起動すると、これセキュアブート環境だから正しく動作できないよ!っていうメッセージを見た記憶が残っているから。

USBフラッシュメモリーで構築

手順が確立できたので、USBフラッシュメモリーに同じ操作をしてみる。

Ubuntu 20.04のカスタムCDをセットし、HDDイメージそのまま、USBフラッシュメモリーを接続して認識させる。
このとき、USBフラッシュメモリーは/dev/sdbとして認識される。

各種操作を/dev/sdbにすること、grub.cfgにUSBフラッシュメモリーのUUIDを書くことだけを意識して操作。
そんなに難しい操作をしているわけではないので、仮想環境のHDDイメージで練習した後ならすぐにできるレベル。

実機でテストしたところ、仮想環境と同じ結果が得られた。

BIOSWindowsUbuntu 20.04Boot-Repairテスト環境
LegacyLegacyのみが使えるPC
UEFIメインPC
UEIF+セキュアブート×メインPC

思った以上に簡単だった。

Grubで構築

セキュアブートに対応し、かつ、複数のインストーラーが起動する…そんなUSBフラッシュメモリーが使いたい。
そもそも容量がどんどん大きくなってきているのに、1つのISOしか起動できない不便さをどうにかしたい。

他の方法を2つ試したが、セキュアブートが課題となって解決ができない。
Grubを使って自由にどうにかできないものかと調べてみたら、ArchLinuxがやり方を教えてくれた。
ArchLinux / マルチブート USB ドライブ

Grubのマニュアルはこちら。
GNU GRUB Manual 2.06

最終的にはこうなった。

なお、UEFIから起動するとGrubのバージョンは2.04だが、BIOSから起動すると2.02になっている。

作業環境

メインPCはWindows 10とUbuntu 18.04(Mate)のデュアルブート環境で、BIOSで起動している。。
これのクローンみたいな環境をVMware Playerで作っている。

VMware Playerの方はUEFI+セキュアブートの設定にして、Ubuntu 18.04(Mate)とWindows 10が起動するようになっている。
いわゆるクローンっぽい環境。このWindows 10にはライセンスがなく、単にちゃんと起動するかどうかを確認するのみ。

Windows 10

最初にメディアクリエーションツールを使ってインストール用のUSBフラッシュメモリーにする。
この日は 21H1 のバージョンだった。
Windows10のこの作業はホストとなるメインPCで行っている。

できあがったところで、仮想PCで起動することを確認しておく。

起動直後に[F2]を押して、USBフラッシュメモリーから起動させると、Windowsインストーラーが起動してきた。
修復→続行として仮想PCを再起動し、Ubuntuを起動した。

Grubのインストール

仮想PCに入っているUbuntu 18.04を使ってGrubをインストールする。
メインPCでできないこともないけれども、記事を書きながらなので、仮想PCの方が都合が良かった、その程度の話。

先程作ったUSBフラッシュメモリーにはWindows 10のブートローダーが入っているので、これをmvして上書きされないような名前にする。
UbuntuはUSBフラッシュメモリーを認識した途端に/media/<hoge>/ESD-USBにマウントしたので、そこで名前を変更。

$ mv /media/<hoge>/ESD-USB/efi/boot/bootx64.efi /media/<hoge>/ESD-USB/efi/boot/bootx64.efi.windows

※ユーザーはhogeとしている。適宜読み替えのこと。

Grubをインストールする。

$ sudo grub-install --target x86_64-efi --efi-directory /media/hoge/ESD-USB --boot-directory=/media/hoge/ESD-USB/boot --removable
Installing for x86_64-efi platform.
Installation finished. No error reported.

grub.cfgにWindows 10を登録する。
/media/<hoge>/ESD-USB/boot/grub/grub.cfg ※新規作成

loadfont unicode
insmod all_video
insmod gfxterm
#set gfxmode=1920x1080
set gfxmode=auto
terminal_output gfxterm

menuentry 'Windows 10 version 20H1 x64' {
        insmod chain
        chainloader /efi/boot/bootx64.efi.windows
}

※使える解像度を調べて書けば、その解像度で表示してくれる。
※1920×1080を設定した状態で、仮想PCを立ち上げてみたところ、1024x768x32に自動調整してくれた。

これで、仮想PCを再起動して動作を確認。
Grubメニューが起動して、[chain]Windows _10_x64が起動してきた。ただし、Windowsマークが表示されてから待たされたりした。

Ubuntu

起動のためのエントリーについて、ココにあった情報をベースに書いてみた。
ubuntu documentation / Grub2/ISOBoot

/media/<hoge>/ESD-USB/boot/grub/grub.cfg ※追記

menuentry 'Ubuntu 20.04 desktop amd64' {
        set isofile='/boot/iso/ubuntu-20.04.1-desktop-amd64.iso'
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram noprompt noeject
#       linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram quiet splash ---
        initrd (loop)/casper/initrd
}

※コメントはスプラッシュ表示をさせる場合の記述。起動前のチェックで遅くなるかもしれない。
※toramはRAMディスクを活用するパラメーターの模様、メモリーに余裕があるなら付けておいた方が早い。

こちらも仮想PCで起動したが、起動までに90秒くらいかかるけれども、起動しはじめればそれなりの速度で動き出す。

改めてみてみると、Ubuntu 20.04のISOイメージには/casper/vmlinz, /casper/initrdというファイルがあり、これがバージョンによって違うようだ。
ArchLinuxのところに書いてあったのとファイル名が違っていた(多分、昔のバージョンのUbuntuは項だったのだろう)。
書き方のポイントはArchLinuxに教えてもらいつつ、実物を見ながら設定なのかなと。

Boot-Repair

なんとなくコツをつかみかけた感じで、Boot-Repairを登録。
casperというディレクトリに入っているファイルの名前を定義してみる。

/media/<hoge>/ESD-USB/boot/grub/grub.cfg ※追記

menuentry 'Boot-Repair amd64' {
        set isofile='/boot/iso/boot-repair-disk-64bit.iso'
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile toram quiet splash --
        initrd (loop)/casper/initrd
}

こちらも仮想PCでは80秒ぐらい待たされてから起動しはじめる感じだが、動くことは動く。

BIOS起動対応

まだ、UEFI起動に完全対応できていないので、BIOSからの起動もできるようにしたい。

Grub

いままでMBRのUSBフラッシュメモリーとなっていて、3つのISOから起動ができるようにはなっている。
仮想PCをUbuntuで立ち上げて、ディスクの状態を確認。

$ sudo fdisk /dev/sdb

fdisk (util-linux 2.31.1) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。


コマンド (m でヘルプ): p
ディスク /dev/sdb: 28.9 GiB, 31037849600 バイト, 60620800 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x992acf03

デバイス   起動 開始位置 最後から   セクタ サイズ Id タイプ
/dev/sdb1  *        2048 60620799 60618752  28.9G  c W95 FAT32 (LBA)

コマンド (m でヘルプ): q

開始位置はいつも2048から。ココまでの間に何か入れられるんじゃないかと。

$ sudo grub-install --target=i386-pc --boot-directory=/media/hoge/ESD-USB/boot --recheck /dev/sdb
grub-install: エラー: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.

おっとっと。
ask ubuntu / Grub 2 install error: grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn’t exist.

$ ll /usr/lib/grub
合計 36
drwxr-xr-x   4 root root  4096 10月 21 04:12 ./
drwxr-xr-x 126 root root  4096 10月 23 18:09 ../
lrwxrwxrwx   1 root root    34  2月 25  2021 grub-mkconfig_lib -> ../../share/grub/grub-mkconfig_lib
drwxr-xr-x   3 root root 20480 10月 21 04:12 x86_64-efi/
drwxr-xr-x   2 root root  4096 10月 21 04:12 x86_64-efi-signed/

$ sudo apt install grub-pc
…
以下のパッケージは「削除」されます:
  grub-efi-amd64
以下のパッケージが新たにインストールされます:
  grub-gfxpayload-lists grub-pc grub-pc-bin
…

$ ll /usr/lib/grub
合計 56
drwxr-xr-x   5 root root  4096 10月 23 18:11 ./
drwxr-xr-x 127 root root  4096 10月 23 18:11 ../
lrwxrwxrwx   1 root root    34  2月 25  2021 grub-mkconfig_lib -> ../../share/grub/grub-mkconfig_lib
drwxr-xr-x   2 root root 20480 10月 23 18:11 i386-pc/
drwxr-xr-x   3 root root 20480 10月 21 04:12 x86_64-efi/
drwxr-xr-x   2 root root  4096 10月 21 04:12 x86_64-efi-signed/

パッケージの削除がちょっと気になるけれども、仮想環境でやってることだし、まぁいいか…とりあえず進める。

$ sudo grub-install --target=i386-pc --boot-directory=/media/hoge/ESD-USB/boot --recheck /dev/sdb
Installing for i386-pc platform.
Installation finished. No error reported.

インストールされた先は /boot/grub/i386-pc なのだけれども、ここには ntldr.mod が入っていたりする。
これはBIOS起動の場合にだけ使える仕組みのようだ。

いろいろ足しちゃったけど、そもそもUEFIとしての動作は?と気になってテスト。

  • UEFI、UEFI+セキュアブート共にGrubが起動。
  • Windows 10、Ubuntu 20.04、Boot-Repairのすべてがセキュアブートの有無に関わらず起動。

仮想PCのHDDにgrub-pcをインストールしたことによって、grub-efi-amd64がアンインストールされたものの、これらが導入されたUSBフラッシュメモリー側には影響なかったようだ。

VMwareはBIOSからUSBブートできないので、テストは実機でやるしかない。
メインPCでBIOS起動させてみたところ、

  • BIOSでは、Ubuntu 20.04, Boot-Repairが起動。Windows 10は起動できなかった。
  • UEIFでは、Windows 10を含む全てが起動できた。Windows 10の起動では画面が乱れたが、まぁ、動くのでよし。
  • どちらの場合も起動までの待ち時間はほとんどない。
    仮想PCでかなり待たされるのは、VMwareの何らかの制限に引っかかっているのだろうと想定された。

となった。

Windows

BIOS起動する設定をしたことで、ntldrが使えるようになったので、Windowsも起動できるようにする。
本当は、いま、どちらから起動されているのか?を見分けて分岐すればかっこいいと思うけれども、分かるようなメニュー表示にする割り切り。

/media/<hoge>/ESD-USB/boot/grub/grub.cfg ※追記

menuentry 'Windows 10 version 20H1 x64 for BIOS' --class windows --class os $menuentry_id_option 'osprober-chain-FEC9-D048' {
        insmod part_msdos
        insmod ntfs
        insmod ntldr
        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  FEC9-D048
        ntldr /bootmgr
}

色々なところからの切り貼りで、意味も分からずに書いちゃっているものもあるが、どうにか起動するので、これでいく。

ついでに、ISOからの起動ができないか試してみたところ、上手くいく。

/media/<hoge>/ESD-USB/boot/grub/grub.cfg ※追記

menuentry 'Windows 10 version 2004 x64 for BIOS' {
        insmod part_gpt
        insmod ntfs
        insmod ntldr
        set isofile='/boot/iso/Windows10_2004_Professional.iso'
        loopback loop $isofile
        ntldr (loop)/bootmgr
}

改めてUEFIでISOからの起動ができないか、色々試してみたけれども、ループバックしたISOからefiの中のファイルを呼び出すことはできないようだった。
StackExchange / Chainloading an efi file sitting in.an ISO

ウチの中のシステムがUEFIになったらGPTでパーティションをモリモリ作ってそこから起動する、という形になりそうだった。

パーティション組み換え

32GB全てを起動用に使うとは思えないし、いざというときにファイルを受け渡せる領域が付いていたらラッキー。
ということで、GPartedを利用してパーティションを2つに分割してみた。

この操作、メインPCで行ったので3つめのデバイス(/dev/sdc)として認識されている。

わざわざ分けてから気付いたのだけれど、別に分けなくても/dev/sdc1相当の領域にアクセスできることが分かった。

メインPCでテスト

ということで、どうやら上手くISO起動用のUSBフラッシュメモリーができた。

改めて、メインPCでちゃんと起動するのかどうか念入りに確かめた。
BIOSでもUEFIでも問題なく動作する。

表示が多少崩れることはあっても、OSが立ち上がってきてGUIが表示される頃にはきれいなもの。
かなり快適。

YUMIで構築

探してみて最初に YUMI – Multiboot USB Creator というツールが良さそうに見えた。
けれども、セキュアブートには対応していなかった。

インストール

公式ページの最初に緑色の「ダウンロード」というリンクがあったが、広告だった。
下の方に進んでいき、YUMI UEFI+BIOS FAT32をダウンロードする。

ダウンロードしたファイルが実行形式ファイルそのもので、インストーラーではない。
起動すると以下のメッセージが表示されるが、詳細情報 → 実行 の順でクリックしてプログラムを起動し、I Agreeをクリックする。

ISOイメージの投入

起動したら、インストールしたいISOの数だけ繰り返しISOイメージを焼き込んでいく。
まずは、Ubuntu 20.04 desktopから。

途中経過で表示されるのは、DISKPARTとかが呼び出されてクリーンアップされてみたり、ISOイメージがコピーされたるする様子。

次はWindows 10。

続いてBoot-Repair。

できあがったUSBフラッシュメモリーの内容は、こんな内容になっている。

動作確認

できあがったUSBフラッシュメモリーを差し込んで、VMwareで仮想PCを立ち上げてみる。

UEFI+セキュアブートの環境では、起動することができなかった。
セキュアブートを止めたら起動することができた。

Easy2Bootで構築

UEFI+セキュアブートに対応したものを探していたところ、こちらが見つかった。
Easy2Boot

公式サイトからたどっていくとFOSSHUBに遷移し、そこからファイルがダウンロードできるようになっていた。
この日のバージョンは2.10だった。

ただ、このツール、元々はセキュアブートに対応していたようだけれども、agFMにされている署名が無効化されたようで、起動しなくなっている。
plam84.com / 【Easy2Boot】a1ive grub2 File Manager (agFM)【セキュアブート対応じゃなくなった?】

インストール

ダウンロードしたファイルはインストーラーで、起動すると以下のメッセージが表示されるが、詳細情報 → 実行 の順でクリックして起動する。
起動したインストーラーでインストール先を指定(デフォルトはデスクトップ)して、先に進めた。

4ステップでインストールが完了。

フラッシュメモリーを構成

Make_E2B for E2B v2.10が起動した。
次回以降は、インストール先のMake_E2B.exeを管理者権限で起動する。

USBフラッシュメモリーを取り付けておくと、自動的にそのドライブが選択された。

途中で以下の質問を受ける。UEFIブートしたいので Y を入力。
続いて、Ventoy for Easy2Bootのインストールについて尋ねられる。これもagFMとは特徴が違うブートローダーみたいなので、インストールしてみている。

=================== agFM and Ventoy - DOWNLOAD AND COPY UEFI BOOT FILES TO PARTITION 2 =====================

Checking for agFM and Ventoy compatibility (requires PTN2=FAT and 60MB+, Windows 10 or USB HDD, internet connectivity)
Internet OK
Partition 2 is F:
Partition 2 (F:) is FAT32
Partition 2 has 575MB free (must have over 60MB free)
Note: Some UEFI systems may not MBR-boot to the E2B Menu system if you add these UEFI boot files.
Ventoy requires agFM to be installed first.

Add a1ive grub2 File Manager UEFI boot files to Partition 2? (Y/[N]) : Y[Enter]

Downloading current agFM zip file - please wait...
Trying https://easy2boot.webnode.com/_files/200003811-7d94f7d951/agFM_download_files.zip
File obtained from https://easy2boot.webnode.com/_files/200003811-7d94f7d951/agFM_download_files.zip
Extracting a1ive grub2 UEFI boot files to F:...

E2B USB Drive is now MBR and UEFI-bootable.
VENTOY
======

Download and add latest version of Ventoy? (Y/[N]) : Y[Enter]
Downloading 'Ventoy for Easy2Boot' version - please wait...
Trying https://easy2boot.webnode.com/_files/200003848-7002b7002e/Ventoy_for_E2B_Latest.zip
…

ダウンロードが終了すると、一旦画面がクリアされて、以下の入力を求められた。
展開したファイルがユーザー領域にあるらしく、これをコピーして良いか聞かれる。
Y を入力する。

**********************************
*                                *
*   Add Ventoy to Easy2Boot      *
*                                *
* Usage:                         *
* Drag-and-drop Ventoy .zip file *
* onto this file.                *
*                                *
**********************************

Extracts Ventoy files and adds them to Partiton 2 of the E2B drive

Ventoy .zip file should be downloaded from Easy2Boot website

Looking for \e2b\grubfm.iso on Partition 2...

FOUND E2B PARTITION 2 at F:

SOURCE=Ventoy_E2B_download_files.zip
DESTINATION=F:

Extracting to temporary folder at C:\Users\rohhie\AppData\Local\Temp\ventoy
FOLDERS TO COPY
===============
EFI
grub
tool
ventoy

ventoyia32.efi
ventoyx64.efi

All folders need to be copied to Partition 2 of the E2B drive...


OK to copy all Ventoy v1.0.51 folders to F:\ ? (Y/N) : Y[Enter]
Copying files...
970 個のファイルをコピーしました
Files copied OK
Ventoy v1.0.51 is now installed.


続行するには何かキーを押してください . . .[Space]


FINISHED
Please use "\E2B Launcher.exe" on the USB drive to configure your USB drive.

Press W + [ENTER] for instructions on agfm and UEFI booting.
Press ENTER to continue... W[Enter]

最後に画面の背景が緑色に変わった!
説明が見たいと思ったので、W[Enter]をクリックしたところ、以下のページが表示され、USBの作成が終了。
Easy2Boot / agFM – a1ive grub2 File Manager

ISOイメージの投入

USBフラッシュメモリーを構成する過程でパーティションが2つに分割され、ドライブE:とF:が作られた。
ウチの場合は元々C:とD:があったので、その次に追加されているが、環境に合わせて適宜読み替えのこと。

起動したいISOイメージを放り込む。ウチの環境ではUSB2.0で30分、USB3.0で6分ほど掛かった…。

この間に先程の説明ページを読んでおくと良いかもしれない。

ISO投入先
Ubuntu 20.04 desktopE:\_ISO\LINUX
Windows 10E:\_ISO\WIN
Boot-RepairE:\_ISO\LINUX

放り込んだ後で、MAKE_THIS_DRIVE_CONTIGUOUS.cmd を実行する。

この操作でインストールされたブートローダーは3つ。

Easy2Boot – a grub4dos-based MBR\Legacy-only menu system
agFM – a grub2-based MBR\Legacy+UEFI32+UEFI64 menu system based on grubfm (optional)
Ventoy for Easy2Boot – a grub2-based MBR\Legacy+UEFI32+UEFI64 menu system based on Ventoy (optional)

Easy2Boot

そして、LegacyブートにはE2B、UEFIブートにはagFMがオススメ、とされている。

動作確認

この段階では、仮想PCのBIOSがUSB対応できないことに気付いておらず、UEFIのみ試した。

agFMからUbuntu 20.04のインストーラーはきれいに動作するが、Windows 10は動かないように見えた。
agFMからVentoyを起動し、そこからbuntu 20.04、Windows 10を起動することができた。

このあたりでセキュアブートに対応できていないことが分かり、Grubでの構築に方向を変えた。

起きたこと

仮想PC(BIOS)がUSBからブートできない

仮想マシンをテストで便利に使わせていただいているが、今回はUSBからのブート。
VMware Playerの仮想BIOSはUSBからの起動をサポートしていない。
vmware technology network / Boot from USB drive in VMWare Player?

UEFIであればサポートしているので、最近の環境を試そうと思ったら問題はないのだろうけれども、今回はBIOSで色々と試したいことがあるなーと。

こんな時にPlop Boot Managerがあると教えてくれているのだが、それでもなおUSBフラッシュメモリーはない、ということに。
今回の場合でいくと、ちょっとVMware Player側に何か癖がありそうで、これは無理と割り切り。

Grubメニューが表示されない

Boot-Repairでブート領域を回復すると、USBフラッシュメモリーに入っている/boot/grubが/boot/grub_oldに書き換えられる(多分。観察はしていない)。
これにより、Grubはメニューを表示しなくなる。

今回作成したフラッシュメモリーはFAT32なので、WindowsでもUbuntuでもアクセスできるので、_oldを外せば元通りメニューが表示されるようになる。

さいごに

ある程度やれるようになってきて、記事が整理できる頃になると、この手法に関する情報は日本語でもしっかりと提供されていることに気付く。
検索で使う「言葉」の問題なのか、今検索すると見つかる不思議。

とはいえ、BIOSとUEFI+セキュアブートの両対応環境を、MBR形式のUSBフラッシュメモリーで手作りしましょう、等というマザーボードのファームウェアが持つ優しさに依存した記事はあまりなかったのと、やっぱり後から見返すと自分が楽という理由でリリース。

またこれも、もうちょっと分かってくると、使いやすいものにできるのかもしれないな。

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他