挂载NFS
挂载NFS时,常用的命令比如:
#将远程目录挂载到本地/home/share目录下
mount -t nfs -o nolock 192.168.1.10:/tmp /home/share
在Linux 下可以用 mount
函数进行挂载:
bool Mount()
{
string remotePath = m_remoteIP + ":" + m_remotePath;
string localPath = m_localPath;
string params = "nolock,soft,fg,tcp,timeo=5,retrans=1,rsize=4096,vers=3,addr=" + m_remoteIP;
int ret = mount(remotePath.c_str(),
localPath.c_str(),
"nfs",
MS_SYNCHRONOUS,
params.c_str());
if (ret != 0)
{
auto errInfo = errno;
return false;
}
return true;
}
挂载失败时,常见错误码 errno
有:
#define EINVAL 22 /* Invalid argument 挂载参数问题,可能是没加addr*/
#define EACCES 13 /* Permission denied 权限问题*/
#define EPERM 1 /* Operation not permitted 权限问题*/
#define EBUSY 16 /* Device or resource busy 挂载目录正被使用*/
#define ENOENT 2 /* No such file or directory 挂载目录错误*/
参数 说明 rsize=n 读时最大字节数 wsize=n 写时最大字节数 timeo=n 客户端重传请求前等待时间,默认等待重传时间为60s retrans=n 客户端返回错误前的重传次数。默认为重传3次。retrans与soft参数一起使用时才有效。 soft/hard 软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误;
如果使用硬连接方式则客户端一直重新请求直至成功。默认为hard bg/fg 设置挂载失败后的行为方式。
默认的fg方式将立刻退出返回错误状态,bg方式是退出前将产生一个子进程在后台继续尝试挂载 vers=xxx 设置版本 addr=xxx 设置服务地址 tcp/udp 设置协议,一般使用tcp,网络不稳定可以换udp port=n 设置服务端口号 lock/nolock 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。默认为lock。
卸载函数有 mount
和 mount2
,第二个可以加参数,所以一般情况下使用 mount2
进行强制卸载:
bool UnMount()
{
return umount2(m_localPath.c_str(), MNT_FORCE) == 0);
}
如果 m_localPath
目录没有被挂载,则会返回错误
检查是否挂载
Linux下使用命令检查nfs是否挂载成功的方式有很多,比如:
功能需求:
- 检查目录是否挂载成功
- 当NFS服务关闭时,检查结果也需要同步
经过测试,只有 mountpoint
能完成第二点功能需求,所以直接使用shell命令来进行检查:
bool CheckMount()
{
string shell = "mountpoint -d " + m_localPath;
QProcess proc;
proc.start(shell.c_str());
if (!proc.waitForFinished(10000))
return false;
auto output = proc.readAll();
return !output.isEmpty())
}
NFS服务
2. 配置方法:打开目录下的 exports文件,配置NFS服务目录,比如共享D盘下的 NFSData目录:
D:\NFSData -name:nfs -exec -maproot:0 -alldirs
- name:设置挂载的目录名给客户端使用,比如
mount -t nfs -o nolock 192.168.1.10:/nfs /home/share
- maproot:将root权限开放给客户端
- alldirs:将全部路径开放给客户端
Original: https://www.cnblogs.com/yaronzz/p/15726328.html
Author: Yaronzz
Title: C++ NFS挂载
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585297/
转载文章受原作者版权保护。转载请注明原作者出处!