網站首頁 編程語言 正文
掛載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 -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
查看掛載信息文件 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
直接使用掛載命令 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)
查看指定目錄是否掛載點 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. 下載地址:http://xiazai.jb51.net/202112/yuanma/nfsd_jb51.rar
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:將全部路徑開放給客戶端
原文鏈接:https://www.cnblogs.com/yaronzz/p/15726328.html
相關推薦
- 2022-08-25 Redis的4種緩存模式分享_Redis
- 2022-06-12 Python中常用的內置函數_python
- 2022-08-22 Python3.9用pip安裝wordcloud庫失敗的解決過程_python
- 2024-04-05 mybatis(mybatis-plus)報invalid bound statement (not
- 2023-10-15 centos 切換g++
- 2023-10-28 C語言中getchar函數詳解看這一篇就夠了(函數功能、使用、返回值)_C 語言
- 2022-05-03 C#面向對象設計原則之開閉原則_C#教程
- 2022-06-11 C#把EXCEL數據轉換成DataTable_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支