/sysroot への UUID=xxx のマウントに失敗しました: そのようなデバイスはありません - Linux カーネルのインストール後に発生します

/sysroot への UUID=xxx のマウントに失敗しました: そのようなデバイスはありません - Linux カーネルのインストール後に発生します

ビルドされたカーネルをインストールして再起動しようとすると、次のエラーが表示されます:

マウント: /sysroot への UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c のマウントに失敗しました: そのようなデバイスはありません

なぜこのようなことが起こるのでしょうか? 正しく起動するにはどうすれば修正できますか?

システムについて

  • Alpine Linux 3.12_alpha20200319 (エッジ) -- Alpine Linux 仮想
  • カーネル 5.4.31-0-virt
  • VirtualBox内で実行

カーネルビルド手順

wget https://mirrors.edge.kernel/pub/linux/kernel/v5.x/linux-5.4.30.tar.xz
tar -xf linux-5.4.30.tar.xz
cp /boot/config-virt /home/name/build/.config
make -C /home/name/linux-5.4.30 O=/home/name/build listnewconfig
make -j4 -C /home/name/linux-5.4.30 O=/home/name/build
cd /home/name/build
make modules_install

次の手順については不明です。

cp System.map /boot/System.map-virt
cp arch/x86_64/boot/bzImage /boot/vmlinuz-virt
cp .config /boot/config-virt

arch/x86/boot/bzImage が渡されるため、実行しませんmake install。このため、32 ビットと 64 ビットがインストールされていると推測します。そのため、代わりに手動でインストールしようとしています。

私の extlinux.conf ファイル:

DEFAULT menu.c32
PROMPT 0
MENU TITLE Alpine/Linux Boot Menu
MENU HIDDEN
MENU AUTOBOOT Alpine will be booted automatically in # seconds
TIMEOUT 30
LABEL virt
  MENU LABEL linux virt
  LINUX vmlinuz-virt
  INITRD initramfs-virt
  APPEND root=UUID=59c56381-e5ec-4a8b-8c2e-f9c6a66d524c moudles=sd-mod,usb-storage,ext4 quiet rootfstype=ext4

MENU SEPARATOR

修正の試み

(以下はすべて同じエラーになります)

  • 再起動前にディレクトリmkinitfsで実行中/
  • ランニングextlinux --install /boot
  • 代わりにビルドディレクトリで実行しmake install、extlinux.confの行をLINUX vmlinuz-virt次のように変更します。LINUX vmlinuz
  • VirtualBox ストレージ コントローラーを AHCI、virtio-scsi、PIIX4 に切り替えてみました。

役に立つかもしれない:

エラーと extlinux.conf で指定された UUID を確認しました。/dev/sda3 を識別します。ただし、起動に失敗した後に緊急回復シェルに入り、/dev ディレクトリを確認すると、存在しません。理由はわかりません。

lsmod はモジュールがロードされていないことを示します。これは起こるべきではないと思います。

と入力して起動を続行するとexitカーネルパニックが発生しますカーネルパニックのスクリーンショット

ファイル

.config -https://github.com/alpinelinux/aports/blob/master/main/linux-lts/config-virt.x86_64

extlinux.conf -https://pastebin.com/QMkePsqS

mkinitfs.conf -https://pastebin.com/rksn7GcN

答え1

投稿で述べたように、

lsmod はモジュールがロードされていないことを示しています。これは起きないはずだと思います

問題は、モジュールがカーネルにロードされていないことに起因していました。現在実行中のカーネルのバージョンは 5.4.31-0-virt で、ビルド中のバージョンは 5.4.30 でした。インストール中のモジュールはディレクトリに配置されていました/lib/modules/5.4.30。このため、初期 RAM ディスク (initramfs) がカーネルの正しいモジュールなしでビルドされ、起動時にロードされませんでした。

これを修正するには、initramfs をビルドするときにカーネル モジュールをインストールした後、代わりに次のコマンドを使用する必要があります。

mkinitfs -o /boot/initramfs-virt 5.4.30

このコマンドは、バージョン (この場合は 5.4.31-0-virt) をデフォルトにするのではなく、initramfs に 5.4.30 カーネルのインストール済みモジュールを含めますuname -r。その後、カーネルはモジュールをロードし、ディスクを読み取り、必要なディスクから起動できるようになります。

関連情報