UEFI環境でUSBメモリにLinuxをインストールする

USBメモリにLinuxをインストールする場合、UEFIではなくレガシーで起動させてインストールする必要がありましたが、最近はノートPCを中心にUEFIオンリーのPCが増えています。また、UEFI環境でSSDの領域を分割してデュアルブートというのもかなりハードルが高いようです。

となると、UEFI環境でUSBメモリから(Liveシステムではなく)Linuxを起動したいということで、どうしたらよいか調べてみました。

すると、以下のサイトが見つかりました。

これらに記載されているのは、

  • 通常のインストールではインストール先がUSBメモリであっても、LinuxのインストーラはSSD上のESPパーティションを使ってしまう。
  • これを回避するためには、インストーラにESPパーティションを認識させなければよい
  • 具体的には、インストーラの起動前にGpartedでESPパーティションのespフラグを落としてからインストーラを起動し、インストール完了後に再度Gpartedでパーティションのespフラグを戻してやればよい

というようなことになります。

・・・であれば、始めから内蔵のnvmeやSSDを認識させなければよいのでは?、と考え、LinuxMint21 Cinnamon Editionで試してみました。

※以下は間違うとSSD上のシステムを飛ばしてしまうことになるので、真似する場合にはよく内容を理解して自己責任で行ってください。

具体的には、インストーラUSBでGRUBが起動したところで、「e」を押してカーネルの起動パラメータの記述でquiet splashが並んでいるところに、内蔵SSDがNVMEの場合は

initcall_blacklist=nvme_init

を追加します。なお、内蔵SSDがSATAの場合には、

libata.force=disable

を追加して、起動したらディスクユーティリティなどで内蔵ディスクが認識されていないことを確認します。

あとは、インストール先のUSBメモリを挿入してからの手順は通常のインストール手順と同じですが、サードパーティドライバをインストールする場合には起動時のパスワードの設定が要求されます。(でも、実際には起動時に聞かれないんですよね。理由はよくわかりません。)

インストールが完了して、再起動するかどうかを確認する画面に遷移したら、「試用を続ける」を選択して、次回の起動でもSSDを認識しないようにします。

作業としては、インストールしたメディアは /target にマウントされているので、

$ cd /target/boot/grub/
$ sudo vi grub.cfg

でgrubの(生成された)設定ファイルを編集し、2箇所あるquietを

initcall_blacklist=nvme_init

に置換してから再起動します。(内蔵SSDがSATAの場合には、libata.force=disable に変更します)

保存して再起動すると、GRUBではなく青い背景の「Perform MOK management」という画面で立ち上がってくるので、ここでContinue bootを選択します。

再起動したら、ディスクユーティリティで内蔵のSSDを認識していないことを確認します。

なお、うまく行っていない場合には、アップデート等は一切行わずに再起動して、再起動直後にESCを押してGRUBメニューを出します。(押しすぎるとコマンドラインまで行ってしまうので、その場合は再起動し直してGRUBメニューを出す)
上手く、GRUBメニューを出せたら、再度「e」を押してカーネルの起動パラメータの記述でquiet splashが並んでいるところをインストーラ起動時と同様に修正してから起動して、内蔵SSDが認識されない状態で起動します。

成功したら、アップデート等を行う前に、まず /etc/default/grub を編集し、「GRUB_CMDLINE_LINUX_DEFAULT」の起動時オプションのsplash quietを削除して「initcall_blacklist=nvme_init libata.force=disable」を追加します。合わせて、GRUBの起動時メニューも出したいので、冒頭のオプション設定部分を以下のように変更します。

GRUB_DISABLE_SUBMENU=y
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=30
    :
GRUB_CMDLINE_LINUX_DEFAULT="initcall_blacklist=nvme_init libata.force=disable"


修正後は、

$ sudo grub-mkconfig -o /boot/grub/grub.cfg

としてgrub.cfgファイルを自動生成させて反映させます。

再起動後、再度ディスクユーティリティで内蔵のSSDを認識していないことを確認します。

問題なければ、通常の内蔵ディスクへのインストールと同様にアップデート等を行っていきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)