NFS挂载

目录

Server

部署步骤

  1. 安装nfs包

    yum install -y nfs-utils
    

    只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。

  2. 创建一个nfs共享目录,并添加other write权限

    chmod o+w /data
    
  3. 添加export的范围,即lclient的ip段和连接目录

    vim /etc/exports
    /data/     192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)
    
    • /data: 共享目录位置。

    • 192.168.0.0/24: 客户端 IP 范围,* 代表所有,即没有限制。

    • rw: 权限设置,可读可写。

    • sync: 同步共享目录。

    • no_root_squash: 可以使用 root 授权。

    • no_all_squash: 可以使用普通用户授权。


    访问权限选项:
    
    ro: 设置共享目录为只读的权限
    
    rw: 设置共享目录为可读写的权限
    
    用户映射选项:
    
    all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,相当于使用nobody用户访问该共享目录(此参数为默认设置);
    
    no_all_squash:与all_squash相反;
    
    root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
    
    no_root_squash:与rootsquash相反,即以root身份访问;
    
    anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
    
    anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)。
    
    其它选项:
    
    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
    
    async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
    
    wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
    
    no_wdelay:若有写操作则立即执行,应与sync配合使用;
    
    secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
    
    insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
    
    subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
    
    no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
    
  4. 防火墙规则

    firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs}
     firewall-cmd --reload
    

    NFS服务的默认端口是2049, tcp和udp的2049和111(rpcbind)都必须打开

    还需要为showmount命令打开tcp和udp的2048端口,以便能从服务器上的rpc.mounted查询到NFS共享目录。

  5. 启动服务

    systemctl start rpcbind
    systemctl start nfs-server
    
  6. 检查nfs服务,共享路径是否正常

    确认rpc nfs服务启动成功
    rpcinfo -p
    
    exportfs配置是否生效
    exportfs -rav
    
    /data	192.168.248.0/24
    
    showmount -e localhost
    
    
    

过程采坑

Aug 13 14:23:13 hb1-bjmy1-uca-k8s-ansible rpc.mountd[3157]: refused mount request from 10.97.1.134 for /data (/data): unmatched host

检查/etc/exports,原来写的地址不是client的cidr段,于是修改,后能挂载了

[root@hb1-bjmy1-uca-k8s-ansible ~]# cat /etc/exports
/data   10.97.1.0/24(rw,sync,no_root_squash)
当server需要提供多个共享目录时,系统提示需要fsid参数的配置,

NFS导出中有重复的fsid =值。fsid =值必须唯一。
export :fsid = num | root | uuid
对于NFSv4,有一个独特的文件系统,它是所有导出文件系统的根。这是用fsid = root或fsid = 0指定的,这两者意义相同。

也就是说:

如果要导出为nfsv4版本的挂载目录,则需设置fsid=0, 客户端挂载的方式必须是

mount.nfs4 server_ip:/ /local/path

需要使用server地址加根目录的方式,每个server只能有一个fsid=0的路径设置,其他的每个路径的fsid需要大于0,并且不能重复。
在nfs3的情况下,多目录挂载,采用uuid作为fsid比较合理

Client

showmount -e server_ip

  • nfs3: mount -t nfs -o noatime server_ip:/path /本地路径
  • nfs4: mount -t nfs -o ver4 server_ip:/ /本地路径

两者的区别

简单说nfs3采用了UDP协议,nfs4采用了TCP协议

相关命令

exportfs

如果启动NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

#  exportfs  [-aruv]

  -a 全部挂载或卸载 /etc/exports中的内容

  -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab

  -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

  -v 在export的时候,将详细的信息输出到屏幕上

例:

#  exportfs  -au        --卸载所有共享目录

#  exportfs  -rv         --重新共享所有目录并输出详细信息

nfsstat

用于查看列出NFS的运行状态。

rpcinfo

查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p可以查看出rpc开启的端口所提供的程序有哪些。

   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  44027  mountd
    100005    1   tcp  42845  mountd
    100005    2   udp  34296  mountd
    100005    2   tcp  48041  mountd
    100005    3   udp  52676  mountd
    100005    3   tcp  52881  mountd
    100003    3   tcp   2049  nfs
    100227    3   tcp   2049
    100003    3   udp   2049  nfs
    100227    3   udp   2049
    100021    1   udp  47756  nlockmgr
    100021    3   udp  47756  nlockmgr
    100021    4   udp  47756  nlockmgr
    100021    1   tcp  46851  nlockmgr
    100021    3   tcp  46851  nlockmgr
    100021    4   tcp  46851  nlockmgr

其中nfs的端口是2049,rpcbind的端口是111,mountd和nlockmgr 对应的端口是随机分配的。

showmount

  • -a 显示已经于客户端连接上的目录信息

  • -e IP或者hostname 显示此IP地址共享的目录

配置(ubuntu)

mountd、nlockmgr、和status服务默认情况下是随机分配端口的。

修改rpcbind端口

配置文件:

(centos)/etc/sysconfig/rpcbind

(ubuntu)/etc/default/rpcbind

修改字段的值

OPTIONS="-p 端口号"

配置status服务端口为40000

修改/etc/default/nfs-common文件:

STATDOPTS="--port 40000"

配置mountd服务端口为30003

修改/etc/default/nfs-kernel-server文件:

RPCMOUNTDOPTS="--manage-gids --port 30003"

配置nlockmgr端口为30006

创建/etc/modprobe.d/options.conf文件,添加如下内容,:

options lockd nlm_udpport=30006 nlm_tcpport=30006

在/etc/modules文件中添加lockd:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
lockd

ufw放开端口

sudo ufw allow from 192.168.33.0/24 to any port nfs
或者
sudo ufw  allow  111...
posted @ 2024-01-09 16:27  ishmaelwanglin  阅读(286)  评论(0编辑  收藏  举报