linux CentOS 6.4 NFS网络文件系统

一、NFS百科

   NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。(百度百科)

   NFS由SUN公司开发,目前有三个版本,分别为NFSv2,NFSv3,NFSv4。

   NFSv2是一个老版本,被众多系统支持,因此兼容性很好。

   NFSv3做了一些改进,其中包括,更快的速度,支持更大的单个文件,更多便于排错的信息及成果信息反馈,以及对于TCP协议的支持。

   NFSv4提供了有状态的连接,更容易追踪连接状态,增强了安全性。

   CentOS6.x默认使用版本4提供NFS网络文件系统共享服务。CentOS 6.x系统由rpcbind服务提供RPC协议的支持,目前NFSv4虽然已经不再需要与rpmbind直接交互,但rpm.mount依然是NFSv4所必须的服务。所以,如果在CenOS 6.x 实现NFS共享,需要启动NFS与rpmbind服务。(所需软件包括nfs-utils、rpcbind)

   NFS默认监听在TCP 2049端口。

NFS工作原理图

linux CentOS 6.4 NFS网络文件系统

图示说明:portmap为CentOS 5.x系列的服务进程,对应CentOS 6.x系列的rpcbind

二、配置文件说明/etc/export

1.每个共享的文件系统需要独立一行条目

2.配置文件中支持通配符。

3.语法格式

共享路径 客户端主机1(权限) 客户端主机2(权限)---可选

三、客户端主机权限说明

                NFS选项                 功能描述
ro

只读

rw 读写
sync 同步写操作
async 异步写操作
wdelay 延迟写操作
root_squash 屏蔽远程root权限
no_root_squash 不屏蔽远程root权限
all_squash 屏蔽所有的远程用户权限

权限说明:

1. sync在确保数据真正写入存储设备后才返回成功信息。而async是在没有完全把数据写入存储之前就返回成功信息给客户端,此时的数据实际还存放在内存中。

2. wdelay 决定了先将数据写入内存,再写入磁盘,然后将多个写入请求合并后写入磁盘。这样可以减少对磁盘IO的次数,从而优化性能。但有可能造成非正常关闭NFS时丢失数据。

  而no_wdelay恰恰相反。但是该选项与async一起使用时将不会生效。因为async是基于wdelay实现对客户端的一种响应功能。

3. NFS默认会屏蔽root用户的权限,root_squash会自动将root映射到本地匿名账户,通过anounuid可以指定匿名账户ID,默认ID为65534,也就是nfsnobody账户。

  no_root_squash可以防止上述映射而保留root权限。all_squash可以屏蔽所有账户权限,将用户对NFS的访问映射为服务器本地的匿名账户。默认情况下,普通账户的权限是保留的,也就是没有进行squash屏蔽操作。

四、实施案例

linux CentOS 6.4 NFS网络文件系统

需求:某linux校区需要建立自己的共享文件中心。目录规划如下:
    /data/shell 教师专用,用来存放教师资源:shell练习脚本,学生待发作业等.

    /data/soft 学生专用,用来存放学生实验所需软件,以及课后习题。

一、实验环境:

系统版本:CentOS 6.4

NFS Server:192.168.0.96

NFS Client: 192.168.0.97(老师)        192.168.1.33(学生)

教师及学校DMZ区网段:192.168.0.0/24

学生网段:192.168.1.0/24

二、部署

                           NFS Server端部署

1.安装nfs服务端程序

[root@NFS-Server ~]# yum -y install nfs-utils rpcbind
[root@NFS-Server ~]# rpm -qa|grep nfs-utils
nfs-utils-lib-1.1.5-6.el6.x86_64
nfs-utils-1.2.3-39.el6.x86_64
[root@NFS-Server ~]# rpm -qa|grep -E "nfs-utils|rpcbind"
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
nfs-utils-1.2.3-39.el6.x86_64
[root@NFS-Server ~]# mkdir -p /data/{shell,soft}

2. 编辑配置文件

[root@NFS-Server ~]# cat /etc/exports
#Teachers source and power
/data/shell 192.168.0.*(rw,no_root_squash,sync)
#Students source and power
/data/soft 192.168.1.*(ro,root_squash,async) 192.168.0.*(rw,no_root_squash,sync)

3. 启动nfs服务

[root@NFS-Server ~]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@NFS-Server ~]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
#注意启动顺序,如果顺序反了,会有如下提示
[root@NFS-Server ~]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS mountd:                                       [FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
                                                           [FAILED]

4. 创建测试资源

[root@NFS-Server ~]# cd /data/soft/
[root@NFS-Server soft]# touch httpd.tar.gz
[root@NFS-Server soft]# cd ../shell/
[root@NFS-Server shell]# touch useradd.sh

                           NFS Client-Teacher端访问资源

1. 查询服务端共享信息

[root@NFS-Teacher ~]# showmount -e 192.168.0.96
Export list for 192.168.0.96:
/data/soft  192.168.0.*,192.168.1.*
/data/shell 192.168.0.*

2. 创建本地挂载点,并挂载

[root@NFS-Teacher ~]# mkdir -p /data/{shell,soft}
[root@NFS-Teacher ~]# mount 192.168.0.96:/data/soft /data/soft
[root@NFS-Teacher ~]# mount 192.168.0.96:/data/shell /data/shell
[root@NFS-Teacher ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  1.5G  7.7G  17% /
tmpfs                 116M     0  116M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
192.168.0.96:/data/soft
                      9.7G  4.2G  5.0G  46% /data/soft
192.168.0.96:/data/shell
                      9.7G  4.2G  5.0G  46% /data/shell

3. 查看本地是否存在测试资源

[root@NFS-Teacher ~]# ls /data/*/*
/data/shell/useradd.sh  /data/soft/httpd.tar.gz

4. 测试权限匹配问题

[root@NFS-Teacher ~]# cd /data/soft/
[root@NFS-Teacher soft]# touch nginx.tar.gz
[root@NFS-Teacher soft]# touch ../shell/nginx_status.sh
[root@NFS-Teacher soft]# ls /data/*/*
/data/shell/nginx_status.sh  /data/shell/useradd.sh  /data/soft/httpd.tar.gz  /data/soft/nginx.tar.gz


5.实现开机自动挂载/etc/fstab(不建议你这样做,因为如果写到fstab里,而NFS服务器端或者因为网络问题连接异常,可能导致无法开机。)

[root@NFS-Teacher soft]# grep -Ev "^#|^$" /etc/fstab
UUID=d20dea81-455b-4d96-a986-9282054d2885 /                       ext4    defaults        1 1
UUID=34dcffb0-1454-458e-879c-3aeaf9d6c83a /boot                   ext4    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
192.168.0.96:/data/shell /data/shell            nfs     defaults        0 0
192.168.0.96:/data/soft  /data/soft             nfs     defaults        0 0

上述的挂载方法最好可以写

[root@localhost ~]# mkdir /data/{shell,soft}
[root@localhost ~]# mount 192.168.0.96:/data/soft /data/soft
[root@localhost soft]# mount 192.168.0.96:/data/shell /data/shell
mount: 192.168.0.96:/data/shell failed, reason given by server: Permission denied

到rc.local里,这样更为方便

[root@NFS-Teacher soft]# grep -Ev "^#|^$" /etc/rc.local
touch /var/lock/subsys/local
mount 192.168.0.96:/data/soft /data/soft
mount 192.168.0.96:/data/shell /data/shell

                               NFS Client-Student端访问资源

1. 查询服务端共享信息

[root@localhost ~]# showmount -e 192.168.0.96
Export list for 192.168.0.96:
/data/soft  192.168.0.*,192.168.1.*
/data/shell 192.168.0.*

2. 创建本地挂载点,并挂载

[root@localhost ~]# mkdir /data/{shell,soft}
[root@localhost ~]# mount 192.168.0.96:/data/soft /data/soft
[root@localhost soft]# mount 192.168.0.96:/data/shell /data/shell
mount: 192.168.0.96:/data/shell failed, reason given by server: Permission denied

# 报错原因分析:NFS服务端exports文件中,shell仅仅共享到教师网段192.168.0.0/24,因此会提示Permission Deny信息。

# 另外需要注意的是:如果你的客户端是centos5.x系列,那么需要提前开启portmap服务,否则会提示如下错误:

[root@localhost ~]# mount 192.168.0.96:/data/soft /data/soft
mount.nfs: Input/output error

3. 测试权限

[root@localhost soft]# touch update.sh
touch: cannot touch `update.sh‘: Read-only file system

# 报错原因分析:exports中定义了ro只读权限,因此客户端只有不具备write权限。上述报错为正常现象


至此,NFS整个搭建流程结束。

有些时候我们可能遇到这样的情况,就是某个挂载点目录已经不需要了,需要卸载,但是出现如下情况:

[root@localhost ~]# umount /data/soft/
umount: /data/soft: device is busy
umount: /data/soft: device is busy

解决方法如下:

第一种:
[root@localhost ~]# umount /data/soft/
umount: /data/soft: device is busy
解决方法:
[root@localhost ~]# fuser  -m -v /data/soft/
                     USER        PID ACCESS COMMAND
/data/soft/:         root      13268 ..c.. bash
[root@localhost ~]# kill -9 13268
[root@localhost ~]# umount /data/soft/
第二种:
[root@localhost ~]# fuser -km /data/soft/
/data/soft/:         13448c
 [root@localhost ~]# umount /data/soft/
第三种:
[root@localhost ~]# umount -lf /data/soft/

最犀利的是第三种方法,灰常灰常经典,一条命令解决。在这里特别感谢“老男孩老师”的倾囊相授!老师的博文地址:http://oldboy.blog.51cto.com

欢迎大家点击学习老师的技术,更重要的是思想。


另外补充一些NFS的相关命令知识

1. NFS文件系统的挂载

# mount -t nfs -o 选项 $IP:$DIR $LOCALDIR

选项:

  • Intr:当服务器宕机时,允许中断NFS请求

  • nfsvers=version:指定使用哪个版本的NFS协议,version可以是2,3 ,4

  • noacl:关闭ACL,仅与老版本系统兼容时使用

  • nolock:关闭文件锁机制,仅用来连接老版本NFS服务器

  • noexec:在挂载的文件系统中屏蔽可执行的二进制程序

  • port=num:指定NFS服务器端口号

  • rsize=num:设置最大数据块大小,调整NFS读取数据的速度.单位为字节

  • wsize=num:设置最大数据块大小,调整NFS写入数据的速度.单位为字节

  • tcp:使用tcp协议挂载

  • udp:使用udp协议挂载

2. NFS服务相关的几个命令

1)、exportfs 命令

   -r   重新读取/etc/exports

   -a   全部共享或者全部取消共享

   -u   取消共享,与-a一起使用可以取消全部共享文件系统

   -v   显示详细信息

2)、nfsstat  查看NFS共享状态

   -s,--server  默认显示服务器端与客户端状态,使用该参数后将仅显示服务器端状态

   -c,--client  仅显示客户端状态

   -n,--nfs     仅显示NFS状态,默认显示NFS与RPC状态

   -n           n为数字2,3,4,仅显示NFS版本为n的状态细细ni

   -m           显示挂载信息

   -l           以列表形式显示信息    





本文参考了百度百科,《linux运维之道》,请尊重技术人员版权远,每次声明出自哪儿,这样让人家原作者心里也舒服,毕竟他传授过你知识,算的上是一位前辈,一位老师了。

如有不明白的地方,欢迎留言一起探讨,本人也是很菜的一只鸟儿。



本文出自 “技术成就未来” 博客,请务必保留此出处http://jishuweiwang.blog.51cto.com/6977090/1390579

linux CentOS 6.4 NFS网络文件系统,布布扣,bubuko.com

linux CentOS 6.4 NFS网络文件系统

上一篇:小程序-云开发 bindscroll滚动事件执行setData()方法,导致scroll-view视图抖动


下一篇:基于百度AI接口的微信小程序-人脸搜索