前言

由于实验室有多台服务器,每台服务器的GPU资源并不随时空闲,但在某个服务器构建了环境,发现这个时候GPU不空闲,就很麻,迁移环境和数据是一个很麻烦的事情,因此想着把数据和conda环境直接放在一个专属硬盘里面,哪个服务器有了这个硬盘就是我家(bushi),但硬盘在不同服务器移动也是一个麻烦事,干脆想的就是直接在不同服务器之间共享硬盘。

目标

多个Ubuntu系统之间共享同一硬盘

前提

拥有root管理员权限

正文

我们将硬盘挂在一个服务器上,这个共享服务器成为A服务器;另一个被共享的服务器称为B服务器。本次操作需要借助NFS(Network File System)来实现

(1)首先,在A服务器将硬盘共享出来,操作如下:

第一步,执行以下命令安装nfs,apt会自动安装nfs-common、rpcbind等13个软件包

sudo apt install nfs-kernel-server

第二步,编写配置文件:编辑/etc/exports 文件:

sudo vi /etc/exports

如下图,这个配置是重点,遇到了大坑!这个uid和gid是服务器B映射到A时作为匿名用户的uid和gid
1)当服务器B拥有root权限时,配置如下:
在这里插入图片描述第一列表示要共享的硬盘(需要改为你需要更改的硬盘路径),第二列是一些必要的参数,无需更改
2)当服务器B没有root权限时,配置如下:
在这里插入图片描述我在这里遇到坑是因为如果不去指定uid和gid的话那么我在服务器B访问共享硬盘时没有写权限!!!(原因是因为服务器B访问时会相应把B上的uid和gid映射到A上)
呜呜呜,肝了好久,熬夜了,直接睡实验室了

第三步,重启服务即完成服务器A的配置

sudo service nfs-kernel-server restart

除此之外,还有一些其他命令可用于查看配置情况

sudo showmount -e   #查看共享硬盘

在这里插入图片描述

sudo exportfs -rv  #将配置文件中的目录全部重新export一次,无需重启服务。
sudo nfsstat  #查看NFS的运行状态
sudo rpcinfo #查看rpc执行信息,可以用于检测rpc运行情况
sudo netstat -tu -4 #查看网络端口,NFS默认是使用111端口。

(2)配置服务器B,得到服务器A共享的硬盘

第一步,执行以下命令安装nfs,apt会自动安装nfs-common、rpcbind等13个软件包

sudo apt install nfs-kernel-server

第二步,重启服务即完成服务器A的配置

sudo service nfs-kernel-server restart

第三步,查看服务器A上的共享目录,显示服务器A上export出来的目录

sudo showmount -e localhostA  #localhostA指的是服务器A的地址

第四步,将A服务器共享硬盘挂载到B服务器上

sudo mount -t nfs localhostA:/data /mnt/data

正常情况下即完成所有配置。如果在这个地方遇到报错mount.nfs: Connection timed out,在确定网络没有问题的情况下,可以重启两边服务器的nfs-server试试

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐