本文通过使用NFS Server工具在WIN11上搭建NMS Server,打通Linux开发环境到嵌入式板子之间的通路,优化Linux服务器与嵌入式板子之间的多次SCP拷贝操作。

Windows下的NFS Server工具来自于Networking Software for Windows (hanewin.net)

目的

在做嵌入式Linux开发时,需要在通过VPN+SSH远程连接到Linux服务器,在服务器上编写代码。再通过WAN口网络连接到板子上,板子与Linux服务器不在同一网段。

正常情况下编写好的程序先要通过SCP拷贝到当前电脑上,然后再通过SCP从当前电脑拷贝到板子上。

准备材料

Networking Software for Windows (hanewin.net)

该软件实现了一个适用于所有Windows平台的多线程NFS服务器。

支持功能

  1. NFS 3、NFS 2、WebNFS和NLM协议。
  2. UDP和TCP连接。
  3. Unix软链接(符号链接)。
  4. NTFS卷上的Unix硬链接。
  5. 如果支持符号链接,可以使用Windows重解析点。
  6. 块设备和字符设备的i节点。
  7. 作为Windows服务和Windows应用程序实现。
  8. 在Windows 7及更高版本中,使用NTFS文件ID作为i节点。

安装程序包含32位软件和64位版本。

NFS Server服务器版作为后台服务在Windows XP/VISTA/20xx/7/8/10/11上运行。SunPRC PortMap作为服务的守护程序。

NFS Server应用程序版是一个便携式的Windows应用程序,内置SunRPC Portmapper。

可以使用NFS 3与NFS 2在基于TCP或UDP基础上与NFS Server建立连接。

支持多线程,UDP连接时可以配置线程数量,使用TCP时每个线程都会建立一条连接。

安装配置

安装流程简单,不多赘述,配置流程如下:

配置说明

  1. 盘符应该使用大写字母,因为默认情况下(选项设置),它们被映射为小写字母给客户端。
  2. 选项-range限制访问到指定的地址范围,IP地址成对地解释为from-to范围。
  3. 选项-readonly禁止创建/写入/删除。
  4. 选项-lowercase将所有文件名映射为小写。
  5. 选项-name:<x>使<x>为客户端挂载的替代名称。
  6. 选项-mapall:<uid>[:<gid>]: 所有Unix用户ID和组ID都映射到指定的用户ID和组ID。
  7. 选项-alldirs允许客户端挂载文件夹或任何子文件夹。
  8. 选项-public:仅对此条目和子目录启用WebNFS访问。
  9. 使用UNC路径指定访问远程驱动器。
  10. 没有盘符的隐藏卷可以通过卷GUID进行挂载

-name参数示例

挂载命令:

sudo mount -t nfs  192.168.72.1:/e/FTP ./nfstemp/ # 正常挂载命令
sudo mount -t nfs  192.168.72.1:/nfstemp ./nfstemp/ # 启用

-range参数错误示例

挂载示例:

$ sudo mount -t nfs  192.168.72.1:/nfstemp ./nfstemp/
mount.nfs: access denied by server while mounting 192.168.72.1:/nfstemp
$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.72.128  netmask 255.255.255.0  broadcast 192.168.72.255
        inet6 fe80::20c:29ff:fe0b:4f93  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:0b:4f:93  txqueuelen 1000  (Ethernet)
        RX packets 369525  bytes 460287157 (460.2 MB)
        RX errors 0  dropped 2  overruns 0  frame 0
        TX packets 61918  bytes 22758984 (22.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
$

由于Linux环境IP不在配置范围内,因此提示挂载失败,没有访问权限。

-alldirs示例

挂载示例

# 从根目录挂载并查看内容
$ sudo mount -t nfs  192.168.72.1:/nfstemp ./nfstemp/
$ ls nfstemp/nfs-subdir/
a
# 从子目录开始挂载并查看内容
$ sudo mount -t nfs 192.168.72.1:/nfstemp/nfs-subdir nfs-subdir/
$ ls nfs-subdir/
a

参考文档

https://www.hanewin.net/doc/nfs/nfsd.htm