Linux服务器Ubuntu共享硬盘
前言
由于实验室有多台服务器,每台服务器的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试试