無法進行 PXE 引導,“沒有文件系統可以掛載根”錯誤
我正在嘗試使用我創建的映像進行 PXE 引導,但在載入映像和核心後,我收到以下錯誤消息:
主要的錯誤資訊是這樣的:
No filesystem could mount root, tried: ext3 ext2 iso9668 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0 Pid: 1, comm: swapper not tainted 2.6.34.1 #4
我已經嘗試在網上查找有關此的建議,但我發現要麼硬體不兼容,要麼使用另一個核心。我相信硬體是兼容的,因為我能夠毫無問題地從 SD 卡啟動相同的核心(不幸的是,我沒有創建的自定義核心)和作業系統(Scientific Linux 5),所以我認為這個網路引導也應該適用於相同的核心和系統。
/sys
為了使我的 SL5 映像用於網路啟動,我已經從 SD 卡中完全複製了所有文件(和中的文件除外/proc
),但我仍然收到此錯誤消息。我也只嘗試複製必要的目錄,如/bin
,/dev
,/etc
,/lib
等。即使只有這些目錄,圖像也是 2.6GB 左右,我仍然收到此錯誤消息。現在我覺得我有兩個選擇要解決:要麼圖像太大而無法安裝
ram0
(有大小限制嗎?),在這種情況下我應該修剪目錄的內容;或者係統根本無法辨識ram0
,並且 initrd 程序存在問題。以下是我的
pxelinux.cfg/default
文件的相關內容:LABEL SL5 MENU LABEL SL5 KERNEL images/vmlinuz-2.6.34.1-32-v7805 APPEND initrd=images/SL5rootfs.gz root=/dev/ram0 ramdisk_size=3100000 rw ip=dhcp fastboot mem=3g
原來圖像實際上太大了。我有一個 3 GB 的圖像,只有 500 MB 的 RAM。將圖像大小調整為 400 MB 後,我能夠通過此錯誤螢幕,並最終啟動我的圖像。
如果您
SL5rootfs.gz
基於 SL ISO 中的 initrd 建構,那麼它的init
腳本仍然包含用於從 CD/ISO 安裝根目錄的程式碼,這就是它失敗的原因。您必須進入從 /init 開始的引導腳本鏈,並現在根據網路檢索到的根分區(即 squshd fs 文件)修復根掛載。你可以通過 CIFS、HTTP、NFS 等來做到這一點。如果你想看到很多這方面的例子,你可以看看Serva為 PXE 引導許多 Linux 發行版所做的事情。(我與Serva開發有關)您必須考慮的額外一點是是否
SL5rootfs.gz
真的有淨支持。如果沒有它,您可以很好地從 PXE 啟動它,但這是您唯一可以做的事情,因為您將無法通過網路檢索其他任何內容。