Linux
核心恐慌 - 不同步:VFS:新核心編譯後無法掛載根 fs
所以我已經有一段時間了,幾天來一直在尋找答案,並認為是時候尋求幫助了。我在 VMWare Fusion 中執行 Ubuntu 10.10,並下載了 3.2 核心的副本並使用所有預設設置建構它。當我在呼叫 make install 後嘗試啟動新核心時,我收到以下消息:
[ 1.581916] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 1.582260] Pid: 1, comm: swapper/0 Not tainted 3.2.4 #1 [ 1.582444] Call Trace: [ 1.582552] [<ffffffff815e7447>] panic+0x91/0x1a7 [ 1.582666] [<ffffffff815e75c5>] ? printk+0x68/0x6b [ 1.582799] [<ffffffff81ad2152>] mount_block_root+0x1ea/0x29e [ 1.582929] [<ffffffff81ad225c>] mount_root+0x56/0x5a [ 1.583047] [<ffffffff81ad23d0>] prepare_namespace+0x170/0x1a9 [ 1.583178] [<ffffffff81ad16f7>] kernel_init+0x144/0x153 [ 1.583304] [<ffffffff815f45f4>] kernel_thread_helper+0x4/0x10 [ 1.583436] [<ffffffff81ad15b3>] ? parse_early_options+0x20/0x20 [ 1.583570] [<ffffffff815f45f0>] ? gs_change+0x13/0x13
它曾經出現在每次重新啟動時。我發現如果我更改了 VM 的硬碟驅動器類型,我至少可以啟動 GRUB,但是如果我嘗試載入新編譯的核心,就會出現上面的消息。舊核心和以前一樣工作。我已經檢查並編譯支持 ext4,這是我的 root 正在執行的 fs。我還嘗試通過呼叫“sudo update-initramfs -c -k 3.2.4”來生成一個 initrd 文件,但無濟於事。
我認為編譯非常標準:
make menuconfig make make modules_install make install update-grub reboot
是一般的步驟。在選項方面,我基本上都預設了。如果它是相關的,我的 fstab 看起來像這樣:
proc /proc proc nodev,noexec,nosuid 0 0 #UUID=c75eddd9-f4fa-49be-927b-8c2da7074135 / ext4 errors=remount-ro 0 1 /dev/sda1 / ext4 defaults 0 1 #UUID=5bc6915e-fdfa-479a-885f-ea03cb14f9cd none swap sw 0 0 /dev/sda5 none swap sw 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
我用 UUID 和 /dev/sd* 表示法都試過了。任何幫助或建議將不勝感激,因為它變得非常令人沮喪。
謝謝你。
您忘記建構與核心一起使用的 initrd。執行
update-initramfs -c -k kernelversion
然後update-grub
找到它並將其添加到 grub 菜單中。
您是否內置了掛載根分區所需的所有驅動程序?我的意思是,I/O 控制器驅動程序、文件系統驅動程序等等?
該錯誤意味著什麼,核心無法掛載根文件系統。
我不記得究竟應該
unknown block
是什麼,但我想這意味著它缺少 I/O 控制器驅動程序。請注意,驅動程序必須內置到核心中,模組將無法工作(因為您需要掛載文件系統才能訪問模組)。