ブートパーティションとカーネルパーティションが同期しないようにする方法は?

ブートパーティションとカーネルパーティションが同期しないようにする方法は?

私は誤ってカーネルを更新しましたが、ブートパーティションは更新しなかったため、Arch Linuxシステムが壊れているようです。たとえば、次のようになります。

pacman -Q linux  -> results in 4.20.arch1-1
uname -a -> results in 4.19.4-arch1-1-ARCH 

何が起こっているのかよく分からない。 /bootディレクトリを見ると、initramfs-linux-fallback.img、initramfs-linux.img、vmlinuz-linuxの3つのファイルが含まれています。数週間前にデート。それでは、正確に同期されていないものは何ですか?私のvmlinuz-linuxがルートパーティションのカーネルと同期していませんか?

その結果、何らかの理由でカーネルはもはや私のネットワークデバイスを見つけることができません。どうやってこれが起こったのかわかりません。私が実行した唯一の関連コマンドは次のとおりです。

sudo pacman -Syu

私の考えでは、このコマンドはカーネルを変更するのではなく、パッケージデータベースのみを更新するものと思います。

とにかく私の質問は、ブートパーティションを再同期してカーネルと一致させるか、少なくともネットワークデバイスモジュールを見つけてロードする方法です。明らかにもうそうではありません。

私のシステムはマザーボードから直接起動するように設定されています(中間ブートローダなし)。ただし、このコマンドを実行すると、次のようになります。

# efibootmgr --verbose

私が得た結果は「コマンドが見つかりません」です。このコマンドを使用するには、ライブブート環境にある必要がありますか?この問題を解決してシステムを再同期するにはどうすればよいですか?また、これが起こらないようにするにはどうすればよいですか?つまり、多くのパッケージを追加する予定ですが、新しいパッケージを追加するたびに、システムがカーネルを更新してシステムを混乱させると問題になります。

答え1

この問題の解決策は次のとおりです。

  1. EFIパーティション(私の場合はEFIスタブタイプを起動するためのVFATパーティション)を便利なディレクトリにマウントします。

    # /dev/nvme0n1p1/efi マウント

私の場合、デバイス名は「M2ドライブなので」と同じでしたnvme0n1が、SATAドライブを使用している場合は、デバイス名は「sda1」と同じかもしれません。

  1. 古いファイルと新しいファイルを区別できるように、ブートイメージファイルのサイズをメモしてください。

  2. 更新されたブートファイルをext4パーティションからEFIパーティションにコピーします(これは以前のブートイメージを上書きします)。

    #cp /boot/* /efi

  3. ファイルサイズを確認して、/efiディレクトリ(VFATパーティション)に新しいファイルが含まれていることを確認してください。

  4. 一般(ext4)ファイルツリーで/ bootディレクトリとそのディレクトリを区別できるように、EFIパーティションに空のファイルを追加します。

    # cd /efi
    # EFI ブートディレクトリタッチ

  5. VFATパーティションを/ bootディレクトリにマウントするには、fstabファイルに行を追加します。これにより、デフォルトのArchルートディレクトリの/ bootディレクトリが非表示になります。これにより、ext4ドライブの/bootディレクトリバージョンを上書きするのではなくアクセスできなくなります。 fstabの一般的な行は次のとおりです。

    UUID=4AF7-CA4B /boot vfat デフォルト 0 0

ドライブのUUIDを見つけるには、次のlsblk -fコマンドを使用します。

  1. システムを再起動して正常に動作していることを確認し、起動ディレクトリを確認してください。

    $ls/スタート

タグファイル(「EFI-boot-directory」または選択した名前)を表示する必要があります。ディレクトリにこのファイルがない場合は、EFIパーティションがマウントされていないことを意味するため、fstabファイルを再確認する必要があります。

EFIパーティションが/ bootに自動的にマウントされたら、システムアップデートを実行するたびに正しく更新し、ブートイメージをインストールしたモジュールと同期させる必要があります。

答え2

ここに回答するには質問が多すぎますが、コメントには適していないため、質問が削除されるまでここに投稿します。

  1. /bootアップグレード中にインストールされていないため、実行中のカーネルが必要なモジュールにアクセスできません。

  2. efibootmgrはまだインストールしていないので、「コマンドが見つかりません」と言います。

  3. アップグレードが/bootシステムにインストールされていないため、インストールされていません(またはインストールされている場合は正しくありません)。/boot/etc/fstab

関連情報