Linux从休眠唤醒后访问已挂载Windows共享目录存在长时间延迟
Linux从休眠唤醒后访问已挂载Windows共享目录存在长时间延迟
遇到这种唤醒后要等好几分钟才能访问共享的情况,确实挺影响效率的,我之前帮同事处理过类似的问题,给你几个实测有效的方案试试:
调整SMB挂载的客户端参数
大概率是Linux的SMB客户端在唤醒后重新建立连接时,默认的超时和重试设置太保守导致的。你可以修改共享的挂载配置,缩短等待时间。
编辑/etc/fstab里对应共享的挂载行,添加这些参数:timeo=150, retrans=2, hard, intr, vers=3.0简单解释下这些参数:
timeo=150:把超时时间设为15秒(单位是0.1秒),比默认值短很多,客户端会更快发起重试retrans=2:减少重试次数,避免一直耗在无效等待上hard+intr:如果连接卡住,允许中断正在等待的进程,不会让终端或程序一直僵死vers=3.0:指定用SMB 3.0协议,和新版Windows Server兼容性更好,能减少协议握手的延迟
修改完后执行sudo mount -a重新挂载,下次唤醒后可以试试效果。
设置系统唤醒时自动刷新SMB连接
可以给Linux加个自动触发的脚本,每次从休眠/睡眠唤醒时,自动重新挂载共享,跳过那些慢吞吞的自动重连过程。- 创建一个systemd服务文件:
sudo nano /etc/systemd/system/smb-refresh.service - 把下面的内容粘贴进去,记得把
/path/to/your/mountpoint换成你实际的共享挂载路径:[Unit] Description=Refresh SMB mounts on system wakeup After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target [Service] Type=oneshot ExecStart=/bin/sh -c "mount -o remount /path/to/your/mountpoint" # 如果remount方式不行,就换成卸载再挂载的命令: # ExecStart=/bin/sh -c "umount /path/to/your/mountpoint && mount /path/to/your/mountpoint" [Install] WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target - 启用这个服务,让它生效:
sudo systemctl enable --now smb-refresh.service
这样以后每次系统唤醒,都会自动帮你刷新共享连接,不用手动等半天。
- 创建一个systemd服务文件:
让Windows管理员调整TCP保活设置
虽然已经改了共享的超时,但Windows服务器的TCP层可能还有默认的保活设置,导致连接恢复变慢。可以让管理员试试调整注册表:- 打开注册表编辑器(
regedit),导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - 修改或创建以下3个DWORD值:
KeepAliveTime:设置为60000(也就是1分钟,单位毫秒),让TCP更快检测死连接KeepAliveInterval:设置为1000(1秒),每次重试间隔1秒TcpMaxDataRetransmissions:设置为3,减少重试次数
改完后重启Windows服务器,这样Linux客户端唤醒后,TCP连接能更快重新建立起来。
- 打开注册表编辑器(
另外,你也可以看看Linux的系统日志,比如执行journalctl -xe | grep smb或者dmesg | grep cifs,看看唤醒后有没有具体的错误或超时信息,能帮你更精准地定位问题。
备注:内容来源于stack exchange,提问作者SuperAl
相关产品推荐
相关产品推荐

