15.NFS 服務器

15.NFS 服務器

NFS 服務介紹

NFS是Network File System的縮寫,即網絡文件系統,是一種基于TCP/IP協議的網絡文件共享協議,最早由Sun公司開發,它允許不同操作系統的計算機通過網絡共享文件和目錄,實現跨平臺的文件訪問和管理。

核心功能

  • 文件共享:將服務器上的目錄 “掛載” 到客戶端,客戶端可像訪問本地文件一樣讀寫共享目錄中的內容。
  • 跨平臺兼容:支持 Unix、Linux、Windows、macOS 等多種操作系統,解決不同系統間的文件互通問題。
  • 透明訪問:客戶端訪問共享文件時,無需了解文件實際存儲在遠程服務器,操作方式與本地文件一致。
  • 權限控制:通過文件系統權限(如 Unix 的用戶 / 組權限)和 NFS 配置,限制客戶端對共享資源的訪問權限(讀、寫、執行等)。

NFS工作原理

NFS工作原理圖

image-20250807220800270

NFS工作流程:

  1. 用戶進程在客戶端房間提出要訪問遠程文件的請求。
  2. 本地文件訪問的小助手把請求轉給 NFS 客戶端。
  3. NFS 客戶端通過 TCP/IP 協議棧這個管道把請求發送到服務器端。
  4. 服務器端的 RPC 服務(portmap)這個導航員指引 NFS 客戶端找到 NFS 服務。
  5. NFS 服務處理請求,通過本地文件訪問小助手從本地磁盤獲取文件。
  6. 文件再通過 TCP/IP 協議棧管道返回給客戶端的 NFS 客戶端。
  7. 最后,客戶端的本地文件訪問小助手把文件交給用戶進程。

部署服務

NFS服務由nfs-utils軟件包提供

# 安裝軟件包
[root@server ~]# yum install -y nfs-utils# 準備用戶作為客戶端(client)
[root@server ~]# useradd -u 1000 bq
[root@server ~]# echo 123 | passwd --stdin bq# 準備共享目錄
[root@server ~]# mkdir -p /shares/nfs
[root@server ~]# chown bq /shares/nfs# 啟用并啟動服務
[root@server ~]# systemctl enable nfs-server --now # 配置防火墻,學習階段可直接把防火墻直接關閉
[root@server ~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd
[root@server ~]# firewall-cmd --reload

配置 NFS 導出

exportfs 命令:

exportfs 是 Linux 系統中用于管理 NFS 服務器共享目錄(導出目錄)的核心命令,主要用于查看、刷新、添加或刪除 NFS 共享配置,無需重啟 NFS 服務即可使修改生效。

命令基本格式:

exportfs [選項] [參數]
1. 查看當前導出的 NFS 共享
exportfs -v  # 詳細顯示所有導出的共享目錄及配置選項
exportfs -r  # 重新加載 /etc/exports 配置(常用)
  • -v:顯示詳細信息,包括共享目錄、允許訪問的客戶端、權限選項等。

  • 示例輸出:

    /data  10.1.8.11/24(rw,sync,no_root_squash,wdelay)
    
2. 重新加載 NFS 共享配置

當修改 /etc/exports 文件后,無需重啟 NFS 服務,直接執行:

exportfs -ra
  • -r:重新讀取 /etc/exports 并同步共享配置(刷新現有共享)。
  • -a:應用所有共享配置(包含新增和刪除的共享)。
  • 這是修改 NFS 共享后最常用的命令,確保配置立即生效。
3. 臨時導出一個共享目錄

無需修改 /etc/exports,可臨時導出一個目錄(重啟 NFS 服務后失效):

exportfs -o rw,sync 10.1.8.11:/tmp/share
  • -o:指定共享選項(如 rw 讀寫、sync 同步寫入)。
  • 格式:客戶端IP:/要共享的本地目錄
4. 刪除已導出的共享目錄
exportfs -u 10.1.8.11/24:/data  # 取消特定客戶端對 /data 的共享
exportfs -ua                       # 取消所有已導出的共享
  • -u:取消導出(卸載共享)。
  • 常用于臨時移除某個共享,而不修改 /etc/exports
5. 其他實用選項
  • -i:忽略 /etc/exports 文件,僅通過命令行參數指定共享(需配合 -o 使用)。
  • -f:在重新加載配置前,清除所有當前導出的共享(通常與 -r 結合使用:exportfs -fr)。
常見使用場景
  1. 修改 /etc/exports 后刷新配置:

    vim /etc/exports  # 編輯共享配置
    exportfs -ra      # 使配置生效
    
  2. 查看當前所有 NFS 共享詳情:

    exportfs -v
    
  3. 臨時取消某個共享(如緊急維護):

    exportfs -u 10.1.8.11/24:/data
    
注意事項
  • exportfs 僅用于管理 NFS 服務器的共享配置,客戶端掛載不受直接影響。
  • 臨時導出的共享(未寫入 /etc/exports)在 NFS 服務重啟后會失效,需持久化配置請編輯 /etc/exports
  • 執行命令需 root 權限(使用 sudo)。
編輯/etc/exports文件
  • 共享目錄格式共享目錄 客戶端IP(訪問權限)
  • 訪問權限選項
    • rw:讀寫權限。
    • ro:只讀權限。
    • sync:同步寫入,確保數據在寫入內存的同時也寫入磁盤,保證數據安全但性能稍低。
    • async:異步寫入,數據先寫入內存,再異步寫入磁盤,性能較高但可能丟失數據。
    • no_subtree_check:不檢查子樹,提高性能。
    • no_root_squash,默認情況下,當客戶機上的root用戶訪問NFS導出時,服務器會將其視為nobody用戶(在服務器上定義)的訪問。
重新加載配置
  • 使用exportfs - ra命令重新加載/etc/exports文件中的配置,使新的共享設置生效。

==提示:==NFS服務器主要配置文件是**/etc/exports**,目錄**/etc/exports.d中任何以.exports**結尾且不以點(.)開頭的文件也會生效。 所有這些文件都使用相同的語法。

==提示:==與編輯文件/etc/exports本身相比,在/etc/exports.d中創建或刪除文件可能更容易,并且它可以減少一系列相關配置更改意外破壞現有導出的風險。

配置文件中,每一行都聲明一個導出點。 第一個字段是要導出到客戶端的目錄的名稱。 該行的其余部分列出了可以訪問共享目錄的客戶端系統以及授予它們的訪問權限。

==提示:==NFS不要使用SMB共享的目錄。 如果這樣做,則可能會導致文件損壞或其他文件完整性或一致性問題。

配置示例
  • 可解析DNS的主機名,例如client.bq.cloud。 在以下示例中,client.bq.cloud系統可以掛載/shares/nfs目錄。
/shares/nfs client.bq.cloud
  • DNS解析的主機名,帶*通配符。 以下示例允許bq.cloud域中的所有系統訪問NFS共享。
/shares/nfs *.bq.cloud
  • IPv4地址。 以下示例允許從10.1.8.12 IP地址訪問NFS共享。
/shares/nfs 10.1.8.11
  • IPv4網絡。 以下示例允許從10.1.8.0/24網絡訪問NFS共享。 您也可以使用10.1.8.0/255.255.255.0 表示法。
/shares/nfs 10.1.8.0/24
/shares/nfs 10.1.8.0/255.255.255.0
  • IPv6地址。 以下示例允許具有fde2:6494:1e09:2::20 IPv6地址的客戶端系統訪問NFS共享。
/shares/nfs fde2:6494:1e09:2::20
  • IPv6網絡。 以下示例允許fde2:6494:1e09:2::/64 IPv6網絡訪問NFS共享。
/shares/nfs fde2:6494:1e09:2::/64
  • 要與多個客戶機系統共享目錄,請在目錄名稱后使用以空格分隔的列表:
/shares/nfs 10.1.8.0/24 client.bq.cloud *.example.net

默認情況下,目錄以只讀模式與客戶端共享。 在每個客戶定義之后,您可以立即在括號中指定導出選項以覆蓋默認值。 客戶端定義的末尾和左括號之間必須沒有空格。

選項示例

  • rw,此選項允許對指定客戶端進行讀/寫訪問。 如果沒有該選項(或者如果您使用ro代替),則NFS僅授予讀取訪問權限。 在以下示例中,client.bq.cloud具有讀/寫訪問權限,而client2.bq.cloud具有只讀訪問權限。

    /shares/nfs client.bq.cloud(rw) client2.bq.cloud
    
  • no_root_squash,默認情況下,當客戶機上的root用戶訪問NFS導出時,服務器會將其視為nobody用戶(在服務器上定義)的訪問。 這意味著,如果客戶端上的root用戶在導出文件上創建了文件,則該文件將歸用戶nobody所有。 這也意味著,如果客戶機上的root用戶嘗試讀取導出文件,而該文件是沒人能讀取的用戶,則訪問將失敗。 您可以通過添加no_root_squash選項來禁用該安全保護。 (nobody用戶對大多數系統資源只有讀或無權限操作)

    以下示例允許client.bq.cloud系統具有對/shares/nfs導出目錄的讀/寫訪問權限和實際root用戶訪問權限。

    /shares/nfs client.bq.cloud(rw,no_root_squash)
    

我們使用以下記錄:

[root@server ~]# vim /etc/exports
/shares/nfs 10.1.8.0/24(rw)

每當您在/etc/exports或/etc/exports.d/*.exports中更改導出點時,請對NFS服務運行exportfs -r命令確保更改生效,或者運行systemctl reload nfs-server

[root@server ~]# exportfs -r
# 或者
[root@server ~]# systemctl reload nfs-server
# 或者
[root@server ~]# exportfs -av

每當您在/etc/exports或/etc/exports.d/*.exports中更改導出點時,請對NFS服務運行exportfs -r命令確保更改生效,或者運行systemctl reload nfs-server

[root@server ~]# exportfs -r
# 或者
[root@server ~]# systemctl reload nfs-server
# 或者
[root@server ~]# exportfs -av

監視 NFS 導出

使用exportfs命令列出NFS服務器當前導出的目錄。

[root@server ~]# exportfs
/shares/nfs 10.1.8.0/24

默認情況下,該命令不顯示導出選項。 使用-v選項列出這些選項,包括缺省選項。

[root@server ~]# exportfs -v
/shares/nfs 10.1.8.0/24(sync,...,rw,secure,no_root_squash,...)

客戶端掛載

# 安裝軟件包
[root@client ~]# yum install -y nfs-utils
# 準備用戶
[root@client ~]# useradd -u 1000 bq
[root@client ~]# echo redhat | passwd --stdin bq# 查看服務端提供的共享
[root@client ~]# showmount -e server
Export list for server:
/shares/nfs 10.1.8.0/24# 掛載
[root@client ~]# mkdir /mnt/nfs
[root@client ~]# mount -t nfs server:/shares/nfs /mnt/nfs# root用戶不能創建
[root@client ~]# touch /mnt/nfs/root-f1
touch: cannot touch ‘/mnt/nfs/root-f1’: Permission denied# bq用戶能創建
[bq@client ~]$ touch /mnt/nfs/bq-f1

持久化掛載

修改 /etc/fstab,最后添加如下記錄:

server:/shares/nfs /mnt/nfs nfs defaults 0 0

如涉及版權問題,請聯系作者處理!!!!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92824.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

站在Vue的角度,對比鴻蒙開發中的數據渲染二

第二類數字&#xff08;Number&#xff09;的操作 2.1普通數字的顯示 vue中直接顯示 <template> <div><h3>學習Vue</h3><div>{{ num }}</div> </div></template><script lang"ts" setup>import {ref} fr…

Python自動化測試實戰:reCAPTCHA V3繞過技術深度解析

Python自動化測試實戰&#xff1a;reCAPTCHA V3繞過技術深度解析 摘要 reCAPTCHA V3作為Google推出的無感驗證碼系統&#xff0c;通過先進的機器學習算法分析用戶行為模式&#xff0c;已成為當前最主流的反機器人解決方案。本文將深入解析其核心檢測機制&#xff0c;并提供完…

簡單Modules 的配置與管理,靈活應對多版本軟件環境的需求。

參考文檔 官方手冊&#xff1a;https://modules.readthedocs.io Modulefile 語法&#xff1a;modulefile — Modules documentation Environment Modules 工具 Environment Modules 是一個環境管理工具&#xff0c;用于動態加載、卸載和管理不同版本的軟件環境變量&#xff…

java內部類-匿名內部類

匿名內部類必須有一個已經存在的類或者接口

上篇:《排序算法的奇妙世界:如何讓數據井然有序?》

個人主頁&#xff1a;strive-debug 排序算法精講&#xff1a;從理論到實踐 一、排序概念及應用 1.1 基本概念 **排序**&#xff1a;將一組記錄按照特定關鍵字&#xff08;如數值大小&#xff09;進行遞增或遞減排列的操作。 1.2 常見排序算法分類 - **簡單低效型**&#xff…

2025.8.6 圖論(1)Solution

2025.8.6 圖論&#xff08;1&#xff09;Solution 割點 學習資料&#xff0c;在 csdn 或洛谷上看都行。是模板題題解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn與逃離恐怖老師。 題意簡述&#xff1a;從一個圖中選定一個點&#xff0c;使得刪除這個點后圖不連…

OpenBayes 教程上新丨一鍵部署 gpt-oss-20b,實測開源推理模型新 SOTA,性能直逼 o3?mini

時隔 6 年&#xff0c;自 GPT-2 以來&#xff0c;OpenAI 終于再度發布開源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千億級參數專為復雜推理與知識密集型場景設計&#xff0c;后者則更適合低延遲、本地或專業垂直領域使用&#xff0c;可在消費級硬件&#xff0…

nlp-句法分析

目錄 一、句法概述 1、成分語法理論概述 &#xff08;1&#xff09;分析過程 &#xff08;2&#xff09;缺點 2、依存語法理論概述 &#xff08;1&#xff09;依存關系、配價模式 &#xff08;2&#xff09;分類 &#xff08;3&#xff09;優勢&#xf…

linux磁盤加密

在Linux中&#xff0c;磁盤加密是一種保護數據不被未授權訪問的方法。有多種工具和策略可以實現磁盤加密&#xff0c;包括使用Linux內核的內置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高級的解決方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大數據架構演變之路

目錄 一、各階段的架構簡介 二、各個架構的詳細解釋 1. 傳統離線架構 2.1. Lambda架構-離線數倉分析實時鏈路分析 2.2. Lambda架構-離線數倉實時數倉 3. Kappa/流批一體架構 4. 湖倉一體架構 三、總結 一、各階段的架構簡介 技術架構 核心驅動(核心需求) ?關鍵技術 …

STM32 HAL庫驅動0.96寸OLED屏幕

STM32 HAL庫驅動0.96寸OLED屏幕 項目概述 本項目使用STM32 HAL庫為0.96寸OLED屏幕編寫驅動程序。OLED屏幕通過I2C接口與STM32單片機通信&#xff0c;實現文本、數字和圖形的顯示功能。 項目倉庫地址&#xff1a;STM32_Sensor_Drives 硬件連接 OLED屏幕通過I2C接口與STM32連…

橫向越權:修改參數訪問不屬于自己的數據

一、什么是橫向越權定義 橫向越權&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一權限級別的用戶&#xff0c;通過篡改請求參數或資源標識&#xff0c;訪問本不屬于自己的數據或功能。例子 假設一個在線商城&#xff0c;用戶 A 訪問訂單詳情的 URL&#xff…

攻擊實驗(ARP欺騙、MAC洪范、TCP SYN Flood攻擊、DNS欺騙、DHCP餓死)

實驗一 ARP欺騙一、拓撲二、實驗準備、1.設置終端漏洞靶機集合選擇需要的數量和鏡像打開設備上的驅動精靈安裝網卡安裝成功后查看IP地址、網關信息等。三、實驗步驟1.實驗原理中間人&#xff08;攻擊者&#xff09;在終端與網關之間持續發送偽造的 ARP 應答包&#xff0c;雙向欺…

VSCode 禁用更新檢查的方法

通過設置菜單禁用 這是最直接和推薦的方法&#xff0c;可以永久禁用自動更新&#xff1a; 打開 VSCode。點擊左下角的齒輪圖標&#xff0c;然后選擇“設置”。或者通過菜單欄“文件” > “首選項” > “設置”進入。在頂部的搜索框中輸入“update”。找到“Update: Mode”…

Flutter - 應用啟動/路由管理

一、應用入口1. 初始化 Flutter 底層綁定 &#xff0c;運行 App。import package:flutter/material.dart; import package:flutter_base/Application.dart;void main() {// 確保綁定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init(); }2. 注冊…

MySQL 數據操作全流程:創建、讀取、更新與刪除實戰

MySQL系列 文章目錄MySQL系列前言一、Create(創建)并插入數據1.1 單行數據 全列插入1.2 多行數據 指定列插入1.3 插入沖突時同步更新1.4 沖突時替換二、Retireve讀取數據2.1 全列查詢2.2 查詢指定列2.3 查詢字段為表達式2.4 結果去重 DISTINCT2.5 where條件篩選2.6 order by語…

SQL約束:數據完整性的守護者

在SQL中&#xff0c;約束&#xff08;Constraints&#xff09; 是作用于數據庫表字段上的規則&#xff0c;用于強制保證數據的完整性、準確性和一致性。當插入、更新或刪除數據時&#xff0c;約束會自動驗證操作是否符合規則&#xff0c;若違反則拒絕執行。 以下是SQL中常見的約…

Springboot-vue 地圖展現

在很多社區管理系統中&#xff0c;地圖展示功能是一個重要的模塊&#xff0c;它能直觀地呈現小區的地理位置分布。本文將詳細梳理從前端觸發請求到地圖上展示小區數據的完整流程&#xff0c;幫助大家理解前后端協同工作的具體細節。一、前端觸發&#xff1a;頁面加載與地圖初始…

Vue 3 登錄組件

Login.vue 組件詳細分析整體架構 Vue 3 登錄組件&#xff0c;采用 Composition API Element Plus UI 庫&#xff0c;實現了完整的用戶認證界面。 模板結構分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小結: getSpringFactoriesInstances從 `spring.factories` 文件中加載和實例化指定類型的類

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一個核心方法&#xff0c;用于從 spring.factories 文件中加載和實例化指定類型的類。這是 Spring Boot 實現自動配置和插件化擴展的關鍵機制。 1. 基本功能 該方法的主要作用是…