NFS 루트 파일 시스템이 시작 시 마운트되지 않음

NFS 루트 파일 시스템이 시작 시 마운트되지 않음

이는 사용자 정의 커널이 포함된 임베디드 장치입니다(아래 구성 참조). 이것은 x86-32 시스템이며 다음과 같이 부팅됩니다: coreboot->uboot->linux. 온보드 스토리지를 rootfs로 사용하는 경우 Linux에서 NFS 공유를 마운트할 수 있습니다. 나는 리눅스가 부팅 시 네트워크를 올바르게 자동 구성한다고 확신합니다. 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에서 사용할 수 없게 된다는 것을 확인했습니다. 이는 수정해야 할 또 다른 버그이지만 uboot에서 네트워크 사용을 피할 수 있으므로 문제가 되지 않습니다.

답변1

나는 정말 가깝습니다. /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 /mntLinux cmdline에 대한 전체 경로가 필요합니다.

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

답변2

dhcp 할당 주소(204.54.80.37)가 허용되는지 확인하려면 서버에서 /etc/exports, /etc/hosts.deny, /etc/hosts.allow를 확인하는 것이 좋습니다.

관련 정보