zoukankan      html  css  js  c++  java
  • Linux之NFS

    NFS

    Network File System(NFS),即网络文件系统,是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

    RPC

    When an RPC service is started, it tells rpcbind the address at which it is listening, and the RPC program numbers it is prepared to serve. When a client wishes to make an RPC call to a given program number, it first contacts rpcbind on the server machine to determine the address where RPC requests should be sent.

    RPC服务在nfs共享时负责通知客户端,服务器的nfs端口号。简单理解rpc就是一个中介服务。

    服务器环境

    cat /etc/redhat-release
    

    服务器:CentOS7.8

    客户端:CentOS7.4

    服务器端

    安装服务

    yum install -y nfs-utils
    

    安装 NFS 服务器所需的软件包

    增加共享目录

    vi /etc/exports
    

    /dbbackup 222.222.221.0/24(rw,sync,fsid=0)

    rw表示可读写;sync表示同步写,fsid=0表示将/data找个目录包装成根目录。

    chmod 777 /dbbackup     #不要忘记赋予权限,不然执行不了
    

    其他参数说明

    ro:共享目录只读
    rw:共享目录可读可写
    all_squash:所有访问用户都映射为匿名用户或用户组
    no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
    root_squash(默认):将来访的root用户映射为匿名用户或用户组
    no_root_squash:来访的root用户保持root帐号权限
    secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
    insecure:允许客户端从大于1024的tcp/ip端口连接服务器
    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
    async:将数据先保存在内存缓冲区中,必要时才写入磁盘
    wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
    no_wdelay:若有写操作则立即执行,应与sync配合使用
    subtree_check :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
    no_subtree_check(默认) :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
    

    启动

    rpcbind和nfs设为开机启动:(必须先启动rpcbind服务)

    systemctl enable rpcbind.service
    systemctl enable nfs-server.service
    

    然后分别启动rpcbind和nfs服务

    systemctl start rpcbind.service 
    systemctl start nfs-server.service
    

    检查

    确认NFS服务器启动成功

    rpcinfo -p    #确认NFS服务器启动成功及端口情况
    exportfs -r   #使配置生效
    exportfs      #查看已共享目录
    exportfs -v   #查看已共享目录 -详细
    

    开启服务端口

    修改服务端口

    vi /etc/sysconfig/nfs    #修改nfs端口
    

    MOUNTD_PORT="4002"
    STATD_PORT="4003"
    LOCKD_TCPPORT="4004"
    LOCKD_UDPPORT="4004"

    开放端口

    #添加rpcinfo -p下的端口,除了上面配置的4002、4003、4004外,还有111和2049这两个端口的tcp和udp端口也要开放。
    firewall-cmd --zone=public --add-port=111/tcp --permanent
    firewall-cmd --zone=public --add-port=2049/tcp --permanent
    firewall-cmd --zone=public --add-port=111/udp --permanent
    firewall-cmd --zone=public --add-port=2049/udp --permanent
    firewall-cmd --zone=public --add-port=4002/tcp --permanent
    firewall-cmd --zone=public --add-port=4003/tcp --permanent
    firewall-cmd --zone=public --add-port=4004/tcp --permanent
    #重新载入
    firewall-cmd --reload
    #查看所有打开的端口
    firewall-cmd --zone=public --list-ports
    ## 重启两个服务
    systemctl restart rpcbind.service 
    systemctl restart nfs-server.service
    

    客户端

    安装NFS

    #安装nfs,但客户端只启动rpcbind就可以了
    yum install -y nfs-utils
    
    #开机启动rpcbind
    systemctl enable rpcbind.service
    
    #启动rpcbind服务
    systemctl start rpcbind.service
    
    

    注意:客户端不需要启动nfs服务,只需要启动rpcbind即可。

    检查服务器端端口

    rpcinfo -p 222.222.221.189     #服务器端ip
    

    如果服务器开启,显示的结果和服务器端执行的rpcinfo -p结果一致。若服务器端没有开启端口,会提示

    rpcinfo: can't contact portmapper: RPC: Remote system error - No route to host

    检查共享目录

    #检查 NFS 服务器端是否有目录共享:
    showmount -e nfs服务器的IP 
    

    如果提示 “clnt_create: RPC: Program not registered”,执行rpc.mountd 即可

    注意:需要把111和2049的udp端口开放才可以showmount,如果不开111和2049的UDP端口,showmount -e不通但是依然挂载,如下图。

    挂载共享文件夹到本地目录

    mkdir /nfs    #新建挂载点目录
    mount -t nfs 222.222.221.189:/dbbackup /nfs    #挂载222.222.221.189:/dbbackup共享目录到本地的/nfs
    

    开启自动挂载

    vi /etc/rc.local    #编辑自启配置文件,在文件最后加mount -t nfs 222.222.221.189:/dbbackup /nfs
    chmod 755 /etc/rc.local    #赋予自启权限
    

    这时操作客户端188的/nfs文件夹即挂载了189服务端的/dbbackup文件夹。

    取消挂载

    umount /nfs    #取消挂载
    

    当出现umount.nfs: /nfs: device is busy时

    fuser -m -v /nfs    #查看占用/nfs的进程
    kill -9 PID    #杀死进程ID
    

  • 相关阅读:
    Yii2中如何使用CodeCeption
    切换composer国内镜像 Laravel China停用,切换阿里云composer全量镜像
    mysql 不同库不同表字段数据复制
    DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)
    Winform在一个窗体获取其他窗体的值
    winform按钮和子按钮
    C#生成唯一的ID保存到数据库
    C#Winform从页面获取数据,传入数据库
    C#winform省市县联动,以及有的县是空值时显示异常的处理
    VS2010连接SQLite数据库
  • 原文地址:https://www.cnblogs.com/aeolian/p/13262057.html
Copyright © 2011-2022 走看看