新しいブートパーティションの準備

新しいブートパーティションの準備

既存の質問のうち、これ私がやっていることと最も似ているように見えますが、パーティションを拡張しようとしているのですが、/boot/ と /boot/efi に異なるパーティションがマウントされている理由と、失敗せずに進める方法がわかりません。

これまでに、新しいパーティションを作成し、それを にマウントして/newBootを実行したのでsudo rsync -a /boot/ /newBoot/、切り替える新しいパーティションには関連するファイルがすべてあると想定しています。

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                        FSTYPE   SIZE FSUSED LABEL   PARTLABEL          MOUNTPOINT UUID                                   PARTUUID
sda                                  7.3T                                                                                     
└─sda1                      crypto   7.3T                                              4dffc196-9926-43d9-a7c8-38898681f402   85b3a656-4886-4b37-b9c1-2acb0158587a
...
nvme0n1                            931.5G                                                                                     
├─nvme0n1p1                 vfat     512M   5.3M         EFI System Partition
│                                                                           /boot/efi  FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                 ext2     488M 313.7M                            /boot      606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
...
└─nvme0n1p4                 vfat     1.5G        NEWBOOT newboot                       530D-4828                              ea886018-714f-46fb-8f21-785c74543891
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ sudo efibootmgr -c -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0000,0004
Boot0000* ubuntuNew HD(1,GPT,85b3a656-4886-4b37-b9c1-2acb0158587a,0xffff,0x3a3535ca9)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)

現在のフォルダーに 2 つのパーティションが含まれている理由はわかりませんが、/boot1 つは機能するはずです。少なくとも、上記のリンク先の質問の選択された回答はそうなっていますよね?

さて、何が足りないでしょうか/etc/fstab??

$ cat /etc/fstab 
...
UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
...
UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1
...

lsblkと(@oldfred に感謝)によると、efibootmgr -v新しい最初の起動オプションはsda1ではなくを使用する必要があるようですnvme0n1p4sda1は、絶対に起動したくない外付けドライブです。 なぜそれがデフォルトになっているのでしょうか??

  • 新しいパーティションから起動するには、どのような変更が欠けているのでしょうか?
  • 再起動する前に fstab のUUIDを変更する必要がありますか?/boot
  • には別のパーティションが必要ですか/boot/efi?

答え1

と の両方/boot/boot/efi別々のファイルシステムとして持つのはやりすぎですが、

  • 非常に古いBIOSベースのシステムでは、/bootBIOSの制限を回避するために別のパーティションが必要になる場合があります。
  • UEFI スタイルで起動するシステムでは、/boot/efiまたは同等の ESP パーティションが必要になります。これは、ファームウェアがブートローダ ファイルを見つける場所として想定しているからです。
  • 暗号化されていない別のファイルシステムを持つことで、GRUB が認識する限定された暗号化セットではなく、ルートファイルシステム/bootでサポートされている任意の暗号化方式を使用できるようになりcryptsetupます。

最近の Debian/Ubuntu のデフォルトのパーティション分割では、両方が個別のパーティションとして存在するため、デフォルトの構成で可能な限り広範囲のシステムをカバーできます。

oldfred のコメントで述べられているように、UEFI は、GPT パーティション テーブル内のパーティション固有の GUID によって、使用する ESP パーティションを識別します。その GUID は、Linux では PARTUUID と呼ばれます。lsblk -o +partuuidそれが表示されます。

コマンドefibootmgrはほぼ正しかったです。正しいディスクを使用して ubuntuNew ブート オプションを作成するには、次のようにする必要があります。

sudo efibootmgr -c -d /dev/nvme0n1 -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI

efibootmgrPARTUUID を独自に検索し、自動的にそれを使用して新しいブート エントリを作成します。ディスクを指定するだけで済みます (ディスクに複数の EFI システム パーティションがない限り)。

shimx64.efiがロードされると、Debian/Ubuntuスタイルで構成されたシステムでは、と同じディレクトリをgrubx64.efi読み取ります。そのファイルには、ディレクトリを含むファイルシステム(別のパーティションであるか、ルートファイルシステム上の通常のディレクトリであるかに関係なく)のファイルシステムUUIDを識別する数行が含まれています。その結果、Debian/Ubuntuシステムはgrub.cfggrubx64.efi/bootいつもシステムが BIOS または UEFI のどちらを使用しているかに関係なく、 に「メイン」GRUB 設定ファイルがあります/boot/grub/grub.cfg。異なる年代のシステムが多数ある場合は便利です。

参考までに、RedHat 7 および 8 では、実際の G​​RUB 構成は、/boot/grub2/grub.cfgBIOS スタイルのシステムでは に、/boot/efi/EFI/redhat/grub.cfgUEFI システムでは にあります。

しかし/bootとをマージする場合/boot/efi、注意すべき点がいくつかあります。

  • に指定されるブートローダ パスは、efibootmgrESP ファイルシステムのルートに基づいています。元々そのパスは から始まるため/boot/efi、 Linux から見る\\EFI\\UBUNTU\\SHIMX64.EFIと を指します/boot/efi/EFI/UBUNTU/SHIMX64.EFI。 だけを使用する場合は/boot、UBUNTU ディレクトリを 1 レベル上に移動するか、ブートローダ パスを として指定する必要があります\\EFI\\EFI\\UBUNTU\\SHIMX64.EFI
  • /bootGRUB が理解できるもので、そこからカーネルと initramfs ファイルをロードできる必要があります。Ubuntu の UEFI バージョンの GRUB は、ext2 と vfat を確実に理解します。そのため、単一の vfat パーティションにマージすると/boot/boot/efiGRUB に問題はありません。ファームウェアは、そのパーティションから SHIMX64.EFI と GRUBX64.EFI を読み取る必要があり、一般的な UEFI ファームウェアは ext2 を理解できないため、ext2 は使用できません。
  • 起動時には、/bootは GRUB のみで必要であり、Linux カーネルでは必要ありません。マウント解除したままで/bootも、システムは問題なく起動します。ただし、/bootカーネルの更新が正常に行われるように、マウントしたままにしておく必要があります。(または、マウント解除したままにして非表示にしたい場合は、 スクリプトを追加して、/etc/kernel/pre*.d/カーネル更新がインストールされる前に自動的にマウントし、 スクリプトを追加して、/etc/kernel/post*.d特定のカーネル パッケージのインストール/削除が完了した後に再度マウント解除することができます。)

ブートローダは、要件が何であるかをしっかりと把握していないと、「恐ろしく危険」であると認識されることがよくあります。一方、通常は自己完結型であるため、ブートローダに関連する問題は、外部メディアからシステムを起動するという最初のハードルを乗り越えれば、通常はそれほど修正が難しくありません。ブートローダが機能しないシステムが「ダメ」だとは言いません。少し外部からの支援が必要なだけです。

答え2

ブートローダーは現在マウントされているものを検索するので/boot/efi、そのパーティションも拡張したくない場合は、そのパーティションをそのままにして、以下に説明するようにファイルに小さな変更を 1 つだけ加えることができます。

新しいブートパーティションの準備

  1. 希望するサイズの新しいext2パーティションを作成します。このパーティションにはブート フラグは必要ありません。efi パーティションがエントリ ポイントとなり、この新しいパーティションに委任されます。
  2. 新しいパーティションをどこかにマウントします。/newBoot例えば
  3. 古いブートパーティションからファイルをコピーします。たとえば、rsync --recursive --delete --archive /boot/ /newBoot/
  4. のコンテンツを削除します/newBoot/efi/。ここでは、 という 1 つのフォルダーのみでした。rm -rf /newBoot/efi/EFI/は削除しないでくださいnewBoot/efi/。そこに古いefiフォルダーをマウントします。

efi新しいパーティションを使用するように指示する

/newBootのUUIDを調べます:

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                                          FSTYPE        SIZE FSUSED LABEL     PARTLABEL            MOUNTPOINT           UUID                                   PARTUUID
nvme0n1                                                   931.5G                                                                                                   
├─nvme0n1p1                                   vfat          512M   5.3M           EFI System Partition /boot/efi            FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                                   ext2          488M 313.7M                                /boot                606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
├─nvme0n1p3                                   crypto_LUKS 927.7G                                                            e7f674b8-4bec-4502-a1e5-0e93aa34786f   2fed2ecb-b548-479b-aa3f-7f1bbfb9981f
│ └─sda3_crypt                                LVM2_member 927.7G                                                            9tx8Yv-XDCR-RmGf-fmXo-WiX2-SDpG-xH1si4 
│   ├─ubuntu--gnome--vg-root                  ext4        911.6G 734.2G                                /                    1cccfb0a-69da-4246-a071-52f882681418   
│   └─ubuntu--gnome--vg-swap_1                swap         15.8G                                       [SWAP]               e3facfb8-db2e-426d-aef4-b6c81004fd6f   
└─nvme0n1p4                                   ext2          1.5G        newBoot   newBoot                                   5aca79e7-b740-46d3-bc76-aa7e8b8b93da   9e8baf2f-2118-4042-9c47-7ffb824ada52

それに応じて編集し/boot/efi/EFI/ubuntu/grub.cfg、古い現在の UUID を新しいものに置き換えます。

# cat /boot/efi/EFI/ubuntu/grub.cfg
# search.fs_uuid 606a1976-d1c2-4246-a256-a8afddb04f84 root 
search.fs_uuid 5aca79e7-b740-46d3-bc76-aa7e8b8b93da root 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

仕上げ

これで、システムは新しいパーティションから起動するはずですが、/boot/新しいパーティションから起動した後は古いパーティションになります。/etc/fstabシステム更新ですべてのファイルが適切な場所にあるように編集します。

# UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
UUID=5aca79e7-b740-46d3-bc76-aa7e8b8b93da /boot           ext2    defaults        0       2

/boot/efi/etc/fstabそのまま残ります:

UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1

関連情報