当我在RHEL7中重新挂载nfs时,发现一个奇怪的问题。
我在 nfs-server 上共享了 2 个目录:
# showmount -e
Export list for localhost.localdomain:
/file2 192.168.122.1
/file1 192.168.122.1
然后我将它们安装在我的客户端上:
# sudo mount 192.168.122.100:/file2 /media
# sudo mount 192.168.122.100:/file1 /mnt/file1
# mount
192.168.122.100:/file1 on /mnt/file1 type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100)
192.168.122.100:/file2 on /media type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100)
然后我尝试将其中之一重新安装到 ro:
# sudo mount -o ro,remount /mnt/file1/
这时奇怪的事情发生了,两人都变成了ro:
192.168.122.100:/file1 on /mnt/file1 type nfs4 (ro,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100)
192.168.122.100:/file2 on /media type nfs4 (ro,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100)
我捕获了一些数据包,但我发现重新挂载时没有发送任何数据包。
我现在不知道,有人可以帮助我吗?
谢谢。
答案1
我找到了。
这是因为NFS默认使用sharecache。参见man nfs
:
sharecache / nosharecache
Determines how the client's data cache and attribute cache are shared when mounting the same export more than once concurrently. Using the same
cache reduces memory requirements on the client and presents identical file contents to applications when the same remote file is accessed via dif‐
ferent mount points.
If neither option is specified, or if the sharecache option is specified, then a single cache is used for all mount points that access the same
export. If the nosharecache option is specified, then that mount point gets a unique cache. Note that when data and attribute caches are shared,
the mount options from the first mount point take effect for subsequent concurrent mounts of the same export.
As of kernel 2.6.18, the behavior specified by nosharecache is legacy caching behavior. This is considered a data risk since multiple cached copies
of the same file on the same client can become out of sync following a local update of one of the copies.
手册页说a single cache is used for all mount points that access the same export
。
然后我使用nosharecache
选项,现在就正常了。
192.168.122.100:/file1 on /mnt/file1 type nfs4 (ro,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,nosharecache,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100)
192.168.122.100:/file2 on /mnt/file2 type nfs4 (rw,relatime,vers=4.0,rsize=131072,wsize=131072,namlen=255,hard,nosharecache,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.122.1,local_lock=none,addr=192.168.122.100