zoukankan      html  css  js  c++  java
  • 网络文件系统(NFS)

    读储成友(民工哥)所著《Linux系统运维指南》NFS服务部分所做的笔记

    一、网络文件系统(NFS)

    通过网络不同主机之间共享文件或目录,使访问者如同访问本地计算机上的文件一样访问网络上的文件。

    NFS有服务端和客户端

    • 服务端是共享目录端
    • 客户端通过挂载方式将服务端共享的文件挂载到客户端本地系统指定目录下。

    NFS通过RPC服务来实现文件或目录的共享

    • NFS服务启动时会随机启动数个端口,且主动向RPC服务来注册端口信息。
    • RPC服务记录NFS每个功能对应的端口号,并将信息传递给请求数据的NFS客户端,以此实现完整的数据传输过程。
    • RPC服务使用固定端口111来监听NFS客户端发出的请求动作,将正确的NFS端口传递给NFS客户端,以此实现客户端与服务端之间的通信与数据创传输。

    二、NFS的安装和部署

    1. 服务端安装与部署

    yum install nfs-utils rpcbind -y
    

    注意:服务端启动顺序为先启动RPC服务,后启动NFS服务。

    # 启动服务
    systemctl start rpcbind.service
    systemctl start nfs.service
    
    # 设置开机自启动
    systemctl enable rpcbind.service
    systemctl enable nfs.service
    

    创建挂载目录及文件

    # 创建一个目录/nfs/test,并在此目录下创建一个文件/nfs/test/test.txt
    mkdir /nfs/test/ -p
    touch /nfs/test/test.txt
    

    配置NFS的exports文件 vim /etc/exports

    #config start
    /nfs/test/ 192.168.x.0/24(rw,sync)
    #end
    
    参数 说明
    ro 目录可读
    rw 目录可读写
    sync 将数据同步写入内存缓冲区与磁盘中
    async 将数据先写入内存缓冲区,,有必要时才写入磁盘
    all_squash 将远程访问用户及组全映射成默认用户或用户组nfsnobody
    no_all_squash 与all_suash配置相反
    root_squash 将root用户及所属组映射成默认用户或用户组
    no_root_squash 与root_squash配置相反
    anonuid=xxx 将远程访问用户映射成指定用户ID的用户
    anongid=xxx 将远程访问用户组映射成指定用户组ID的用户组

    重新加载NFS服务配置文件

    exportfs -rv
    

    exportfs参数说明

    参数 说明
    -r 重新加载并刷新共享配置
    -v 显示确认共享配置
    -a 将配置文件/etc/exportfs中的所有共享配置发布
    -u 不发布配置的共享

    查看NFS服务器挂载情况

    [root@NFS-SERVER ~]# showmount -e localhost
    Export list for localhost:
    /nfs/Charramma 192.168.1.0/24
    [root@NFS-SERVER ~]# 
    

    2. NFS客户端的部署

    挂载前要注意服务端的防火墙

    # 安装NFS与RPC
    yum install nfs-utils rpcbind -y
    
    # 启动服务
    systemctl start rpcbind.service
    
    # 查看挂载情况 注意NFS服务端的防火墙
    showmount -e [NFS服务端ip地址]
    
    # 挂载共享目录
    mkdir /nfsclient
    mount -t nfs 192.168.1.254:/nfs/test /nfsclient/
    # 其他用户对挂载目录具有可读与可执行权限
    
    # 查看是否挂载成功
    df -mh
    

    挂载共享目录时报错

    mount.nfs: access denied by server while mounting 192.168.1.202:/nfs/test

    管理主机上查看日志cat /var/log/messages | grep mount,主要报错信息如下

    Dec  8 15:43:35 localhost rpc.mountd[1774]: refused mount request from 192.168.1.203 for /nfs/test (/nfs/test): unmatched host
    Dec  8 15:44:00 localhost rpc.mountd[1774]: refused mount request from 192.168.1.204 for /nfs/test (/nfs/test): unmatched host
    

    三、客户端安全配置

    客户端无写入权限

    [root@NFS-CLIENT nfsclient]# touch file
    touch: cannot touch ‘file’: Permission denied
    

    服务端使用nfsnobody用户访问共享目录

    [root@NFS-SERVER ~]# cat /var/lib/nfs/etab 
    /nfs/data	192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
    [root@NFS-SERVER ~]# cat /etc/passwd | grep 65534
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    

    使用默认的nfsnobody用户访问共享目录并不安全

    nfs安全配置

    服务端配置

    # 添加自定义且指定用户uid并禁止登陆
    [root@NFS-SERVER ~]# useradd -s /sbin/nologin -M -u 9090 nfsuser
    
    # 修改nfs配置
    [root@NFS-SERVER ~]# cat /etc/exports
    # config start
    /nfs/test/ 192.168.x.0/24(rw,sync,all_squash,anonuid=9090,anongid=9090)
    # end
    
    # 重新加载NFS服务配置文件
    [root@NFS-SERVER ~]# exportfs -rv
    
    # 修改共享目录权限
    [root@NFS-SERVER ~]# chown -R nfsuser.nfsuser /nfs/test/
    [root@NFS-SERVER ~]# ls -ld /nfs/test/
    drwxr-xr-x. 2 nfsuser nfsuser 23 Jan  4 20:53 /nfs/test/
    [root@NFS-SERVER ~]# ls -l /nfs/test/
    total 4
    -rw-r--r--. 1 nfsuser nfsuser 6 Jan  4 20:53 hello.txt
    

    客户端配置

    # 添加与服务端相同的用户
    [root@NFS-CLIENT ~]# useradd -s /sbin/nologin -M -u 9090 nfsuser
    

    写入测试,可以成功写入

    [root@NFS-CLIENT nfsclient]# ls
    hello.txt
    
    [root@NFS-CLIENT nfsclient]# touch file
    
    [root@NFS-CLIENT nfsclient]# ls
    file hello.txt
    

    四、nfs挂载优化

    无优化情况下文件写入速度

    [root@NFS-CLIENT ~]# time dd if=/dev/zero of=/nfsclient/test-file bs=100k count=1000
    1000+0 records in
    1000+0 records out
    102400000 bytes (102 MB) copied, 3.81355 s, 26.9 MB/s
    
    real	0m3.835s
    user	0m0.000s
    sys	0m2.569s
    

    dd 数据备份

    if 源

    of 目的

    bs 块大小

    count 块数量

    优化后的文件写入速度

    # 卸载原来的挂载
    [root@NFS-CLIENT ~]# umount -t nfs -t 192.168.1.254:/nfs/test /nfsclient/
    
    # 重新挂载
    [root@NFS-CLIENT ~]# mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.1.121:/nfs/data/ /nfs/data/
    
    # 写入
    [root@NFS-CLIENT ~]# time dd if=/dev/zero of=/nfsclient/test-file bs=100k count=1000
    1000+0 records in
    1000+0 records out
    102400000 bytes (102 MB) copied, 0.474688 s, 216 MB/s
    
    real	0m0.477s
    user	0m0.000s
    sys	0m0.042s
    

    挂载参数

    • rsizewsize

      写和读缓存,不同版本最大值不同

      版本
      NFSv2 rsize=8192 wsize=8192
      NFSv3 rsize=32768 wsize=32768
      NFSv4 rsize=65536 wsize=65536
    • noauto 不自动挂载文件系统

    • noexec 不允许安装可执行的二进制文件

    • nosuid 不允许配置用户标识或组标识

    • nodev 不解释字符或文件块等特殊设备

    • noatime 不更新文件的时间戳

    • nodiratime 不更新目录的时间戳

  • 相关阅读:
    学生3D作品---李自立---熊猫(Blender 2.8)
    学生3D作品---李自立---台式电脑加椅子(Blender 2.8)
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 2]
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 1]
    Binder transactions in the bowels of the Linux Kernel
    操作系统原理——实验——作业命名格式
    Linux 引入自动化测试平台 KernelCI
    进程可创建的最大连接数
    Docker—PaaS—微服务
    3D学院人才培养的金字塔模型-张同光-20190924---发言稿
  • 原文地址:https://www.cnblogs.com/CharrammaBlog/p/14237101.html
Copyright © 2011-2022 走看看