既存の質問のうち、これ私がやっていることと最も似ているように見えますが、パーティションを拡張しようとしているのですが、/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 つのパーティションが含まれている理由はわかりませんが、/boot
1 つは機能するはずです。少なくとも、上記のリンク先の質問の選択された回答はそうなっていますよね?
さて、何が足りないでしょうか/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
ではなくを使用する必要があるようですnvme0n1p4
。sda1
は、絶対に起動したくない外付けドライブです。 なぜそれがデフォルトになっているのでしょうか??
- 新しいパーティションから起動するには、どのような変更が欠けているのでしょうか?
- 再起動する前に fstab の
UUID
を変更する必要がありますか?/boot
- には別のパーティションが必要ですか
/boot/efi
?
答え1
と の両方/boot
を/boot/efi
別々のファイルシステムとして持つのはやりすぎですが、
- 非常に古いBIOSベースのシステムでは、
/boot
BIOSの制限を回避するために別のパーティションが必要になる場合があります。 - 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
efibootmgr
PARTUUID を独自に検索し、自動的にそれを使用して新しいブート エントリを作成します。ディスクを指定するだけで済みます (ディスクに複数の EFI システム パーティションがない限り)。
shimx64.efi
がロードされると、Debian/Ubuntuスタイルで構成されたシステムでは、と同じディレクトリをgrubx64.efi
読み取ります。そのファイルには、ディレクトリを含むファイルシステム(別のパーティションであるか、ルートファイルシステム上の通常のディレクトリであるかに関係なく)のファイルシステムUUIDを識別する数行が含まれています。その結果、Debian/Ubuntuシステムはgrub.cfg
grubx64.efi
/boot
いつもシステムが BIOS または UEFI のどちらを使用しているかに関係なく、 に「メイン」GRUB 設定ファイルがあります/boot/grub/grub.cfg
。異なる年代のシステムが多数ある場合は便利です。
参考までに、RedHat 7 および 8 では、実際の GRUB 構成は、/boot/grub2/grub.cfg
BIOS スタイルのシステムでは に、/boot/efi/EFI/redhat/grub.cfg
UEFI システムでは にあります。
しかし/boot
とをマージする場合/boot/efi
、注意すべき点がいくつかあります。
- に指定されるブートローダ パスは、
efibootmgr
ESP ファイルシステムのルートに基づいています。元々そのパスは から始まるため/boot/efi
、 Linux から見る\\EFI\\UBUNTU\\SHIMX64.EFI
と を指します/boot/efi/EFI/UBUNTU/SHIMX64.EFI
。 だけを使用する場合は/boot
、UBUNTU ディレクトリを 1 レベル上に移動するか、ブートローダ パスを として指定する必要があります\\EFI\\EFI\\UBUNTU\\SHIMX64.EFI
。 /boot
GRUB が理解できるもので、そこからカーネルと initramfs ファイルをロードできる必要があります。Ubuntu の UEFI バージョンの GRUB は、ext2 と vfat を確実に理解します。そのため、単一の vfat パーティションにマージすると/boot
、/boot/efi
GRUB に問題はありません。ファームウェアは、そのパーティションから SHIMX64.EFI と GRUBX64.EFI を読み取る必要があり、一般的な UEFI ファームウェアは ext2 を理解できないため、ext2 は使用できません。- 起動時には、
/boot
は GRUB のみで必要であり、Linux カーネルでは必要ありません。マウント解除したままで/boot
も、システムは問題なく起動します。ただし、/boot
カーネルの更新が正常に行われるように、マウントしたままにしておく必要があります。(または、マウント解除したままにして非表示にしたい場合は、 スクリプトを追加して、/etc/kernel/pre*.d/
カーネル更新がインストールされる前に自動的にマウントし、 スクリプトを追加して、/etc/kernel/post*.d
特定のカーネル パッケージのインストール/削除が完了した後に再度マウント解除することができます。)
ブートローダは、要件が何であるかをしっかりと把握していないと、「恐ろしく危険」であると認識されることがよくあります。一方、通常は自己完結型であるため、ブートローダに関連する問題は、外部メディアからシステムを起動するという最初のハードルを乗り越えれば、通常はそれほど修正が難しくありません。ブートローダが機能しないシステムが「ダメ」だとは言いません。少し外部からの支援が必要なだけです。
答え2
ブートローダーは現在マウントされているものを検索するので/boot/efi
、そのパーティションも拡張したくない場合は、そのパーティションをそのままにして、以下に説明するようにファイルに小さな変更を 1 つだけ加えることができます。
新しいブートパーティションの準備
- 希望するサイズの新しい
ext2
パーティションを作成します。このパーティションにはブート フラグは必要ありません。efi パーティションがエントリ ポイントとなり、この新しいパーティションに委任されます。 - 新しいパーティションをどこかにマウントします。
/newBoot
例えば - 古いブートパーティションからファイルをコピーします。たとえば、
rsync --recursive --delete --archive /boot/ /newBoot/
- のコンテンツを削除します
/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