我有两个系统运行在 Ubuntu 22.04 上。我想使用 NFS 将服务器(PC1 - auerbach)的一个磁盘挂载到客户端(PC2 - hubel)上。
PC1 上的文件/etc/exports
如下所示:
/media/auerbach-data 139.124.148.0/25(rw,no_subtree_check,sync,fsid=001)
我sudo exportfs -av
在 PC1 上运行成功。PC2/etc/fstab
上的文件如下所示:
auerbach:/media/auerbach-data /mnt/auerbach-data nfs defaults,auto,rw 0 0
但是,当我sudo mount /mnt/auerbach-data -v
在 PC2 上运行时,出现错误消息:
mount.nfs: timeout set for Thu Nov 28 10:44:02 2024
mount.nfs: trying text-based options 'vers=4.2,addr=139.124.148.27,clientaddr=139.124.148.5'
mount.nfs: mount(2): Connection timed out
mount.nfs: Connection timed out
真正奇怪的是,当我在showmount -e
PC1 上运行时,我得到:
Export list for PC1:
/media/auerbach-data 139.124.148.0/25
因此,导出本身似乎有效。然后,当我运行 showmount 时,我得到:
Hosts on PC1:
PC2’s ip
这似乎表明 PC1 看到了 PC2。此外,当我showmount -e auerbach
在 PC2 上运行时,我得到:
Export list for auerbach:
/media/auerbach-data 139.124.148.0/25
经过一番研究来解决这个问题,我使用tcpdump -i eno145 host auerbach
并发现,在mount
PC2 上运行命令时,PC1 没有通过网络收到任何信息。当我ping
使用 PC1 或时,情况并非如此showmount
。下面列出了一些日志:
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eno145, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:52:29.203855 IP hubel.836 > auerbach.nfs: Flags [S], seq 3035191773, win 64240, options [mss 1460,sackOK,TS val 3
448551700 ecr 0,nop,wscale 7], length 0
10:52:30.244579 IP hubel.836 > auerbach.nfs: Flags [S], seq 3035191773, win 64240, options [mss 1460,sackOK,TS val 3
448552741 ecr 0,nop,wscale 7], length 0
有人知道我该如何解决这个问题吗?提前谢谢您!
附加信息:
未打开防火墙auerbach
并且端口 2049 已打开(已使用 检查telnet
)。
当我使用时sudo mount -t nfs auerbach:/media/auerbach-data /mnt/auerbach-data -v
,我得到:
mount.nfs: timeout set for Thu Nov 28 16:53:57 2024
mount.nfs: trying text-based options 'vers=4.2,addr=139.124.148.27,clientaddr=139.124.148.79'
我解决了这个问题。经过一番挖掘,我找到了这篇文章:https ://www.suse.com/fr-fr/support/kb/doc/ ?id=000019722。根本原因似乎是智能交换机检测并阻止 TCP 连接重用。由于 NFS 依赖于连接重用,因此这会阻止任何挂载尝试。移除交换机解决了所有问题。
有人知道如何配置交换机以使其不过滤连接重用吗?