Linux挂载远程目录
sshfs、NFS的介绍与使用
Posted by Tian on November 14, 2018
需求
我的程序和数据都部署在103服务器上,有一天,我终于实现了一个想法,兴冲冲地想运行看看,但是一看103显卡被占满了,而且同事要训练很多天,那怎么办,等他训练完?
等?等是不可能等的。我一看,102服务器现在还空着,马不停蹄地开始往102服务器上拷贝数据和程序,因为数据量大,拷贝了几个小时,等我终于把102的数据、环境、程序都调试好,准备开始训练,发现102显卡又被占了。。。
发现了吗,在这个过程中,有三点浪费:
1、 时间的浪费:我花费了大量的时间在传数据、调程序、配环境等琐事上;
2、精力的浪费:不得不承认,这些琐事相当耗神,我得考虑路径,得考虑数据传输的完整性,哪一点有问题都得慢慢排查解决;
3、磁盘空间的浪费:每个服务器都有一份数据和程序的备份,占用了大量硬盘空间,而且随着项目的进行,有的备份是过时的,时间久了我自己都不清楚应该用哪个备份了。
所以我想要只保留一份数据和程序,但是能够快速挂载到任何服务器上运行。
方案
你应该想到了,只要把程序和数据放到“移动硬盘”上,用的时候插到对应服务器上就行了,哈哈。
对于Linux服务器来说,挂载远程目录就是这个“移动硬盘”。
方案一 SSHFS
ssh和scp大家都用过,sshfs也和他们是一个“部门”的,他可以让我们通过SSH文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录进行交互。
使用方法很简单:
|
|
方案二 NFS
nfs(network file system)网络文件系统工具,通过网络使不同机器或者操作系统之间分享部分文件,用于宿主机和目标机之间的文件共享。
|
|
使用
因为方案二需要管理员权限,所以我用的是方案一,通过一通操作,103服务器上的家目录被挂载到102上的~/sshfs/103
路径下,将程序中路径全部换为相对路径,就可以直接在102上运行了。
方案二感觉是更通用的方案,服务端配置好后,客户端不需要认证登录就可以挂载,更加的方便,适合服务器的管理员做通用的管理。
其他
(1)这一套流程我最担心的是因为读取数据方式由直接读取本地硬盘变成了通过网络读取远程目录,会不会导致数据读取部分成为训练的瓶颈。实践下来,训练表现良好,几乎可以用满GPU,和原来直接硬盘读取没有观察到太大差别。这也可能是因为我的数据是放在103上的固态硬盘,服务器之间的网络带宽也足够,所以没有引起瓶颈,如果用机械硬盘,也许会降低训练速度。