組み込みカーネルをインストールして再起動しようとするとエラーが発生します。
インストール:/sysrootへのUUID = 59c56381-e5ec-4a8b-8c2e-f9c6a66d524cインストールに失敗しました:該当デバイスはありません
なぜこれが起こるのですか?正しく起動するには、この問題をどのように解決する必要がありますか?
システム情報
- Alpine Linux 3.12_alpha20200319(edge) – Alpine Linux 仮想エディション
- kernel5.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
私はそれを実行しません。make install
なぜなら、それはarch/x86/boot/bzImageを通過するからです。それで、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 wapで、ビルド中のバージョンは5.4.30です。インストールされるモジュールは/lib/modules/5.4.30
ディレクトリに配置されます。これにより、正しいカーネルモジュールなしで初期RAMディスク(initramfs)が構築され、起動時にロードされません。
この問題を解決するには、initramfsをビルドするときにカーネルモジュールをインストールした後、次のコマンドを使用する必要があります。
mkinitfs -o /boot/initramfs-virt 5.4.30
uname -r
このコマンドには、デフォルトバージョン(この場合は5.4.31-0-virt)ではなく、initramfsに5.4.30カーネル用にインストールされたモジュールが含まれています。その後、カーネルはモジュールのロード - >ディスクの読み取り - >必要なディスクから起動できます。