カーネルを必要とするいくつかのベンチマークを実行する必要があるため(一部のカーネルオプションをオンにする)、カーネルを4.19にアップグレードしようとしています。なぜこれがうまくいかないのかわかりません。私はUbuntu 18を2回新しくインストールしましたが、4.19カーネルをダウンロードし、oldconfig(またはolddefconfig)を作成し、モジュールとカーネル自体をインストールしました。再起動後の出力は次のようになります。
Loading Linux 4.19.237
Loading initial ramdisk
error: out of memory
Press any key to continue
キーを押すと、初期起動メッセージとエラースタックのみが表示されます。
再起動すると、古い(4.15)カーネルはまだ起動し、完全に実行されます。
grub.cfgの両方のエントリは類似しています。
menuentry 'Ubuntu, with Linux 4.19.237' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.237-advanced-cbc1623f-b651-454a-87dd-da2056dd55\05' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 cbc1623f-b651-454a-87dd-da2056dd5505
else
search --no-floppy --fs-uuid --set=root cbc1623f-b651-454a-87dd-da2056dd5505
fi
echo 'Loading Linux 4.19.237 ...'
linux /boot/vmlinuz-4.19.237 root=UUID=cbc1623f-b651-454a-87dd-da2056dd5505 ro
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.19.237
}
menuentry 'Ubuntu, with Linux 4.15.0-20-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-20-generic-advanced-cbc1623f-b651-45\4a-87dd-da2056dd5505' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 cbc1623f-b651-454a-87dd-da2056dd5505
else
search --no-floppy --fs-uuid --set=root cbc1623f-b651-454a-87dd-da2056dd5505
fi
echo 'Loading Linux 4.15.0-20-generic ...'
linux /boot/vmlinuz-4.15.0-20-generic root=UUID=cbc1623f-b651-454a-87dd-da2056dd5505 ro
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.15.0-20-generic
}
私は完全にアイデアを持っていません。カーネルを数回再コンパイルし、BIOSでTPMを無効にし、BIOSを更新し、LVMなしでUbuntuを再インストールし、回復モードを試み、RAIDからAHCIに変更しました(ディスク1つのみ)。
どんなアイデアがありますか?
編集:設定を検索して変更した後に起動しましたが、まだメモリ不足エラーが発生してキーを押す必要がありました。カーネルで複数のVIRTIO、AHCI、およびその他のBLKパラメータを有効にしました。その後、メモリ不足エラーが発生した後にボタンを押すと、まったく異なるUUIDのリストが表示されます。
これによりUUIDを使用しようとしませんでした。したがって、キーを押すと長いブートログとログインプロンプトが表示されますroot=/dev/sda2
。out of memory error
何らかの理由でネットワークデバイスの名前が新しいカーネルで(enp4s0からenp3s0に)変更されたため、netplanファイルを編集する必要があり、ネットワークが作成されました。
今でもまだメモリ不足エラーに苦しんでいますが、その理由がわかりません。このコンピュータをリモートで使用して再起動する必要があるたびにアクセスできないため、この問題を解決する必要があります。このような単純なカーネルアップグレードでなぜこれが起こるのかというアイデアはまだ開いています。
答え1
initrd画像が非常に大きいことがわかりました。デフォルトの50MBと比較して500MBです。サイズを縮小する鍵は次のとおりです。カーネルをコンパイルするときにinitrdのサイズを小さくするには?
デフォルトでは:に/etc/initramfs-tools/initramfs.conf
変更します。MODULES
MODULES=dep
モジュールのインストール時にデバッグシンボルを削除する変数を渡します。make INSTALL_MOD_STRIP=1 modules_install
それ以来、out of memoryエラーも消え、何らかの理由でvfsエラーも消えました。 initrdは50MB未満です。これらの変更を適用する前に、カーネルを含むすべてのパッケージをアップグレードしましたが、おそらく影響はありません。
答え2
MODULESを変更することに加えて、initrdsの圧縮レベルを上げることができます。
存在する/etc/initramfs-tools/initramfs.conf
MODULES=dep
COMPRESS=xz
confファイルを更新したら、次のコマンドを実行します。
sudo update-initramfs -c -k all
sudo update-grub