カーネルの起動が失敗するのはなぜですか?

カーネルの起動が失敗するのはなぜですか?

Ubuntu 12.04(カーネル3.2.0-53)がインストールされているシステムで、3.11.1カーネルイメージから起動しようとしています。

その後、コンパイルしてmake defconfigイメージを挿入し、/bootGRUBを更新して再起動します。

再起動すると、次のメッセージが表示されます。

EXT4-fs (sda1) : couldnt mount as ext3 due to feature incompatibilities
EXT4-fs (sda1) : couldnt mount as ext2 due to feature incompatibilities
init : unable to create device: /dev/kmsg
Root filesystem check failed

何が間違っていますか?

カーネルがファイルシステムがext4であることを知っている場合(私はそうすると仮定します)EXT4-fs (sda1)、なぜext3/2でマウントされますか?


/etc/fstab:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=7be51edc-99ae-4e6e-b863-2bef9e4adb22 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sda4 during installation
UUID=e4b936e5-e1c5-4146-9710-03b0d6dfdea2 /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=10d012d1-bbba-43f4-8e8a-8aa493435acb none            swap    sw              0       0

# Move /tmp to RAM
tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

grub.cfg画像アイテム:

menuentry 'Ubuntu, with Linux 3.11.1' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 7be51edc-99ae-4e6e-b863-2bef9e4adb22
    linux   /boot/vmlinuz-3.11.1 root=/dev/sda1 ro   quiet splash $vt_handoff
}
menuentry 'Ubuntu, with Linux 3.11.1 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 7be51edc-99ae-4e6e-b863-2bef9e4adb22
    echo    'Loading Linux 3.11.1 ...'
    linux   /boot/vmlinuz-3.11.1 root=/dev/sda1 ro recovery nomodeset 
}

答え1

initramfsなしで起動しようとしています。を使用してupdate-initramfs -c -k 3.11.1から1つを作成する必要がありますupdate-grub

答え2

私が見るには、kernel.orgや他の場所からLinuxカーネルソースコードをダウンロードし、ディストリビューション機能(パッケージングなど)を利用せずに直接コンパイルしたようです。

これを行うことは確かに可能ですが、簡単な方法よりもはるかに多くの作業が必要です。

残念ながら、ubuntu launchpad kernel-ppaはもはやメンテナンスされていないようです。それ以外の場合は、次の回答を参照してください。https://askubuntu.com/questions/47397/how-do-i-add-the-kernel-ppa

代わりにお勧めします。http://ubuntuhandbook.org/index.php/2013/09/kernel-3-11-1-released-install-upgrade-in-ubuntu-linux-mint/これには、Ubuntuプリコンパイルされたカーネル3.11.1パッケージをダウンロードしてインストールするための手順が含まれています。私はUbuntuではなくDebianを実行しているので直接テストしませんでしたが、ページではこれがUbuntu 12.04、12.10、13.10で動作すると主張し、指示が​​正しいようです。

ubuntu.comのkernel-ppaは非公式または反公式のリポジトリです。このドメインはCanonicalが所有していますが、非公式カーネルパッケージはサポートされていない可能性があります。自己コンパイルされたカーネルも同様です。

結論として:

ARCH=$(dpkg --print-architecture)
wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-headers-3.11.1-031101-generic_3.11.1-031101.201309141102_$ARCH.deb"

wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-headers-3.11.1-031101_3.11.1-031101.201309141102_all.deb"

wget "http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11.1-saucy/linux-image-3.11.1-031101-generic_3.11.1-031101.201309141102_$ARCH.deb"

sudo dpkg -iBE linux-headers-3.11.1*.deb linux-image-3.11.1*.deb

プリコンパイルされたパッケージをダウンロードするよりも独自のカーネルをコンパイルすることを好む場合は、3.11.1用のUbuntuソースパッケージを検索し、ソースコードを解凍し、ビルド依存関係をインストールし、必要なdpkg-sourceカーネル構成調整を実行します。使用することをお勧めします。または、同様のツールを使用して独自のパッケージを作成できますdpkg-builpackage

他のソフトウェアと同様に、パッケージにコンパイルされたカーネルは、パッケージ化されていないカーネルよりも問題と痛みがはるかに少なくなります。make && make installソースで実行したい場合でも、パッケージをインストールするよりもパッケージをインストールする方がほぼ常に優れています。コード作成の場合は、パッケージソースをコンパイルするのが最善です。

関連情報