搭建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 localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100024    1   udp  48719  status
    100024    1   tcp  37476  status
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  53709  nlockmgr
    100021    3   udp  53709  nlockmgr
    100021    4   udp  53709  nlockmgr
    100021    1   tcp  37318  nlockmgr
    100021    3   tcp  37318  nlockmgr
    100021    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
  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建NFS服务器的步骤如下: 1. 安装nfs-utils软件包。在Linux系统中,NFS服务器需要安装nfs-utils软件包才能正常运行。如果你使用的是Debian或Ubuntu等基于Debian的发行版,可以使用以下命令安装: ``` sudo apt-get install nfs-kernel-server ``` 如果你使用的是CentOS或RHEL等基于Red Hat的发行版,可以使用以下命令安装: ``` sudo yum install nfs-utils ``` 2. 创建共享目录。在NFS服务器上创建一个共享目录,并为它设置读写权限。 3. 配置exports文件。exports文件用于指定NFS服务器共享的目录和客户端可以访问这些目录的权限。打开/etc/exports文件,并添加以下内容: ``` /path/to/shared/directory client_ip(rw,sync,no_root_squash,no_subtree_check) ``` 其中,/path/to/shared/directory是你在第二步中创建的共享目录路径,client_ip是允许访问该目录的客户端IP地址,rw表示读写权限,sync表示同步写入,no_root_squash表示允许root用户访问该目录,no_subtree_check表示关闭子树检查。 4. 启动NFS服务器。启动NFS服务器并重新加载exports文件: ``` sudo systemctl start nfs-kernel-server sudo exportfs -a ``` 5. 配置NFS客户端。在客户端上安装nfs-common软件包,并通过mount命令挂载NFS共享目录: ``` sudo apt-get install nfs-common # Debian/Ubuntu sudo yum install nfs-utils # CentOS/RHEL sudo mount server_ip:/path/to/shared/directory /local/mount/point ``` 其中,server_ip是NFS服务器的IP地址,/path/to/shared/directory是共享目录路径,/local/mount/point是本地挂载点路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值