Linux-Kernel

使用 NFS 支持建構核心,但未獲取 /dev/nfs

  • November 17, 2015

我正在嘗試建構核心 3.13.9,使用 獲取apt-get source,並在乾淨的debootstrapchroot 中建構(主機和 chroot 都是 Ubuntu Trusty 的安裝)。我的目標是通過 NFS 將無盤機器引導到控制台。

我執行make menuconfig並啟用了 64 位核心,禁用了調試,並確保我正在執行 64 位建構。另外,我去文件系統->網路文件系統,並啟用以下:

  • 網路文件系統
  • NFS 客戶端支持

主機已nfs-kernel-server安裝,並為我想用作網路引導系統的根目錄的目錄設置了導出。

PXE 啟動正常,核心和 initrd 已載入,但經過長時間的停頓後,由於缺少根文件系統,我被轉儲到了一個 busybox 提示符。

可能是什麼原因?(或者,是否需要更多資訊?)

**編輯:**我已經通過了nfsroot

LABEL linux
KERNEL vmlinuz-3.13.9
APPEND root=/dev/nfs initrd=initrd.img-3.13.9 nfsroot=192.168.1.39:/nfsroot,rw ip=dhcp rw

正如核心文件所述,/dev/nfs它不是真正的設備,而只是提示核心將 NFS 用作rootfs. 您還必須通過 nfsroot參數或正確設置的 DHCP 守護程序告訴核心在哪裡可以找到此根。要使後一個工作正常,您還必須配置核心以自動配置其網路介面,或者擁有一個initramfs負責處理此問題的核心。

此外,請確保將 NFS 支持內置到您的核心二進製文件中,而不是作為一個模組(或有一個initramfs,它負責這個)。網路驅動程序也是如此:您很可能希望將乙太網 NIC 的驅動程序內置到核心映像中,否則您必須從initramfs.

簡而言之,有幾種可能:

  1. 按照上面的連結告訴您:已root=/dev/nfs設置,提供正確的nfsroot參數並通過參數告訴您的核心您的網路配置ip(這將是確保它完全正常工作的最佳方法,即排除配置錯誤的 DHCP 伺服器)。
  2. 擁有CONFIG_IP_PNPCONFIG_IP_PNP_DHCP啟用和設置一個 DHCP 守護程序,以告訴您的客戶端使用哪個 IP 地址以及在哪裡可以找到它的 NFS-root。
  3. 建構一個initramfs執行正確配置和 NFS 安裝的程序。

**編輯:**我認為,如果您按照編輯建議使用initrd/ initramfs,則必須在其中進行 NFS 掛載initrd(相應地,您initrd必須意識到它必須這樣做的事實)。通過核心自動掛載(作為 IP 自動配置,IIRC)僅在沒有initrd.

引用自:https://unix.stackexchange.com/questions/140176