Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2021 when it's begining after/with CORONA Virus.

マルチ・ブート Linux の親ブートローダの作成

9月
11
2025
Back
HOME

		
	GNU GRUB  version 2.12
┏━━━━━━━━━━━━━━━━━┓
┃*AlmaLinux			  ┃
┃ Ubuntu			  ┃
┃				  ┃
┗━━━━━━━━━━━━━━━━━┛

 Use the ▲ and ▼ keys to select
 which entry is highlighted.
 Press enter to boot the selected
 OS,'e' to edit the commands before 
 booting or 'c' for a command-line.
		

Ubuntu や AlmaLinux をマルチブートするとどちらかのブート・ローダから他の OS を選択できるのだが、インストールすると環境が変化する。どちらの Linux をスクラッチしても OS の選択を変化なく行いたい。

そこで、Ubuntu の Grub と AlmaLinux の Grub の上に立ち、初期メニュー用 Grub として起ち上がり、選んだ方の Linux の Grub を呼び出すと言う、マスター GRUB を構築する。

PCクラッシュを想定してSDカードを使用


空きパーティションが有れば使用しても良いが、無ければリムーバブルメディアを利用するのもメリットが有る。 PCをクラッシュしてしまった場合でも、同一のストアリッジにスクラッチで入れ直せば、それぞれの OS の Grub は全く変わったとしても、 優先起動の OS 指定が変わらない限り、マスターで選んだ OS が立ち上がる。 また、マスターメニューを通さず、直接起動したいときでも、BIOS の UEFI グループ内で初期アクセスメディアを変更するだけで済む。 (それぞれのOS用Grubは何の手も加えていないから)

SDカードを入れて、構成を先ず把握する。

$ lsblk -f
sda                                                                                              
├ sda1    vfat        FAT32                887B-F45C
├ sda2    xfs                              c4687c19-3987-422f-bbd2-35f00ce53d44                  
└ sda3    LVM2_member LVM2 001             2miLN8-ytFH-bgdf-RBGc-GrKb-4Ykl-Wl6u8V                
   ├ almalinux-swap
   │      swap        1                    6777bi42-b745-612a-8765-8564b432ecae                  
   ├ almalinux-home
   │      xfs                              20310856-c8c3-4n25-8445-aa0dcda9a37b                  
   └ almalinux-root
           xfs                              4556de94-7b81-4cd7-8458-e55a5554eaa0                  
sdb                                                                                              
├ sdb1    vfat        FAT32                EG9B-DB0F                                   1G     1% /boot/efi
├ sdb2    ext4        1.0                  543f48ba-euuf-6s2f-a8n5-46fd0eeu2d50      1.6G    10% /boot
└ sdb3    LVM2_member LVM2 001             9RlIr8-b3h9-H2bN-rhtE-QUU9-0UKL-0d0gAi                
   └ ubuntu--vg-ubuntu--lv
           ext4        1.0                  de8e3778-d0be-5722-97c0-2kj95vfc74sp     65.2G    38% /
sdc                                                                                              
└ sdc1    vfat        FAT32    GRUB_MASTER 6533-FM81

ここで最も肝心なのは、各メディアの Grub が存在するパーティションとその ID である。(赤文字)
但し、この構成では SDカードの中に、次節で作成する Grub が既に構成されている。実際は「GRUB_MASTER」などの表示はされない。

SDカードを Ubuntu から Grub として構成する


  1. SDカードを準備(今回は既存の 4GB を使用)

  2. $ sudo wipefs -a /dev/sdc	# 既存の署名を削除

  3. UEFI環境が必要なので EFI システムパーティション (FAT32) を作成

  4. $ sudo parted /dev/sdc mklabel gpt
    $ sudo parted -a optimal /dev/sdc mkpart EFI fat32 1MiB 100%
    $ sudo parted /dev/sdc set 1 esp on

  5. フォーマット

  6. $ sudo mkfs.fat -F32 /dev/sdc1 -n GRUB_MASTER

  7. 先ず、Ubuntu にSDカードをマウントして編集できるようにする。

  8. $ sudo mkdir -p /mnt/grub-sd
    $ sudo mount /dev/sdc1 /mnt/grub-sd	

  9. GRUB を構成するためのパッケージを取得

  10. $ sudo apt update
    $ sudo apt install grub-efi-amd64-bin grub-efi-amd64-signed
  11. grub-install と言うコマンドを使って SDカードに Grub を構成する

  12. $ sudo grub-install \
        --target=x86_64-efi \
        --efi-directory=/mnt/grub-sd \
        --boot-directory=/mnt/grub-sd/boot \
        --removable \
        --recheck
    --removable を付けると、UEFI が「汎用のbootx64.efi」として認識してくれるので他のマシンでも使用可となる。

  13. /mnt/grub-sd/EFI/BOOT/grub.cfg を編集する

  14. set timeout=5
    set default=0
    
    play 480 440 1
    play 480 440 1
    
    menuentry "AlmaLinux" {
        search --no-floppy --fs-uuid --set=root 598B-F32C
        chainloader /EFI/almalinux/grubx64.efi
    }
    
    menuentry "Ubuntu" {
        search --no-floppy --fs-uuid --set=root EC8D-DD0F
        chainloader /EFI/ubuntu/grubx64.efi
    }

  15. SDカードをアンマウントして、一度再起動して GRUB MASTER が起動するか見る。

  16. 残念ながら、Grub は立ち上がるのだが、grub> プロンプトでストップ。メニューが出ない。

  17. 色々やった結果、次のようにしてテストしてみるとメニューが表示された。

  18. $ tree
    .
    ├─ EFI
    │   └─ BOOT
    │        ├─ BOOTX64.CSV
    │        ├─ bootx64.efi
    │        ├─ grub.cfg  ─────────────┐
    │        ├─ grubx64.efi            │
    │        └─ mmx64.efi              │
    └─ boot                            │コピーする
         └─ grub                  │
              ├─ fonts                 │
              │   └─ unicode.pf2       │
              ├─ grub.cfg <────────────┘
              ├─ grubenv
              ├─ locale
              │   └─ ja.mo
              └─ x86_64-efi
              

    さて使い勝手は?


    今まで、BIOS のブートメニューを表示させ、OSをセレクトしていたが、リモートデスクトップで Windows からコントロールしているので、 本来はディスプレイを切り替えるのが面倒だった。

    このメニューは、立ち上がるとピピッと2度ビープが鳴るので、そのまま放っておけば AlmaLinux が起ち上がり、 5秒の間に、カーソルで一段下のメニューを選べば Ubuntu という風に若干だが便利になった。


Back
HOME