主机 | lan口ip | wan口ip | 身份 |
---|---|---|---|
服务端设备 | 192.168.253.254 | 192.168.200.253 | 服务端 |
客户端设备 | 192.168.253.253 | 192.168.200.1 | 客户端 |
NFS的全称是Network File System(网络文件系统);其主要功能是通过网络让不同的设备间共享文件或者目录。NFS客户端一般是应用服务器,通过挂载可以将NFS服务器端共享的目录挂载到客户端本地的目录下使用,这样看起来就像客户端使用自己的目录进行挂载
RPC服务为远程调用服务,测试NFS需要使用RPC的主程序rpcbind
NFS服务端
注意:overlay挂载类型不支持NFS协议
exportfs -r 刷新并判断配置是否正常
问题1:exportfs requires fsid= for nfs export
解决方式:配置添加:fsid=1
问题2:客户端挂载后无权限操作
解决方式:配置no_root_squash
通过u盘进行挂载:
本次测试所使用的u盘为FAT32格式,内存大小为16G
未插上u盘时
root@server:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 5.3M 5.3M 0 100% /rom
tmpfs 60.7M 76.0K 60.6M 0% /tmp
/dev/mtdblock5 8.8M 880.0K 8.0M 10% /overlay
overlayfs:/overlay 8.8M 880.0K 8.0M 10% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda1 128.9M 32.0K 128.9M 0% /sysmount/sda1
插上u盘后
root@server:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 5.3M 5.3M 0 100% /rom
tmpfs 60.7M 76.0K 60.6M 0% /tmp
/dev/mtdblock5 8.8M 880.0K 8.0M 10% /overlay
overlayfs:/overlay 8.8M 880.0K 8.0M 10% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda1 128.9M 32.0K 128.9M 0% /sysmount/sda1
/dev/sdb1 14.4G 780.8M 13.6G 5% /sysmount/sdb1
在/sysmount/sdb1下创建共享目录nfsservice并给文件夹修改权限
root@server:/sysmount/sdb1# mkdir nfsservice
root@server:/sysmount/sdb1# chmod 777 /sysmount/sdb1/nfsservice
服务器端写主配置文件
root@server:/sysmount/sdb1# vi /etc/exports
root@server:/sysmount/sdb1# cat /etc/exports
/sysmount/sdb1/nfsservice *(rw,fsid=1,no_root_squash,insecure,sync,no_subtree_check)
exports -r命令进行加载配置文件
注意:需要先开启rpcbind服务再开启nfs服务
root@server:/sysmount/sdb1# /etc/init.d/rpcbind restart
root@server:/sysmount/sdb1# /etc/init.d/rpcd restart
root@server:/sysmount/sdb1# /etc/init.d/nfsd restart
在服务器端进行测试是否能够连接到共享目录
root@server:/sysmount/sdb1# showmount -e
Export list for server:
/sysmount/sdb1/nfsservice *
root@server:/sysmount/sdb1# showmount -e 192.168.253.254
Export list for 192.168.253.254:
/sysmount/sdb1/nfsservice *
测试网络连通(两个设备通过wan口互连)
root@server:/sysmount/sdb1# ping 192.168.200.1
PING 192.168.200.1 (192.168.200.1): 56 data bytes
64 bytes from 192.168.200.1: seq=0 ttl=64 time=0.750 ms
^C
--- 192.168.200.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.750/0.750/0.750 ms
成功挂载后,在/tmp/share目录下可以对文件进行读取与修改;mount -t nfs可以替换为mount.nfs
root@server:/# mount -t nfs 127.0.0.1:/sysmount/sdb1/nfsservice /tmp/share
root@server:/# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 5.3M 5.3M 0 100% /rom
tmpfs 60.7M 80.0K 60.6M 0% /tmp
/dev/mtdblock5 8.8M 884.0K 7.9M 10% /overlay
overlayfs:/overlay 8.8M 884.0K 7.9M 10% /
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda1 128.9M 32.0K 128.9M 0% /sysmount/sda1
/dev/sdb1 14.4G 780.9M 13.6G 5% /sysmount/sdb1
127.0.0.1:/sysmount/sdb1/nfsservice
14.4G 780.9M 13.6G 5% /tmp/share
NFS客户端
包支持:kmod-fs-nfs,nfsv3.ko、nfsv4.ko
即在服务器上开启NFS服务器,然后客户端使用mount -t nfs命令挂载即可。
测试网络连通(设备wan口互连)
root@client:~# ping 192.168.200.253
PING 192.168.200.253 (192.168.200.253): 56 data bytes
64 bytes from 192.168.200.253: seq=0 ttl=64 time=1.037 ms
64 bytes from 192.168.200.253: seq=1 ttl=64 time=1.685 ms
64 bytes from 192.168.200.253: seq=2 ttl=64 time=0.646 ms
64 bytes from 192.168.200.253: seq=3 ttl=64 time=0.640 ms
64 bytes from 192.168.200.253: seq=4 ttl=64 time=0.666 ms
^C
--- 192.168.200.253 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.640/0.934/1.685 ms
客户端创建目录
root@client:~# mkdir /mnt/share
进行挂载,得到如下报错
root@client:~# mount -t nfs 192.168.200.253:/sysmount/sda1/share /mnt/share
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
根据提示加上参数 -o nolock再次尝试挂载得到如下报错
root@client:/mnt/share# mount -t nfs -o nolock 192.168.200.253:/sysmount/sda1/share /mnt/share
mount.nfs: Connection refused
mount: mounting 192.168.200.253:/sysmount/sda1/share on /mnt/share failed: Connection refused
通过dmesg查看得到如下日志结果
[259671.777720] NFS: bad mount option value specified: minorversion=1
[259689.720991] NFS: bad mount option value specified: minorversion=1
通过查阅相关资料文档发现需要加上 -o nfsvers=3参数
root@client:~# mount -t nfs -o nfsvers=3,nolock 192.168.200.253:/sysmount/sda1/share /mnt/share
仍然得到两条拒绝连接的报错
mount.nfs: Connection refused
mount: mounting 192.168.200.253:/sysmount/sda1/share on /mnt/share failed: Connection refused
改变思路使用mount.nfs进行挂载依然提示mount.nfs: Connection refused
root@client:~# mount.nfs -o nfsvers=3,nolock 192.168.200.253:/sysmount/sda1/share /mnt/share
mount.nfs: Connection refused
使用mount.nfs4进行挂载也是提示mount.nfs: Connection refused
root@client:~# mount.nfs4 -o nfsvers=3,nolock 192.168.200.253:/sysmount/sda1/share /mnt/share
mount.nfs4: Connection refused
通过再次查阅相关资料发现可能是防火墙拦截导致连接失败
先把客户端防火墙关掉再试一遍
-
root@client:~# /etc/init.d/firewall stop Warning: Unable to locate ipset utility, disabling ipset support Warning: Section @zone[1] (wan) cannot resolve device of network 'wan6' Warning: Section @rule[12] (test1) does not specify a protocol, assuming TCP+UDP Warning: Section @rule[13] (test2) does not specify a protocol, assuming TCP+UDP * Flushing IPv4 filter table * Flushing IPv4 nat table * Flushing IPv4 mangle table * Flushing IPv6 filter table * Flushing IPv6 mangle table * Flushing conntrack table ... root@client:~# mount.nfs -o nfsvers=3,nolock 192.168.200.253:/sysmount/sda1/share /mnt/share mount.nfs: Connection refused
将客户端与服务端的防火墙均关闭,挂载成功,在客户端新建bbb.txt
root@client:~# mount.nfs -o nfsvers=3,nolock 192.168.200.253:/sysmount/sda1/share /mnt/share
root@client:~# cd /mnt/
root@client:/mnt# ls
share
root@client:/mnt# cd share/
root@client:/mnt/share# ls
aaa.txt
root@client:/mnt/share# vi bbb.txt
root@client:/mnt/share# root@UST-OS:/mnt/share# ls
aaa.txt bbb.txt
去服务端的/sysmount/sda1/share目录下查看,发现可以同步更新,且两端均可对文件进行读写
root@server:~# cd /sysmount/sda1/share/
root@server:/sysmount/sda1/share# ls
aaa.txt bbb.txt
root@server:/sysmount/sda1/share# cat bbb.txt
hello
在客户端可以看见挂载信息
root@client:/mnt/share# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 8.8M 8.8M 0 100% /rom
tmpfs 60.7M 124.0K 60.6M 0% /tmp
/dev/mtdblock5 5.4M 1.1M 4.3M 21% /overlay
overlayfs:/overlay 5.4M 1.1M 4.3M 21% /
tmpfs 512.0K 0 512.0K 0% /dev
192.168.200.253:/sysmount/sda1/share
7.3G 112.7M 7.2G 2% /mnt/share
粗略测试nfs写和读,数据不一定特别准确
root@server:/mnt/share# time dd if=/dev/zero of=/mnt/share/testfile bs=8k count=10k
10240+0 records in
10240+0 records out
real 0m 30.19s
user 0m 0.02s
sys 0m 1.39s
传输总大小为80MB,传输时间为30.19s ,得出写的传输速率为80/30.19=2.65MB/S
nfs读
root@server:/mnt/share# time dd if=/mnt/share/testfile of=/dev/null bs=8k
10240+0 records in
10240+0 records out
real 0m 8.60s
user 0m 0.07s
sys 0m 1.19s
读的速率为80/8.6=9.3MB/s
本次测试是采用关闭防火墙的形式完成的,也可以通过开启防火墙通过修改放行服务相对应的端口而进行测试
注意事项
如果客户端正在挂载中,服务端突然出现事故,nfs服务宕机了,客户端挂载目录会出现卡死现象,可使用命令umount -lf强制解除挂载