web-dev-qa-db-ja.com

NFSルートファイルシステムが起動時にマウントされない

これは、カスタムカーネルを備えた組み込みデバイスです(関連する構成については以下を参照してください)。これは、coreboot-> uboot-> linuxのように起動するx86-32マシンです。 rootfsにオンボードストレージを使用している場合、NFS共有をLinuxにマウントできます。 Linuxはip=dhcpを使用して起動時にネットワークを正しく自動構成していると確信しています(注:これはネットワークのDHCPサーバーを使用しています。IPアドレスを配布するだけで、BOOTPなどとは関係ありません) 。また、ip=を使用してパラメーターを明示的に設定しようとしましたが、結果はip=dhcpと同じです。

Ubootで実行されるものは次のとおりです。

set ethaddr 02:00:00:10:00:43; set serverip 204.54.80.195; set ipaddr 204.54.80.37
set bootargs rootwait raid=noautodetect rw console=ttyS0,115200 root=/dev/nfs nfsroot=$serverip:/yukon ip=dhcp
ext4load mmc 0 ${kernel_addr} ${kernel_path} ; ext4load mmc 0 ${initrd_addr} ${initrd_path} ; zboot ${kernel_addr} 0 ${initrd_addr}

これがLinuxで登場するネットワークです。

Sending DHCP requests ., OK
IP-Config: Got DHCP answer from 204.54.80.10, my address is 204.54.80.37
IP-Config: Complete:
     device=eth0, hwaddr=02:00:00:10:00:43, ipaddr=204.54.80.37, mask=255.255.255.0, gw=204.54.80.1
     Host=204.54.80.37, domain=jdnet.deere.com, nis-domain=(none)
     bootserver=0.0.0.0, rootserver=204.54.80.195, rootpath=
     nameserver0=204.54.84.14, nameserver1=164.121.15.220

Linuxは、rootfsをマウントできないとパニックになります。

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6

関連するカーネル構成:

root@localhost:~# zgrep -E NFS\|IP_PNP /proc/config.gz
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
CONFIG_NFS_FS=y
CONFIG_NFS_V2=y
CONFIG_NFS_DEF_FILE_IO_SIZE=4096
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_SWAP is not set
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFSD is not set
CONFIG_NFS_COMMON=y

NFSはLinuxにマウントできます

mount.nfs 204.54.80.195:/yukon /mnt

私はおそらく明らかな何かを見逃しているでしょう。アイデアやよくある間違いを探しています。


アップデート:

  • Nfsrootdebugカーネルパラメータは効果がありません。
  • Initrdはありますが、使用されていません。オンボードストレージで起動する場合は、絶対に必要ありません。必要なすべてのドライバーは、モジュールとしてではなく、カーネルにコンパイルされます。

余談ですが、ubootでイーサネットを使用すると、Linuxでは使用できなくなると判断しました。これは私が解決すべきもう1つのバグですが、ubootでネットワークを使用することは避けられるので、問題にはなりません。

3
jpkotta

私は本当に近かった。/etc/exportsでno_root_squashを有効にする必要がありました。

/srv/nfs       204.54.0.0/16(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)
/srv/nfs/yukon 204.54.0.0/16(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

そして、両方のmount.nfs $serverip:/yukon /mntおよびmount.nfs $serverip:/srv/nfs/yukon /mnt機能しました。Linuxコマンドラインのフルパスが必要でした。

console=ttyS0,115200 rootwait rw nfsroot=$serverip:/srv/nfs/yukon ip=dhcp root=/dev/nfs
2
jpkotta

サーバーで/etc/exports、/etc/hosts.deny、/etc/hosts.allowをチェックして、dhcpで割り当てられたアドレス(204.54.80.37)が許可されているかどうかを確認することをお勧めします。

0
il--ya