USBメモリにLinuxをインストールする場合、UEFIではなくレガシーで起動させてインストールする必要がありましたが、最近はノートPCを中心にUEFIオンリーのPCが増えています。また、UEFI環境でSSDの領域を分割してデュアルブートというのもかなりハードルが高いようです。
となると、UEFI環境でUSBメモリから(Liveシステムではなく)Linuxを起動したいということで、どうしたらよいか調べてみました。
すると、以下のサイトが見つかりました。
- How to install Linux on a USB with UEFI support
- How to Install Ubuntu Linux on an External USB Drive to Make an Actual, Portable Linux System on USB
これらに記載されているのは、
- 通常のインストールではインストール先が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を認識していないことを確認します。
問題なければ、通常の内蔵ディスクへのインストールと同様にアップデート等を行っていきます。