搭建NFS服务器

搭建NFS服务器

记录linux下搭建使用NFS服务器的一般步骤,以ubuntu20.04centos7.9操作进行记录。

1. 安装 NFS 服务器

  1. 运行以下命令安装 NFS 服务器。

    # ubuntu下安装
    sudo apt-get update
    sudo apt install nfs-kernel-server
    # 配置服务
    sudo systemctl start nfs-kernel-server
    sudo systemctl enable --now nfs-kernel-server
    sudo systemctl status nfs-kernel-server# centos下载安装
    sudo yum -y update
    sudo yum install nfs-utils	# dnf安装类似
    # 服务为nfs-server或者nfs
    sudo systemctl start nfs-server.service
    sudo systemctl enable nfs-server.service
    sudo systemctl status nfs-server.service# 确认nfs版本,输出的第二列
    rpcinfo -p | grep nfs
    

说明:

可以在 /etc/nfs.conf 找到 NFS 守护进程的配置文件,还可以在 /etc/nfsmount.conf 找到挂载的配置文件。

需要注意的是,在标准的 NFS 配置中,主要的配置文件通常是 /etc/exports 用于 NFS 服务器的共享目录设置,而不是 /etc/nfs.conf。而客户端的配置通常涉及 /etc/fstab 或使用 mount 命令时指定选项,并没有一个专门的配置文件。

2. 创建并导出共享

NFS 客户端将在服务器机器上挂载一个目录,该目录有 NFS 服务器进行配置。

  1. 运行以下命令来指定挂载文件夹名称(例如,/mnt/nfs)。

    sudo mkdir -p /mnt/nfs
    
  2. 设置文件夹的权限。

    sudo chown -R nobody: /mnt/nfs
    sudo chmod -R 777 /mnt/nfs
    

说明:

如果是生产环境,建议按照最小权限进行设置,否则有安全隐患。

  1. 配置NFS共享

linux下nfs共享配置主要通过文件/etc/exports进行。配置语法:

[共享的目录1] [主机名1或IP地址1(参数1,参数2,...)] [主机名2或IP地址2(参数1,参数2,...)]

[共享的目录2] [主机名1或IP地址1(参数1,参数2,...)] [主机名2或IP地址2(参数3,参数4,...)]

编辑NFS的配置文件/etc/exports

sudo vi /etc/exports

将客户端信息添加到文件中:

[root@nfs ~]# cat /etc/exports
/mnt/nfs 10.210.0.0/16(rw,sync,no_all_squash,root_squash,no_subtree_check)

参数说明:

  • /mnt/nfs: 共享的目录路径。

  • 192.168.0.0/24: 设置可以访问的客户端网络;除了网段,也可以设置ip或者域名(client.test.com或者*.test.com),也可以用*允许所有客户端网络。

  • rw,sync,no_all_squash,root_squash,no_subtree_check:

    • rw:表示目录读写权限,如果是ro表示只读。
    • sync:数据写入磁盘模式。sync表示同步写入,数据会同步写入到内存和硬盘中,效率低,但可以保证数据一致性。相反 async为异步写入, 表示数据会先暂存于内存中,而非直接写入到硬盘中,效率高,但极端情况下无法保证数据一致性。
    • all_squash: 无论访表示将客户端请求中的所有用户 ID (UIDs) 和组 ID (GIDs) 映射为 NFS 服务器上相同的 UIDs 和 GIDs。
    • no_all_squash: 客户端请求中的用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组。
    • root_squash: 将客户端root用户的请求映射到一个匿名的用户 ID (UID)/组 ID (GID)。
    • no_root_squash:表示当客户机以root身份访问时赋予本地root权限,安全风险较大。
    • no_subtree_check:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
    • subtree_check:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限。
  1. 导出共享给客户端

使用exportfs命令加载exports配置:

sudo exportfs -arv

或者也可以重启 NFS 服务器:

# ubuntu
sudo systemctl restart nfs-kernel-server# centos
systemctl resstart nfs

查看export列表:

root@nfs:~# showmount -e localhost
Export list for localhost:
/mnt/nfs 10.210.0.0/16

3. 配置防火墙规则

# 1. ubuntu。
## 可以关闭防火墙
[root@nfs ~]# ufw disable
Firewall stopped and disabled on system startup
[root@nfs ~]# ufw status
Status: inactive## 或者ufw放行规则
sudo ufw allow nfs
sudo ufw allow portmapper
sudo ufw reload# 2. centos
## 关闭防火墙
systemctl stop firewalld;systemctl disable firewalld## 或者配置防火墙规则
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload

按照端口放行:

# nfs相关端口
[root@nfs ~]# rpcinfo -p localhostprogram vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper100000    4   udp    111  portmapper100000    3   udp    111  portmapper100000    2   udp    111  portmapper100005    1   udp  20048  mountd100005    1   tcp  20048  mountd100005    2   udp  20048  mountd100024    1   udp  48719  status100024    1   tcp  37476  status100005    2   tcp  20048  mountd100005    3   udp  20048  mountd100005    3   tcp  20048  mountd100003    3   tcp   2049  nfs100003    4   tcp   2049  nfs100227    3   tcp   2049  nfs_acl100003    3   udp   2049  nfs100003    4   udp   2049  nfs100227    3   udp   2049  nfs_acl100021    1   udp  53709  nlockmgr100021    3   udp  53709  nlockmgr100021    4   udp  53709  nlockmgr100021    1   tcp  37318  nlockmgr100021    3   tcp  37318  nlockmgr100021    4   tcp  37318  nlockmgr

nfs除了固定的port111、2049外,还有其他服务如rpc.mounted等开启的不固定的端口,如果按照端口配置对防火墙来说就比较麻烦。为了解决这个问题,我们可以设置NFS服务的端口配置文件/etc/sysconfig/nfs,将下列内容的注释去掉,如果没有则添加:

RQUOTAD_PORT=1001
LOCKD_TCPPORT=30001
LOCKD_UDPPORT=30002
MOUNTD_PORT=1002

保存后,将端口加入防护墙放行:

# ufw
sudo ufw allow proto tcp from any to any port 111
sudo ufw allow proto udp from any to any port 111
sudo ufw allow proto tcp from any to any port 2049
sudo ufw allow proto udp from any to any port 2049
sudo ufw reload# firewalld
firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp --add-port=1001/tcp --add-port=1001/udp --add-port=1002/tcp --add-port=1002/udp --add-port=30001/tcp --add-port=30002/udp --permanent
firewall-cmd --reload

4. 客户端挂载验证

nfs挂载需要安装nfs客户端:

# ubuntu
sudo apt-get install nfs-common# centos
yum -y install nfs-utils	# dnf安装类似

执行挂载命令:

# 查看nfs共享的目录
[root@client ~]# showmount -e 10.210.10.209
Export list for 10.210.10.209:
/mnt/nfs 10.210.0.0/16# 挂载命令如下
mount -t nfs <nfs-server-ip>:/exports-dir /local-dir[root@client:~]# mkdir -p /mnt/nfs
# -t配置fs类型,设置nfs或者nfs4
[root@client:~]# mount -t nfs 10.210.10.209:/mnt/nfs /mnt/nfs	
[root@client ~]# sudo mount | grep -i nfs
10.210.10.209:/mnt/nfs on /mnt/nfs type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.210.10.220,local_lock=none,addr=10.210.10.209)# 测试读写
[root@client ~]# cd /mnt/nfs
[root@dns nfs]# echo aaa > test.txt
[root@dns nfs]# cat test.txt
aaa

配置重启系统自动挂载:

[root@client ~]# cat /etc/fstab
...
10.210.10.209:/mnt/nfs /mnt/nfs nfs defaults,_netdev 0 0
[root@client ~]# mount -a

说明:

  1. 参数_netdev表示延迟加载,等待网络服务启动后再挂载。

5. 相关命令

# 查看nfs版本及统计数据
nfsstat -s	# 服务器端使用
nfsstat -c	# 客户端使用

6. 相关资料

  1. How to configure NFS on Linux - Linux Tutorials - Learn Linux Configuration
  2. Learning NFS through server and client configuration | Enable Sysadmin (redhat.com)、
  3. 第 4 章 挂载 NFS 共享 | Red Hat Product Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第 13 章 JavaScript基本包装类型

第 13 章 JavaScript基本包装类型 1.基本包装类型概述 2.Boolean 类型 3.Number 类型 4.String 类型 为了便于操作基本类型值&#xff0c;ECMAScript 提供了 3 个特殊的引用类型&#xff1a;Boolean、Number和 String。这些类型与其他引用类型相似&#xff0c;但同时也具有…

EehCache介绍、应用场景和示例代码

EhCache 概述 EhCache 是一个高性能、轻量级的 Java 缓存库&#xff0c;广泛应用于各种 Java 应用中。EhCache 提供了丰富的功能&#xff0c;包括内存缓存、磁盘缓存、分布式缓存、持久化等&#xff0c;并且可以和 Spring 框架无缝集成。它支持基于内存和磁盘的混合存储&#…

除了按值和引用,方法参数的第三种传递方式

一、官方描述 三种参数传递方式并非我们杜撰出来的&#xff0c;而是写在.NET最核心的规范文档ECMA-355中&#xff08;I.12.4.1.5&#xff09;&#xff0c;原文如下&#xff1a; The CLI supports three kinds of parameter passing, all indicated in metadata as part of the …

WPS宏实现一个表格拆分成多个表格的功能

把首列名称中一样的分别创建该名称时间戳的新表格&#xff0c;比如有个表格存储各个省的信息&#xff0c;江苏的有50行数据&#xff0c;山西的55行数据等等&#xff0c;这个就是把江苏的创建一个新表保存&#xff0c;山西的创建一个新表格保存。里面主要是表格的创建与关闭相关…

Nginx 优化与防盗链

文章目录 Nginx 优化与防盗链一、隐藏版本号1.1 修改配置文件方式1.1.1 操作步骤 1.2 修改源码方式1.2.1 操作步骤 二、修改用户与组2.1 操作步骤 三、缓存时间3.1 操作步骤 四、日志切割4.1 操作步骤 五、连接超时5.1 操作步骤 六、更改进程数6.1 操作步骤 七、配置网页压缩7.…

【论文分享】Graviton: Trusted Execution Environments on GPUs 2018’OSDI

目录 AbstractIntroductioncontributions BackgroundGPUSoftware stackHardwareContext and channel managementCommand submissionProgramming modelInitializationMemory allocationHost-GPU transfersKernel dispatch Sharing Intel SGX Threat ModelOverviewGraviton Archi…

CLIP-VIT-L + Qwen 多模态源码阅读 - 语言模型篇(3)

多模态学习笔记 - 语言模型篇&#xff08;3&#xff09; 参考repo:WatchTower-Liu/VLM-learning; url: VLLM-BASE 吐槽 今天接着昨天的源码继续看&#xff0c;黑神话&#xff1a;悟空正好今天发售&#xff0c;希望广大coder能玩的开心~ 学习心得 前情提要 详情请看多模态…

设计模式笔记01(java版)

文章目录 设计模式概述学习设计模式的必要性设计模式分类创建型模式结构型模式行为型模式 UML类图概述类图的作用类图表示法类的表示方式类与类之间关系的表示方式1&#xff0c;单向关联2&#xff0c;双向关联3&#xff0c;自关联聚合关系组合关系依赖关系继承关系实现关系 软件…

Pytorch 张量运算函数(补充)

mean() mean()函数是进行张量均值计算的函数,常用参数可以设置参数dim来进行对应维度的均值计算 以下是使用一个二维张量进行演示的例子 import numpy as np import torch device torch.device(mps if torch.backends.mps.is_available() else cpu) print(device ) data1 …

C++ | Leetcode C++题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPerfectSquare(int num) {double x0 num;while (true) {double x1 (x0 num / x0) / 2;if (x0 - x1 < 1e-6) {break;}x0 x1;}int x (int) x0;return x * x num;} };

linux系统,ubuntu安装英伟达NVIDIA4090显卡驱动

文章目录 前言下载英伟达NVIDIA官方驱动安装NVIDIA驱动远程安装关闭交互界面设置权限&#xff08;自己确认版本号5&#xff09;安装&#xff08;自己确认版本号5&#xff09;打开交互界面&#xff0c;并重启系统验证是否安装成功 异常处理问题1问题2问题3&#xff08;可能没解决…

Linux 支持程序在运行时动态加载和卸载共享库,动态链接库

动态链接库 Linux支持动态链接库&#xff08;共享库&#xff09;的概念&#xff0c;允许程序在运行时动态加载和卸载共享库。这有助于减小可执行文件的大小&#xff0c;共享代码&#xff0c;提高代码的可重用性。 #include <dlfcn.h> #include <iostream>int mai…

python小游戏——躲避球(可当课设)

游戏简介&#xff1a; 没有美术&#xff0c;画面简洁&#xff08;懒得做&#xff09;。玩家控制小球躲避敌人&#xff08;上下左右&#xff0c;闪避&#xff09;&#xff0c;敌人体积越大速度越慢&#xff0c;随机生成道具球&#xff08;目前只有生命球&#xff09;&#xff0…

day_49

42. 接雨水 class Solution:def trap(self, height: List[int]) -> int:stack []res 0for i in range(len(height)):while(stack and height[i] > height[stack[-1]]):mid stack.pop()if stack:h min(height[i], height[stack[-1]]) - height[mid]w i - stack[-1] …

​14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Redis内存淘汰

Redis内存淘汰 Redis可以存储多少数据 maxmemory配置&#xff0c;默认是注释掉的。 #maxmemory <bytes>我们可以主动配置maxmemory&#xff0c;maxmemory支持各种单位&#xff0c;默认是字节 maxmemory 1024 maxmemory 1024KB maxmemory 1024MB maxmemory 1024GB当Re…

跟着GPT学习 Kubernetes ,简称 K8s -- Kind(三)

在 Mac M1 上使用 Kind&#xff08;Kubernetes in Docker&#xff09;学习 Kubernetes 是一个非常合适的选择&#xff0c;因为 Kind 可以在本地轻松地创建一个 Kubernetes 集群&#xff0c;适合进行开发、测试和学习。让我们一步一步地从头开始&#xff0c;设置你的环境并逐步学…

shallowReactive 与 shallowRef

除了之前的 ref与reactive 之外&#xff0c;Vue3 还准备了另外两个API&#xff0c;也是用来对响应式数据做处理&#xff0c;那就是 shallowReactive 与 shallowRef shallowReactive 文档解释&#xff1a;reactive() 的浅层作用形式&#xff0c;只能定义对象类型的数据。和 r…

Spring Boot整合Sentry

Spring Boot整合Sentry Sentry搭建Sentry中新建项目集成SpringBoot1. 添加依赖2. 配置Sentry4. 日志集成&#xff08;可选&#xff09;5. 测试Sentry集成6. 配置实时告警配置Alert Settings配置警报规则 发送消息服务代码参照文档 Sentry 是一个日志平台&#xff0c;分为客户端…

AI 未来两年:史无前例的变革与挑战

2024 年 8 月 20 日&#xff0c;正站在科技变革的风暴中心&#xff0c;见证着人工智能&#xff08;AI&#xff09;以惊人的速度重塑着世界。谷歌前 CEO Eric Schmidt 对 AI 未来两年的预测&#xff0c;引起了广泛关注&#xff0c;如今 YC 的 CEO Garry Tan 也高度赞同这些观点&…