赞
踩
用上国产电脑差不多一年了,飞腾D2000/8 E8C的CPU芯片,永中OFFICE组件,从办公的角度上说,总体感觉还是不错的。不过不知是不是定制桌面版的缘故,要顺畅使用还是踩了很多坑,网上有些通用攻略很多都不顶用。本文集中讲一下内网开启NFS共享遇到的一些问题,大部分操作可以直接参考《【银河麒麟V10】【桌面】搭建nfs实现磁盘共享》一文,写得很好。
上文以及其他网上能找到的内容顶多点到即止,本文重点写踩坑和避坑实务,按操作步骤的先后罗列如下。
一、服务器端配置
(一)未挂载的设备先挂载好(已挂载的不必做)
主要用到的命令如下,其他诸如写入fstab开机挂载等操作,都不再赘述。至于为什么挂接点在/media/user目录下,因为我的SATA硬盘被自动挂接在该目录,其实挂接到其他目录下也没有问题。
- lsblk
- mkdir /media/user/WORK
- mount /dev/sda6 /media/user/WORK
这里有个不大不小的坑,mkdir时注意不要用sudo或图方便在sudo su后做,否则建立的目录图标会带把小锁。一旦不小心锁了,就需要用如下命令解锁。
- sudo chmod 777 /media/user/WORK #解不了子目录的锁
- sudo chown -R user /media/user/WORK #可以一并解子目录的锁
(二)安装nfs相关组件,并开启nfs服务
主要用到的命令如下。
- sudo apt install nfs-kernel-server #注:会自动安装rpcbind
- systemctl enable rpcbind
- systemctl enable nfs-server.service
(三)修改nfs共享配置文件
主要用到的命令如下。其中pluma是麒麟系统自带的文本编辑器,也可以替换为vi命令。注意这里有第个比较大的坑,就是exports文件的内容格式必须“绝对”正确,否则可能报“clnt_create: RPC: Program not registered”这个极具误导性的错误,网上查到的资料大多说安装或服务启动异常,这样就进了死胡同。
- sudo pluma /etc/exports
- #追加如下内容
- /media/user/WORK/工作文档 10.62.39.101(rw,sync,no_subtree_check)
- 10.62.38.102(rw,sync,no_subtree_check)
- #查看exports配置信息
- exportfs
- #重启nfs服务并验证配置是否成功
- systemctl restart rpcbind
- systemctl restart nfs-server.service
- #验证服务端配置是否成功
- showmount -e localhost
NFS共享不像SAMBA共享那样能用密码控制访问权限,在不额外安装其他服务的情况下只能通过IP控制。本例中只允许10.62.39.101、10.62.38.102两台内网电脑访问共享文件夹,注意两者中间一定要用空格分隔开,否则就会报上面的“clnt_create: RPC: Program not registered”的诡异错误!
(四)打开防火墙端口
麒麟系统通过图形化界面设置防火墙,依次打开“安全中心”-“网络保护”-防火墙“自定义”(图1),在“自定义配置”窗口打开nfs3(tcp2049)、mountd(tcp/udp20048)、rpc-bind(tcp/udp111)端口(图2)。这里一般人可能会忘记打开mountd端口,但是这只是一个小坑,实际上后面隐藏着一个大坑!
图1
图2
配置好防火墙以后,服务器本地showmount正常,但是客户机会报“rpc mount export: RPC: Unable to receive; errno = No route to host”错误,且关闭服务器防火墙客户机就不报错了。此时在服务器防火墙新增并启用一条自定义端口的规则,重启服务器后大概率下就能恢复正常,此时再关闭那条自定义规则也没问题了,但是重启电脑以后仍然大概率会重复出现上述问题。
其实,问题的真正根源是mountd、nlockmgr使用了随机端口,必须强行指定mountd、nlockmgr 服务使用固定端口。使用如下命令查看端口情况。
rpcinfo -p
mountd、nlockmgr服务正常占用情况如图(图3)。
使用如下命令指定端口号,直接sudo可能会报错,所以先sudo su再操作。操作完毕再使用exit命令退出来。随后,按照前述方法在防火墙里开启42315端口(tcp和udp都开)。
- #更改mountd 服务端口为20048
- sudo su
- echo "mountd 20048/tcp" >> /etc/services
- echo "mountd 20048/udp" >> /etc/services
- #更改nlockmgr 服务端口为42315
- sudo su
- echo "fs.nfs.nlm_udpport=42315" >> /etc/sysctl.conf
- echo "fs.nfs.nlm_tcpport=42315" >> /etc/sysctl.conf
- sysctl -p
二、客户机端配置
(一)安装nfs相关组件,并检查服务器端nfs服务开启情况
用到的命令如下。这里有个小坑,不安装nfs相关服务,mount时会报协议有关错误。以下假定服务器IP地址是10.62.39.100。
- sudo apt install nfs-common
- showmount -e 10.62.39.100
偶尔showmount会报“rpc mount export: RPC: Unable to receive; errno = No route to host”错误,如果实在查不出问题,重启下服务器可能就好了。
(二)客户端创建目录并挂载nfs共享目录
用到的命令如下,实操中遇到的坑还是不小。
- mkdir /home/user/桌面/共享文档
- chmod -R 777 /home/user/桌面/共享文档
- sudo mount -t nfs 10.62.39.100:/media/user/WORK/工作文档 /home/user/桌面/共享文档
mount时如果报“mount.nfs: access denied by server while mounting……”错误,此时就加-vvvv参数查看详细信息
sudo mount -t nfs -vvvv 10.62.39.100:/media/user/WORK/工作文档 /home/user/桌面/共享文档
可以看到客户端默认挂载使用4.2版本nfs协议的提示,我apt安装的nfs server组件只支持nfs v3协议,协议不匹配导致挂载失败,此时客户端挂载需要指定-o nfsvers=3。
sudo mount -t nfs -o nfsvers=3 10.62.39.100:/media/user/WORK/工作文档 /home/user/桌面/共享文档
三、启动时自动挂载nfs目录
终于说到麒麟系统使用nfs共享的最大的一个坑了。网上查到的资料在说服务器和客户端配置时都把开机启动的事情一笔带过了,但是那些方法对使用“定制版”麒麟系统都是无效的。无论服务器还是客户机,每次启动后都需要额外执行如下命令。
- #服务器端
- systemctl start nfs-server.service
- #客户机端
- sudo mount -t nfs -o nfsvers=3 10.62.39.100:/media/user/WORK/工作文档 /home/user/桌面/共享文档
根据麒麟软件官方技术人员的分析,主要原因很可能是服务器端启动nfs服务、客户机端mount挂载的“时机”太早了,甚至早于电脑网络连接成功的时刻,因没有网络导致nfs服务加载失败,以及mount失败。实际情况印证了他的分析,解决的思路很简单,就是在开机启动时增加sleep 10的延时控制,即服务器端在rc.local文件中延迟10秒后再次启动nfs服务,客户机端在rc.local中延迟10秒再mount共享目录。
但是问题又来了,到/etc目录去查看,根本就没有rc.local文件,怎么办?使用如下命令手动建立rc.local文件。
- sudo vim /lib/systemd/system/rc-local.service
- #--添加如下内容:
- [Install]
- WantedBy=multi-user.target
- Alias=rc-local.service
-
- #--创建 rc.local 文件
- sudo vim /etc/rc.local
- #--配置文件填写内容如下:
- #!/bin/bash
- sleep 10
- # 服务器端在此添加“systemctl start nfs-server.service”命令(不含双引号)
- # 客户机端在此添加“sudo mount -t nfs -o nfsvers=3 10.62.39.100:/media/user/WORK/工作文档 /home/user/桌面/共享文档”命令(不含双引号,路径自己调整)
- exit 0
-
- #--添加可执行权限
- sudo chmod +x /etc/rc.local
-
- #--创建软链接
- sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
调整完毕后,重启系统 rc.local 就生效了。正常情况下,客户机文件管理其的“计算机”节点下会出现名为“共享文档(10.62.39.100:/media/user/WORK/工作文档)”的设备,桌面上打开“共享文档”文件夹,显示的就是nfs共享目录的内容。
终于把坑都填完了吧?未必!成功启用nfs共享后,注意不要随便去点系统状态栏右下角的小太阳图标切换“夜间模式”。否则,重启以后,你有一定概率惊奇地发现,自己又掉坑里了——rc.local文件里设置好的内容全没了!而且仅仅是rc.local内容没了,其他诸如修改rc-local.service内容,建立软链接等操作依然有效。这种事情过于玄幻,简直毫无道理,但是1天内接连在两台电脑上都发生了,不由得我不信,而且连麒麟软件官方技术客服也无法解释。更奇怪的是,事后再反复切换夜间模式,这种情况没有再现。不管怎样,配置好以后尽量别切换模式了,否则就自求多福吧。
本文纯原创手打,可以随意转发,但是请注明出处。谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。