我正在开发一块嵌入式主板,上面运行着嵌入式 Linux。我想将 Linux 主机(Ubuntu 20.04)上的目录挂载到我的嵌入式主板上。
根据与董事会共享的文档,我运行以下命令进行挂载。
# busybox mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.60.68:/home/paras/nfs_mount/ /nfsroot/
其中,192.168.60.68 是我的 Linux 主机(Ubuntu 20.04)的 IP。
当我在嵌入式主板,抛出错误。
# busybox mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.60.68:/home/paras/nfs_mount/ /nfsroot/
mount: mounting 192.168.60.68:/home/paras/nfs_mount/ on /nfsroot/ failed: Permission denied
在我的 Linux 系统(Ubuntu 20.04)上,防火墙未处于活动状态并且 nfs 服务器正在运行。
paras@paras-desktop:~/$ systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2022-11-14 13:50:40 IST; 1min 38s ago
Process: 14244 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Process: 14245 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Main PID: 14245 (code=exited, status=0/SUCCESS)
Nov 14 13:50:39 paras-desktop systemd[1]: Starting NFS server and services...
Nov 14 13:50:40 paras-desktop systemd[1]: Finished NFS server and services.
paras@paras-desktop:~/$ sudo ufw status
Status: inactive
paras@paras-desktop:~/$ ifconfig
wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.60.68 netmask 255.255.252.0 broadcast 192.168.63.255
inet6 fe80::155e:fa5a:a0b:cb37 prefixlen 64 scopeid 0x20<link>
ether 80:2b:f9:e7:0a:31 txqueuelen 1000 (Ethernet)
RX packets 481975 bytes 483409798 (483.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 284309 bytes 91521351 (91.5 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答案1
您只能使用专门的 NFS 挂载路径出口(类似于在Windows上创建“共享”),这是通过/etc/exports
文件完成的。
例如,/home/paras/nfs
要从 LAN 为客户端导出,请使用:
/home/paras/nfs 192.168.60.0/24(sec=sys,rw,no_subtree_check)
或者:
/home/paras/nfs -rw,no_subtree_check 192.168.60.0/24(sec=sys) 192.168.70.0/24(sec=sys)
完成编辑后,运行exportfs -rv
以应用更改。
请注意 NFS 具有不默认情况下进行客户端身份验证 - 它只检查 IP 地址,因此*
除非必须,否则请避免导出文件系统。(NFS 通过 sec=krb5 支持 Kerberos,但我怀疑它是否适用于嵌入式 Linux。)
出于相关原因,NFS 服务器不允许客户端拥有 root 权限 – 每当 NFS 客户端声称访问由 root (UID 0) 执行时,它实际上获得的是该nobody
用户的权限。(可以使用“no_root_squash”禁用此功能,但最好只向“nobody”用户授予必要的最低访问权限。)
如果嵌入式客户端使用的 UID 在你的服务器系统上没有实际意义,你可能需要重新映射全部all_squash
使用和导出选项访问特定的 UID anonuid=
。
答案2
我遇到了同样的问题。根本原因是共享机器上缺少权限。
chmod 777 .
在这一点上解决了我的问题。