C++ NFS挂载

挂载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。

卸载函数有 mountmount2,第二个可以加参数,所以一般情况下使用 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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [云原生]Kubernetes-集群搭建(第2章)

    一、前置知识点 二、kubeadm部署方式介绍 三、安装要求 四、最终目标 五、准备环境 六、环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(…

    Linux 2023年6月13日
    062
  • 【数学建模相关】matplotlib画多个子图(散点图为例 左右对照画图)

    @ 例题 例图 代码展示 例题 乙醇偶合制备 C4 烯烃 C4 烯烃广泛应用于化工产品及医药的生产,乙醇是生产制备 C4 烯烃的原料。 在制备过程中,催化剂组合(即:Co 负载量、…

    Linux 2023年6月8日
    090
  • Java 内功修炼 之 数据结构与算法(一)

    (1)双向链表通过上面单链表相关操作,可以知道 单链表的 查找方向唯一。而双向链表在 单链表的 基础上在 添加一个指针域(pre),这个指针域用来指向 当前节点的上一个节点,从而实…

    Linux 2023年6月11日
    0101
  • python学习

    目录: 1、课程推荐以及书籍推荐 2、学习记录 2.1:无 1. 实践过程 廖雪峰的官方网站 2. 学习记录 2.1 无: posted @2022-02-12 19:44 风御之…

    Linux 2023年6月13日
    082
  • 一篇文章Shell脚本快速入门

    Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用 #开头的都被当作注释语句: 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可…

    Linux 2023年5月28日
    064
  • Unity编译时找不到AndroidSDK的问题 | Unable to list target platforms(转载)

    现象 在用 Unity 编译 Android 平台的应用时,遇到 Unable to list target platforms 的问题。 错误提示 详细错误描述如下: Error…

    Linux 2023年6月7日
    0106
  • HBuilderX配置外部服务器(tomcat)查看编辑jsp界面

    HBuilderX配置外部服务器(tomcat)查看编辑jsp界面 一、第一种方法,通过启动本地tomcat,查看jsp 在tomcat的webapps目录下创建文件夹HBuild…

    Linux 2023年6月7日
    071
  • SSM 集成 Freemarker 模板引擎

    在前后端分离的大趋势下,项目开发过程中,应尽量减少前端和后台的依赖和耦合,前端和后台尽可能采用 ajax 进行交互;但是全站 ajax,不利于网站 SEO,所以引入模板引擎,尽量减…

    Linux 2023年6月14日
    085
  • linux学习之搭建Apache 服务器

    本实验的主要任务是在CentOS操作系统中搭建Apache 服务器,练习文档根目录、首页文件、相关访间控制规则的配置。 ‎【实验目的】 ‎(1) 理解Apache 服务器主配置文件…

    Linux 2023年6月13日
    092
  • jmeter学习记录–04–Beanshell

    一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类…

    Linux 2023年5月28日
    0103
  • Python3.9.5安装

    基础环境:yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-de…

    Linux 2023年6月6日
    082
  • conda 和 pip 的具体区别

    pip install 安装包时不会自动安装所需的其他依赖包,只是在缺少其他依赖包时作错误提示,这时需要手动安装其他依赖包 pip 不会将python看成包,不能对环境中的pyth…

    Linux 2023年6月7日
    080
  • 用动态端口,增强winrm,open sshd的,服务器安全

    前言 我开发了一套开源,免费,跨平台的devops脚本批量运维工具。【kaiiit家的饭店】是软件的正式名字。【卡死你3000】是第一版开发代号。 想要增强win被控机密码安全。可…

    Linux 2023年6月14日
    073
  • Linux(Deepin)Qt引用ffmpeg的问题(: error: cannot find -l…)

    Linux(Deepin)Qt引用ffmpeg的问题 1、环境介绍 Deepin 20.4 Qt 5.15.1 2、问题描述 从git上找了一个项目打算在Linux练习,顺便熟悉L…

    Linux 2023年6月14日
    097
  • openssh升级

    bash;gutter:false; ssh -V</p> <p>cp -a /etc/ssh/sshd_config /etc/ssh/sshd_conf…

    Linux 2023年6月7日
    080
  • kali linux安装后乱码的解决方法

    操作系统是5.3 解决方法是在终端执行命令: Original: https://www.cnblogs.com/wangpingcong/p/12641912.htmlAutho…

    Linux 2023年6月7日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球