一、概述

工作中经常会出现不同服务器、不同操作系统之间文件夹互相挂载的情形,例如文件服务器或数据备份服务器。

挂载一般来说就是以下四种类型:

同类型操作系统

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

文件挂载(一)- Linux挂载Linux文件夹的更多相关文章

  1. VMware,win7与linux centos6.4文件互传,linux下挂载windows共享文件夹,vmware tools安装方法

    本方法是以win7,VMware9.0.1 ,centos6.4为基础实验的. 对于linux的初级使用阶段,都会Windows中使用linux虚拟机VMWare或者其它的.在Windows与linu ...

  2. linux挂载文件

    Linux挂载Winodws共享文件夹 mount -t cifs -o username=***,password=*** //192.168.1.48/share /mnt 其中-t表示要挂载的类 ...

  3. Linux磁盘及文件系统管理 4---- Linux文件系统挂载管理

    1 挂载操作 1 磁盘或者分区需要创建好文件系统后,需要挂载到一个目录才能够使用 2 windows或者是Mac会自动的挂载文件系统,一旦创建好文件系统后会自动的挂载 3 对于Linux来说我们必须要 ...

  4. linux磁盘管理 文件挂载

    文件挂载的概念 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"到根文件系统上的某个系统来实现,此关联操作即为"挂载",此目录即为"挂载点& ...

  5. linux挂载iso,u盘,分区,squashfs压缩文件

    常见分区加载方法: mount挂载iso文件: #mkdir /mnt/iso1 #mount –o loop linuxsetup.iso /mnt/iso1 在linux 不需要虚拟光驱,就可以直 ...

  6. linux文件系统命令和分区 挂载

    文件系统命令df [选项][挂载点]选项:-a 显示所有的文件系统信息,包括特殊文件,如/proc,/sysfs-h 使用习惯单位显示容量,如KB,MB或GB等-T 显示文件系统类型-m 以MB为单位 ...

  7. Linux文件系统管理 开机自动挂载及fstab文件修复

    概述 开机自动挂载及fstab文件修复 开机自动挂载 实现开机后自动挂载,就需要修改系统的自动挂载文件 /etc/fstab.因为系统就是依赖这个文件决定启动时加载的文件系统的.通过vi 打开/etc ...

  8. Linux下一些文件夹的含义

    在 Linux系统里面,"分区",被称作"挂载点",简单明了的说,"挂载点"意思就是:把一部分硬盘容量,"分"成一个文件 ...

  9. linux下各文件夹的结构说明及用途介绍

    linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件.   /etc:系统管理和配置文件.   /etc/rc.d:启动的配 置文件和脚本.   /ho ...

随机推荐

  1. for no other reason than because

    在狄更斯的<A Child History of England>中有段话: After some disputing among the priests, who said that a ...

  2. 25. Linux下gdb调试

    1.什么是core文件?有问题的程序运行后,产生"段错误 (核心已转储)"时生成的具有堆栈信息和调试信息的文件. 编译时需要加 -g 选项使程序生成调试信息: gcc -g cor ...

  3. RestTemplate的exchange()方法,解决put和delete请求拿不到返回值的问题

    嗷嗷待哺的controller(被调用provider的controller方法) //测试get少量参数 @RequestMapping(value = "detailsGetD" ...

  4. ssm-book 整合案例

    一:环境及要求 环境: IDEA最新版 MySQL 5.7.19  Tomcat 9  Maven 3.6     要求: 需要掌握 MyBatis:Spring:SpringMVC:MySQL数据库 ...

  5. 【Spring Framework】Spring 入门教程(一)控制反转和依赖注入

    参考资料 Spring 教程 说在前面 什么样的架构,我们认为是一个优秀的架构? 判断准则:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:在不断添加新的代码的同时,可以不修改原有代码,即符合 ...

  6. 【Linux】【Services】【Package】编译安装

    程序包编译安装:         testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装:         ...

  7. 阿里云esc 登录时的相关提示

    1. 如果该ecs 未绑定密钥对,可以通过常规的用户名密码登录 2. 如果该 ecs 绑定了密钥对,则需要通过私钥进行登录 3. 如果使用 比如 securityCRT 登录时报 " A p ...

  8. 注册页面的servlet

    package cn.itcast.travel.web.servlet;import cn.itcast.travel.domain.ResultInfo;import cn.itcast.trav ...

  9. gitlab 备份&恢复

    Gitlab 成功运行起来之后,最终的事情就是定期的备份,遇到问题后的还原. 备份配置 默认 Gitlab 的备份文件会创建在/var/opt/gitlab/backups文件夹中,格式为时间戳_日期 ...

  10. 虚拟机快照和linux基础命令

    虚拟机快照 磁盘"快照"是虚拟机磁盘文件(VMDK)在某个点及时的副本.可以通过使用恢复到快照来保持磁盘文件和系统存储. 1.拍摄快照 拍摄快照前先关机,然后右键点击虚拟机=> ...