NFS挂载

发布时间 2024-01-09 16:31:13作者: ishmaelwanglin

目录

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
    
  5. 启动服务

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

    确认rpc nfs服务启动成功
    rpcinfo -p
    
    exports配置是否生效
    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开启的端口所提供的程序有哪些。其中nfs的端口是2049,rpcbind的端口是111,其余则是rpc开启的。

showmount

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

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