Ubuntu 12.04(カーネル3.2.0-53)がインストールされているシステムで、3.11.1カーネルイメージから起動しようとしています。
その後、コンパイルしてmake defconfig
イメージを挿入し、/boot
GRUBを更新して再起動します。
再起動すると、次のメッセージが表示されます。
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
ソースで実行したい場合でも、パッケージをインストールするよりもパッケージをインストールする方がほぼ常に優れています。コード作成の場合は、パッケージソースをコンパイルするのが最善です。