ビルドされたカーネルをインストールして再起動しようとすると、次のエラーが表示されます:
マウント: /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
。その後、カーネルはモジュールをロードし、ディスクを読み取り、必要なディスクから起動できるようになります。