让Windows成为更好用的Linux发行版之WSL2折腾NFS

背景

生命不息,折腾不止。
前段时间,为了让WSL更好地来开发Linux和OH,折腾出了一系列文章:

上次把WSL2的网络弄好了,最近就准备将开发环境更进一步,开始折腾NFS。
以为和Ubuntu主机上搭建NFS一样(嵌入式Linux基础开发环境搭建),简单的一条命令加配置就搞定了,但后面发现根本不是那么一回事。而且网上也很少有完整实用的借鉴参考,只能自己摸索,实战出真知。

启用systemd

WSL2默认是没有启用systemd,但很多程序是依赖它的,特别是需要开机启动的。
在发行版中添加配置文件/etc/wsl.conf,并加入如下内容:

[boot]
systemd=true

安装配置NFS

sudo apt install nfs-common nfs-kernel-server rpcbind

新建一个目录(如这里的/home/xxx/nfs),作为NFS的目录,修改/etc/export,在最后添加如下一行:

/home/xxx/nfs *(rw,sync,no_root_squash,no_subtree_check)

全部重新export一下

sudo exportfs -rv  

查看 Export list,看有没有成功:

sudo showmount -e

启动或重启相关服务:

sudo service rpcbind start
sudo /etc/init.d/nfs-kernel-server restart

遇到的问题

问题1

服务启动正常,但局域网的其他Linux电脑和板子都没法 mount
原因: Windows防火墙未配置。现在WSL2的网络和Windows的网络是镜像的,进出都需要走Windows防火墙,所以需要添加NFS相关端口的入站规则
解决: 防火墙和网络保护-》高级设置-》入站规则-》新建规则 (TCP 端口443,2049)

问题2

服务启动正常,局域网的其他Linux电脑可以使用如下命令 mount

sudo mount -t nfs 192.168.1.102:/home/xxx/nfs /mnt/

但板子不行,报错:

failed: Connection timed out

原因: NFS的版本不匹配,板子上默认的是3,服务器和电脑上默认的是4
解决: mount的时候指定对应的版本即可。如下:

mount -t nfs -o nolock,nfsvers=4 192.168.1.102:/home/xxx/nfs /userdata/nfs

参考