ここに記載するコマンドは非常に危険で、スペルミスや大文字/小文字を間違えただけで取り返しのつかない事態となります。全て、自己責任でお願いします。また、ここで示すbios_grubによる対応は決してメジャーな方法ではありません。
UEFI方式が出現し10年以上経過していますが、未だに壊れやすいFAT32領域 512MB以上 を必要としている点には疑問を感じます。マウントしない対応や、ReadOnlyでマウントすることも可能ですが、アップデート時にrwマウントするのを忘れ、トラブルとなるケースもあります。
これを打開する方法として、bios_grubという1MBの小さなパーティションを設けることで、UEFIシステムで従来のMBR方式で起動させる対応があります。この対応は、ChatGPT先生でも誘導してあげないと正しいガイドをしてくれないので、ここで整理します。以下、Ubuntu22.04では動作確認済みです。
パーティションの作成は、gpartedというGUIツールを使えばマウス操作だけでも可能で、実際、私もしばらくはgpartedを使って調整していました。しかし、M.2 SATAも普及しUEFIへの対応場面が増え、GUI操作がうっとおしくなってきたので、コマンド対応にしました。コマンドは sgdisk を使います。
## 環境に合わせて・・・ SSD=/dev/nvme0n1 SSDp2=/dev/nvme0n1p2 ## パーティションテーブルを作る。以下、状況に合わせて・・・ sgdisk -o $SSD ## 既存のパーティションデータを消去 sgdisk -Z $SSD ## 上記でエラーの場合は根こそぎクリア sgdisk -g $SSD ## MBRをGPTに変更する場合(元データは消えない) sgdisk -G $SSD ## もしクローンしたSSDならGUID(固有値)を変える sgdisk -L ## [参考] ef02, 8300などのtypeの説明を表示 ## パーティションを区切る。bios_grubは+1MでもOK。 ## EF02の区画にはgrub-installでcore.img(MBR/i386)が入る。 sgdisk -n 0:0:+2M -t 0:ef02 -c 0:"bios_grub" $SSD sgdisk -n 0:0:0 -t 0:8300 -c 0:"ROOTFS" $SSD ## ROOTFS区画をフォーマット mkfs.ext4 $SSDp2 tune2fs -c0 -i0 $SSDp2 ## ディスクチェック無効化 e2label $SSDp2 ROOTFS ## LABEL名でマウントさせるため ## マウント mount LABEL=ROOTFS /mnt |
こうして作ったパーティションは下記のようにFAT32領域が無しとなります。このシンプルなパーティションで、下記では/dev/sdh2にユーザランドをコピーすれば、UEFIのマザーボードでUbuntu22.04が起動します!
--
以下は、LinuxのクローンSSDを作成するときの実施例(ご参考)です。ここでのrootfsのコピー実施方法はケースバイケースでノウハウも必要です。ここではあえて明記しませんが、コピー元の/bootや/homeが別パーティションになっている場合には、それらの内容もROOTFS(/mnt)に全部コピーする必要があります。
## rootfsのコピー . . . . . (割愛) ## chrootの新技! |
参考になったページ:
GRUB/ヒントとテクニック - ArchWiki
ArchLinuxのページですが、Ubuntuでもほぼ同じです。core.imgの説明がとても参考になりました。