それがUEFIが主流になって以降,作り方がわからず半ば諦めていたが,最近はノートPCに挿しっぱなしできるようなドングルタイプで128GBを超えるようなUSBメモリが安価で手に入ることを知り,ポータブルLinuxを手に入れたい衝動が再燃し,本腰を入れて取り組んでみた.
乗り越えなければならない課題は2つあり,ひとつはLinuxのインストール先となるUSBメモリのEFIパーティションにブートローダをインストールすること.もうひとつは,USBメモリ内のブートローダを起動することだ.
前者については,同様のことをトライした人なら知っていると思うが,Linuxのインストール時に,せっかくUSBメモリにEFIパーティションを作成しても,インストーラーが母艦PCのSSD上にあるEFIパーティションの方にブートローダーをインストールしてしまい,USBメモリ内にはブートローダーがインストールされない.という問題だ.
調べてみると,Linuxのインストーラーを起動する前に,EFIパーティションのESPフラグを落としてやることでインストーラーがEFIパーティションを認識しなくなり,USBメモリに作成したEFIパーティションにブートローダーがインストールされるようだ.
ともの技術メモ:UEFI環境でUSBメモリにLinuxをインストールする
ただ,色々と面倒そうだったので,要するに母艦PCのEFIパーティションを認識しなくなれば良い.というのであれば,もういっそのことEFIパーティションを削除してやれば良い.と横着することにした.
運良く,データを全削除しても問題ないPCが手元にあったので,そいつでLinuxのインストーラーをブートし,パーティション設定時に,PC側のパーティションテーブルを削除したうえで,USBメモリにLinuxをインストールした結果,難しい設定は何もせずにUSBメモリ内のEFIパーティションにブートローダーのGRUBがインストールされた.(なお,今回はLinuxとしてDebianを使用した)
ただし,このUSBメモリをPCに挿して,そのままブートさせようとしてもGRUBをうまく起動できない.これが2つめの課題である.
これを解決するために,いったんWindowsとLinuxのデュアルブート環境でGRUBを起動させる方法と同様にUSBメモリ内のEFI/debian/shimx64.efi をブートポイントとして追加し,USBメモリにインストールしたDebianを起動させた.
目標は,このUEFIの設定変更を実施せずに,USBメモリをブートデバイスに指定するだけでGRUBが起動するようにすることだが,Linuxのインストーラーがまさにこれをやっているので,Debianのインストーラーが入っているUSBメモリのEFIディレクトリを調べてみると,以下のような構成になっていた.
$ tree EFI EFI └── boot ├── bootx64.efi └── grubx64.efi 2 directories, 2 files
この構成をそのままパクれば起動するのでは?と調べてみると案の定,ブートデバイスを指定した場合,EFI/boot/bootx64.efiがデフォルトで呼び出されることがわかったので,EFI/debian/shimx64.efiをEFI/boot/bootx64.efiに置き換えてやることにした.(bootx64.efiの他にも必要そうなファイルが多数あったので,debianディレクトリごとbootディレクトリにコピーし,shimx64.efiをbootx64.efiにリネームした.)
# cd /boot/efi/EFI # cp -r debian boot # cd boot # mv shimx64.efi bootx64.efi
そして,PCを再起動し,ブートデバイスとしてUSBメモリを選択するとGRUBが起動した!(数年来の課題のひとつが解決したので,だいぶ感動モノだった).その後,Debianも問題なく起動し,数年ぶりにポータブルLinuxを作成することに成功した.
これがなんの役に立つかまだわからないが,今回は転がっていた旧型USBメモリで試行したので,とりあえず本番用にAmazonでドングルタイプで128GBのUSBメモリをポチったので,週末はDebianのインストールに勤しむことになりそうだ.
0 件のコメント:
コメントを投稿