挂载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是否挂载成功的方式有很多,比如:

  1. 检查文件系统的磁盘空间占用情况 df -h

    Filesystem                Size      Used Available Use% Mounted on
    ubi0:rootfs 54.1M 50.8M 3.3M 94% /
    devtmpfs 215.8M 0 215.8M 0% /dev
    192.168.0.249:/nfs 59.6G 1.6G 57.9G 3% /mnt/udisk
  2. 查看挂载信息文件 cat /proc/mounts

    ubi0:rootfs / ubifs rw,sync,relatime 0 0
    devtmpfs /dev devtmpfs rw,relatime,size=220936k,nr_inodes=55234,mode=755 0 0
    192.168.0.249:/nfs /mnt/udisk nfs rw,sync,relatime,vers=3,rsize=4096,wsize=8192,namlen=255,soft,nolock,proto=tcp,timeo=5,retrans=1,sec=sys,mountaddr=192.168.0.249,mountvers=3,mountproto=tcp,local_lock=all,addr=192.168.0.249 0 0
  3. 直接使用挂载命令 mount

    ubi0:rootfs on / type ubifs (rw,sync,relatime)
    devtmpfs on /dev type devtmpfs (rw,relatime,size=220936k,nr_inodes=55234,mode=755)
    192.168.0.249:/nfs on /mnt/udisk type nfs (rw,sync,relatime,vers=3,rsize=4096,wsize=8192,namlen=255,soft,nolock,proto=tcp,timeo=5,retrans=1,sec=sys,mountaddr=192.168.0.249,mountvers=3,mountproto=tcp,local_lock=all,addr=192.168.0.249)
  4. 查看指定目录是否挂载点 mountpoint -d /mnt/udisk

    #打印文件系统的主设备号和次设备号
    0:21

功能实现

功能需求:

  • 检查目录是否挂载成功
  • 当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服务

Linux下的NFS服务安装比较方便,Windows下常见的NFS服务软件可以使用haneWIN NFS Server

1. 下载地址https://r.hanewin.net/nfs1261.zip

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:将全部路径开放给客户端

C++ NFS挂载的更多相关文章

  1. nfs挂载配置

    nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...

  2. NFS挂载Android文件系统

    NFS挂载Android文件系统 [日期:2012-02-14] 来源:Linux社区  作者:cjok376240497 [字体:大 中 小]     1.安装NFS服务 $sudo apt-get ...

  3. 用Qemu模拟vexpress-a9 (四) --- u-boot引导kernel,用nfs挂载根文件系统

    环境介绍 Win7 64 + Vmware 11 + ubuntu14.04 32 u-boot 版本:u-boot-2015-04 Linux kernel版本:linux-3.16.y busyb ...

  4. NFS挂载启动

    NFS挂载启动参数: 1.服务器IP.目录(虚拟机IP和 NFS目录) 2.开发的IP 如下我的开发板设置 ipaddr=192.168.1.17           ① 开发板IP serverip ...

  5. TQ210开发板NFS挂载android4.0.4的rootfs的方法

    首先声明的是,我使用的u-boot是自己移植的u-boot2013.01.01而非天嵌官方的那个,至于使用官方的u-boot如何去实现nfs挂载rootfs我没怎么研究过,不过原理方法都是一致的. 主 ...

  6. linux下使用NFS挂载文件系统

    转自linux如何使用NFS挂载文件系统 设备:一台服务器和一台客户端,这里我们把装在PC机上的RedHat作为服务器,而客户端则是嵌入式linux开发板. 环境:开发板已启动,连接好串口和网线,串口 ...

  7. Ubuntu开启NFS,挂载根目录

    1.安装NFS server Ubuntu初始状态是没有NFS server的,首先要安装NFS server: $ sudo apt-get install nfs-kernel-server (安 ...

  8. NFS挂载故障卡死的问题

    NFS挂载故障卡死的问题 默认是硬的,改成软的.比如:mount -t nfs -o rw,vers=4,noacl,nocto,noatime,nodiratime,rsize=131072,wsi ...

  9. mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)

    1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ...

  10. NFS挂载异常 mount.nfs: Input/output error

    [root@localhost ~]# vi /etc/exports #增加/nfs 192.168.10.132(rw,no_root_squash,no_all_squash,async) [r ...

随机推荐

  1. Codeforces 750E - New Year and Old Subsequence(线段树维护矩阵乘法,板子题)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 我做这道 *2600 的动力是 wjz 出了道这个套路的题,而我连起码的思路都没有,wtcl/kk 首先考虑怎样对某个固定的串计 ...

  2. Codeforces 1423N - BubbleSquare Tokens(归纳+构造)

    Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...

  3. SQLite3 约束和简单命令

    安装sqlite3,配置环境变量. 1.打开数据库 sqlite3.exe db_name.db 2.常用命令 .tables 查看所有表 .headers on 设置显示表头 .schema tab ...

  4. [R]在dplyr函数的基础上编写函数-(3)tidyeval

    dplyr的优点很明显,数据框操作简洁,如filter(df, x == 1, y == 2, z == 3)等于df[df$x == 1 & df$y ==2 & df$z == 3 ...

  5. python20判断变量是否存在

    python中检测某个变量是否有定义 第一种方法使用内置函数locals(): locals():获取已定义对象字典 'testvar' in locals().keys() 第二种方法使用内置函数d ...

  6. Typora数学公式输入指导手册

    Markdown 公式指导手册 公式大全的链接 https://www.zybuluo.com/codeep/note/163962#mjx-eqn-eqsample 目录 Markdown 公式指导 ...

  7. TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况

    TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况 请访问原文链接:https://sysin.org/blog/tlsv1-3-support/,查看最新版. ...

  8. Web安全学习二

    目录 常见漏洞攻防 SQL注入 注入分类 按技巧分类 按获取数据的方式分类 注入检测 权限提升 数据库检测 绕过技巧 CheatSheet SQL Server Payload MySQL Paylo ...

  9. E面波导和H面波导的问题

    我感觉与窄壁平行是E面,反之为H面.通常E面(窄面)是指与电场方向平行的方向图切面(窄面):H面(宽面)是指与磁场方向平行的方向图切面(宽面).E面的意思是... ElevationH面的意思是... ...

  10. Linux学习 - 文件系统常用命令

    一.文件系统查看命令df df [选项] [挂载点] -a 查看所有文件系统信息,包括特殊文件系统 -h 使用习惯单位显示容量 -T 显示文件系统类型 -m 以MB为单位显示容量 -k 以KB为单位显 ...