本文装载自https://zhuanlan.zhihu.com/p/141714106

对于 Linux 服务器来说,挂载远程目录就是这个「移动硬盘」。

方案一:SSHFS

SSH 和 SCP 大家都用过,SSHFS 也和他们是一个「部门」的,他可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录进行交互。

使用方法很简单:

# 客户端安装 SSHFS
 sudo apt install sshfs 
 ​
 # 创建挂载目录
 mkdir -p ~/sshfs/103 
 ​
 # 用 SSHFS 挂载远程的文件系统
 sshfs tianws@103:/home/tianws ~/sshfs/103 
 ​
 # 验证远程文件系统挂载成功
 ls ~/sshfs/103
 df -hT
 ​
 # 永久挂载远程文件系统
 sudo vim /etc/fstab
 # 添加至最后一行,确保服务器之间允许 ssh 无密码登录
 sshfs#tianws@103:/home/tianws ~/sshfs/103 fuse.sshfs defaults 0 0 
 # 如果服务器配置为基于 ssh 秘钥的认证方式,加入下行
 sshfs#tianws@103:/home/tianws ~/sshfs/103 fuse.sshfs IdentityFile=~/.ssh/id_rsa defaults 0 0
 # 更新 fstab 文件使修改生效
 sudo mount -a
 ​
 # 卸载远程的文件系统
 umount ~/sshfs/103
 ## 如果提示没有权限,用 fusermount
 fusermount -u ~/sshfs/103

亲自实验有效!

方案二:NFS

NFS(network file system)网络文件系统工具,通过网络使不同机器或者操作系统之间分享部分文件,用于宿主机和目标机之间的文件共享。

# 安装 nfs(两台机器都需要安装)
 sudo apt install nfs-kernel-server
 ​
 # 配置
 ## 服务端 103
 ### (1)在 /etc/exports 文件添加可以共享的文件夹和允许的客户端地址
 /home/tianws 172.22.52.120(rw,no_root_squash,async)
 ### (2)重启 nfs 服务
 sudo systemctl restart nfs-server.service
 ## 客户端 120
 ### (1)创建挂载的目录
 mkdir -p ~/sshfs/103
 ### (2)挂载远程目录
 sudo mount -t nfs 103:/home/tianws ~/sshfs/103

使用

因为方案二需要管理员权限,所以我用的是方案一,通过一通操作,103 服务器上的家目录被挂载到 102 上的 ~/sshfs/103 路径下,将程序中路径全部换为相对路径,就可以直接在 102 上运行了。

方案二感觉是更通用的方案,服务端配置好后,客户端不需要认证登录就可以挂载,更加的方便,适合服务器的管理员做通用的管理。

其他

(1)这一套流程我最担心的是因为读取数据方式由直接读取本地硬盘变成了通过网络读取远程目录,会不会导致数据读取部分成为训练的瓶颈。实践下来,训练表现良好,几乎可以用满 GPU,和原来直接硬盘读取没有观察到太大差别。这也可能是因为我的数据是放在 103 上的固态硬盘,服务器之间的网络带宽也足够,所以没有引起瓶颈,如果用机械硬盘,也许会降低训练速度。

(2)我通过监控和同步两个步骤满足了需求,这样其实也会导致产生两份备份,而且那个方案脚本略复杂,容易出幺蛾子,如果用今天的远程挂载的方法,可以更完美的解决问题。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐