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。 |
卸载
卸载函数有mount和mount2,第二个可以加参数,所以一般情况下使用mount2进行强制卸载:
bool UnMount()
{
return umount2(m_localPath.c_str(), MNT_FORCE) == 0);
}
如果m_localPath目录没有被挂载,则会返回错误
检查是否挂载
检查命令
Linux下使用命令检查nfs是否挂载成功的方式有很多,比如:
检查文件系统的磁盘空间占用情况
df -hFilesystem 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
查看挂载信息文件
cat /proc/mountsubi0: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
直接使用挂载命令
mountubi0: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)
查看指定目录是否挂载点
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挂载的更多相关文章
- nfs挂载配置
nfs挂载步骤 服务器端 1.安装nfs-utils rpcbind $sudo yum –y install nfs-utils rpcbind 2.文件开放出去配置/etc/exports 例子: ...
- NFS挂载Android文件系统
NFS挂载Android文件系统 [日期:2012-02-14] 来源:Linux社区 作者:cjok376240497 [字体:大 中 小] 1.安装NFS服务 $sudo apt-get ...
- 用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 ...
- NFS挂载启动
NFS挂载启动参数: 1.服务器IP.目录(虚拟机IP和 NFS目录) 2.开发的IP 如下我的开发板设置 ipaddr=192.168.1.17 ① 开发板IP serverip ...
- TQ210开发板NFS挂载android4.0.4的rootfs的方法
首先声明的是,我使用的u-boot是自己移植的u-boot2013.01.01而非天嵌官方的那个,至于使用官方的u-boot如何去实现nfs挂载rootfs我没怎么研究过,不过原理方法都是一致的. 主 ...
- linux下使用NFS挂载文件系统
转自linux如何使用NFS挂载文件系统 设备:一台服务器和一台客户端,这里我们把装在PC机上的RedHat作为服务器,而客户端则是嵌入式linux开发板. 环境:开发板已启动,连接好串口和网线,串口 ...
- Ubuntu开启NFS,挂载根目录
1.安装NFS server Ubuntu初始状态是没有NFS server的,首先要安装NFS server: $ sudo apt-get install nfs-kernel-server (安 ...
- NFS挂载故障卡死的问题
NFS挂载故障卡死的问题 默认是硬的,改成软的.比如:mount -t nfs -o rw,vers=4,noacl,nocto,noatime,nodiratime,rsize=131072,wsi ...
- mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)
1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ...
- 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 ...
随机推荐
- Codeforces 750E - New Year and Old Subsequence(线段树维护矩阵乘法,板子题)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 我做这道 *2600 的动力是 wjz 出了道这个套路的题,而我连起码的思路都没有,wtcl/kk 首先考虑怎样对某个固定的串计 ...
- Codeforces 1423N - BubbleSquare Tokens(归纳+构造)
Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...
- SQLite3 约束和简单命令
安装sqlite3,配置环境变量. 1.打开数据库 sqlite3.exe db_name.db 2.常用命令 .tables 查看所有表 .headers on 设置显示表头 .schema tab ...
- [R]在dplyr函数的基础上编写函数-(3)tidyeval
dplyr的优点很明显,数据框操作简洁,如filter(df, x == 1, y == 2, z == 3)等于df[df$x == 1 & df$y ==2 & df$z == 3 ...
- python20判断变量是否存在
python中检测某个变量是否有定义 第一种方法使用内置函数locals(): locals():获取已定义对象字典 'testvar' in locals().keys() 第二种方法使用内置函数d ...
- Typora数学公式输入指导手册
Markdown 公式指导手册 公式大全的链接 https://www.zybuluo.com/codeep/note/163962#mjx-eqn-eqsample 目录 Markdown 公式指导 ...
- TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况
TLSv1.3 Support:主流 Web 客户端和服务端对 TLSv1.3 的支持情况 请访问原文链接:https://sysin.org/blog/tlsv1-3-support/,查看最新版. ...
- Web安全学习二
目录 常见漏洞攻防 SQL注入 注入分类 按技巧分类 按获取数据的方式分类 注入检测 权限提升 数据库检测 绕过技巧 CheatSheet SQL Server Payload MySQL Paylo ...
- E面波导和H面波导的问题
我感觉与窄壁平行是E面,反之为H面.通常E面(窄面)是指与电场方向平行的方向图切面(窄面):H面(宽面)是指与磁场方向平行的方向图切面(宽面).E面的意思是... ElevationH面的意思是... ...
- Linux学习 - 文件系统常用命令
一.文件系统查看命令df df [选项] [挂载点] -a 查看所有文件系统信息,包括特殊文件系统 -h 使用习惯单位显示容量 -T 显示文件系统类型 -m 以MB为单位显示容量 -k 以KB为单位显 ...