zoukankan      html  css  js  c++  java
  • 文件挂载(一) Linux挂载Linux文件夹

    一、概述

    工作中经常会出现不同服务器、不同操作系统之间文件夹互相挂载的情形,例如文件服务器或数据备份服务器。
    挂载一般来说就是以下四种类型:
    同类型操作系统
    a. linux挂载linux文件夹
    b. windows挂载windows文件夹
    不同类型操作系统
    c. linux挂载windows文件夹
    d. windows挂载linux文件夹

    linux挂载linux文件夹采用nfs(Network File System),本文将介绍此种类型。

    二、搭建

    实验的环境 两台Linux:CentOS7.3
    Server端:192.168.56.77 文件实际存放的服务器
    Client端:192.168.56.88 挂载的服务器,即将server端的共享文件夹挂载到client端

    两端都安装nfs服务

    # yum install -y nfs-utils
    

    【Server端】
    关闭防火墙以及Selinux

    # systemctl stop firewalld
    # systemctl disable firewalld
    # sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    

    创建共享目录

    # mkdir /opt/test  
    # chmod 777 /opt/test  
    

    修改nfs配置

    # vi /etc/exports
    /opt/test 192.168.56.88(rw,all_squash,anonuid=1001,anongid=1002,async)  # anonuid和anongid表示所有在Client端创建的文件,最后的所属用户和组为1001、1002,而不是匿名用户nfsnobody。
    

    启动nfs服务

    # service nfs start
    

    【Client端】
    创建挂载目录,并挂载远程文件夹

    # mkdir /u01  
    # mount -t nfs 192.168.56.77:/opt/test /u01
    

    查看该目录的使用情况

    # df -h /u01
    Filesystem               Size  Used Avail Use% Mounted on
    192.168.56.77:/opt/test   25G   16G  8.1G  66% /u01
    

    创建文件,可以看到文件的所属用户和所属组分别为1001、1002,这个其实就是对应的server端/etc/exports设置

    # touch abc
    # ll
    -rw-r--r--. 1 1001 1002 0 Dec 22 05:41 abc
    

    如果想让系统自动挂载,可以设置crontab开机挂载,但不建议加到/etc/fstab中,因为如果server端的nfs有问题,client端的服务器重启将会启动很长时间。

    配置文件/etc/exports注意事项

    1. 192.168.56.88(rw...)表示只共享给192.168.56.88这个ip,还可以写成192.168.56.*表示共享给这个网段,写成*(rw...)表示共享给所有网段。
    2. 如果配置文件/etc/exports中没有anonuid和anongid,新建的文件,用户和组将会变成nfsnobody,具体all_squash这个参数的解释,请看文章的后面的内容。

    三、问题汇总

    问题1:server端nfs服务关闭,导致client端无法访问共享目录

    【Server端】
    关闭nfs服务

    # service nfs stop
    

    【Client端】
    执行ls /卡死,df也卡死,即所有涉及到/u01的操作都会卡死。执行以下命令查看所有nfs挂载

    # mount -l |grep nfs
    192.168.56.77:/opt/test on /u01 type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.56.88,local_lock=none,addr=192.168.56.77)
    

    同时查看操作系统后台日志/var/log/message,可以定位到是192.168.56.77这台服务器的nfs出了故障。重新启动server端的nfs服务,client端等待一段时间就可正常操作了。

    Dec 30 05:01:42 localhost kernel: nfs: server 192.168.56.77 not responding, still trying
    

    如果因为nfs服务的问题导致执行命令一直卡死,这不太友好。因为nfs在挂载的时候,默认采用的硬挂载的方式,如果采用软挂载的方式,执行命令超时前端会有报错提示,而不是一直堵塞。
    测试:
    重新启动server端的nfs服务service nfs start
    client重新挂载mount -t nfs -o soft,timeo=10,retry=2 192.168.56.77:/opt/test /u01
    关闭Server端的nfs服务service nfs stop

    client端执行命令不会一直堵塞,而是会报错误。

    # df -h
    df: ‘/u01’: Input/output error
    Filesystem             Size  Used Avail Use% Mounted on
    /dev/mapper/vg-lvroot   25G  1.2G   23G   6% /
    devtmpfs               910M     0  910M   0% /dev
    tmpfs                  920M     0  920M   0% /dev/shm
    tmpfs                  920M  8.4M  912M   1% /run
    tmpfs                  920M     0  920M   0% /sys/fs/cgroup
    /dev/sda1              988M  110M  812M  12% /boot
    tmpfs                  184M     0  184M   0% /run/user/0
    

    问题2:权限问题

    在配置文件/etc/exports中
    all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody),除非在配置中有指定uid和gid
    no_all_squash:不将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,即使用文件创建者本身的uid和gid号(默认设置)
    root_squash:将root用户及所属组映射为匿名用户或用户组(默认设置)
    no_root_squash:不将root用户及所属组映射为匿名用户或用户组

    这里面不同的参数设置,都会对文件的权限产生影响,你有时会发现即使是root用户也没有权限去删除文件的时候,就可以看看这些参数,是否是将root权限映射成了匿名用户。基于篇幅,这里就不做演示了。

    [root@localhost /u01]# rm -rf yangdir/yangsub 
    rm: cannot remove ‘yangdir/yangsub’: Permission denied
    

    问题3:nfs端口问题

    上面我们搭建nfs的时候,直接关闭了server端的防火墙,但是如果防火墙打开,是否还能正常挂载呢,如果不行,那又需要开通什么端口呢?
    server端打开防火墙

    # systemctl start firewalld
    

    client端挂载,命令会一直卡死。

    # mount -t nfs 192.168.56.77:/opt/test /u01
    

    server端开通端口2049
    开端口命令:firewall-cmd --zone=public --add-port=2049/tcp --permanent
    重启防火墙:systemctl restart firewalld
    查看开通端口:firewall-cmd --list-ports

    PS:看到有的文章中写还需要开通111端口,但是实际测试下来,只开通2049端口就可以正常挂载了。

    四、总结

    1. nfs挂载可以采用软挂载的方式
    2. nfs文件权限可以通过/etc/exports设置
    3. nfs端口为2049
  • 相关阅读:
    GSON -JSON 反序列化-多节点名称支持
    Jedis 分片原理
    闭锁-CountDownLatch
    XML序列化及反序列化
    用GIT操作SVN
    报表worker-CPU使用率过高原因排查
    二.PlantUML 之活动图
    一.PlantUML 与 IDEA 集成
    ArrayList
    VI常用命令
  • 原文地址:https://www.cnblogs.com/ddzj01/p/15751891.html
Copyright © 2011-2022 走看看