Linux搭建NFS

NFS文件共享

       NFS(Network File System)是网络文件系统,是由sun公司开发的一种通过网络方式共享文件系统的通用共享解决方案,目前NFS有三个版本,分别是NFSv2、NFSv3、NFSv4。V2虽然比较老,但是他的兼容性很好,CentOS7版本默认使用版本4提供NFS网络文件系统共享服务,NFS监听在TCP2049端口。

       当俩台计算机需要通过网络建立连接时,双方主机就一定要提供一些基本信息,如:IP地址、服务端口号等;当有100台客户端需要访问某台服务器时,服务器就需要记住这些客户端的IP地址以及相应的端口号等信息。而这些信息需要程序来管理。在Linux中,这些的信息可以由某个特定服务自己来管理,也可以委托RPC来帮助自己管理。RPC是远程调用协议,RPC协议为远程通信程序管理通信双方所需的基本信息。这样NFS就可以专注于如何共享数据,支语通信的连接以及连接的基本信息,则全权委托给RPC管理,CentOS7系统由rpcbind服务提供RPC服务提供RPC协议的支持,目前NFSv4虽然不再需要与rpcbind直接交互,单rpc.mountd依然是NFSv4所必须的服务。所以,如果在CentOS7平台上实现NFS共享,需要同时启动NFS与rpcbind服务

       所需软件包:nfs-utils rpcbind(提供地址与端口注册服务)

一条完整的共享条目语法结构如下,其中,客户端主机可以是一个网段、单台主机或主机名

       共享路径       客户端主机(选项)

我们也可以为多个客户主机设置不通的访问选项

       共享路径       客户端主机1(选项)       客户端主机2(选项)

最简单的NFS配置可以仅给定一个共享路径与一个客户端主机,而不是指定选项,因为没有选项时,NFS将使用默认设置,而默认属性为ro、sync、wdelay、no_root_squash。具体NFS属性以及其对应含义看选项

NFS选项:

NFS选项

功能

ro

只读共享

rw

可读可写共享

sync

同步写操作

async

异步写操作

wdelay

延迟写操作

root_squash

屏蔽远程root权限

no_root_squash

不屏蔽远程root权限

all_squash

屏蔽所有的远程用户权限

       以上选项中,ro与rw比较容易理解,用来定义客户端访问共享时可以获得的权限是只读访问换时可读可写访问。计算机对数据进行修改时会先将修改的内容写入快速的内存,随后才会慢慢写入慢速的硬盘设备中,async选项允许NFS服务器在没有完全把数据写入硬盘前就返回成功消息给客户端,而此时数据实际还存放在内存中,但客户端则显示数据已经写入成功。这里要注意,该选项仅仅影响操作信息的返回时间,并不决定如何进行写操作,sync选项确保在数据正真写入存储设备后才会返回成功信息。wdelay为延迟写入选项。也就是说,他决定了先将数据写入内存,再写入磁盘,然后将多个写入请求合并后写入硬盘,这样可以减少对磁盘IO的次数,从而优化性能,该选项可以优化NFS性能,单有可能导致非正常关闭NFS时数据丢失情况的发生。于此相反的选项就是no_wdelay,但该选项与async选项一起使用时将不会生效,因为async时基于wdelay实现对客户端使用root账号访问NFS时,服务器虚荣默认会自动将root映射为服务器本地的匿名账号,通过anonuid可以指定匿名账号id,默认anonuid为65534,也就是nfsnobody账号,使用no_root_squash可以防止这种映射而保留root权限,all_squash选项则可以屏蔽多有账户权限,将所有的用户对NFS的访问自动映射为服务器本地的匿名账户。默认情况下,普通账号的权限时保留的,也就是没有进行squash操作

server端:

安装NFS服务

[root@localhost ~]# yum install -y nfs-utils rpcbind

检测是否安装成功

[root@localhost ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-32.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64

创建一个共享的目录

[root@localhost ~]# mkdir /var/web
[root@localhost ~]# chmod a+w /var/web/

NFS配置文件时/etc/exports,是一个新的文件,所以直接添加就可以

[root@localhost ~]#cat /etc/exports
/var/web/ 192.168.17.0/24(rw,async)

要共享的目录      允许访问的网段(可以是一个IP地址或者主机名) rw是指可读可写

sync是指同步写入磁盘

[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# systemctl enable rpcbind.service
[root@localhost ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

查看启动是否成功

[root@localhost ~]# showmount -e 192.168.17.130
Export list for 192.168.17.130:
/var/web 192.168.17.0/24

若要想客户端主机可以访问并使用服务器所提供的共享目录,可通过mount命令挂载NFS共享

       #mount -t nfs -o 选项 服务主机:/服务器共享目录  /本地挂载目录

client端:

客户端进行安装NFS

[root@localhost ~]# yum install -y nfs-utils rpcbind

挂载

[root@localhost ~]# mount 192.168.17.130:/var/web/ /opt
[root@localhost ~]# mount | grep /opt/
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   18G  940M   17G   6% /
devtmpfs                 479M     0  479M   0% /dev
tmpfs                    489M     0  489M   0% /dev/shm
tmpfs                    489M  6.7M  483M   2% /run
tmpfs                    489M     0  489M   0% /sys/fs/cgroup
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                     98M     0   98M   0% /run/user/0
192.168.17.130:/var/web   18G  1.1G   17G   6% /opt
[root@localhost ~]# mount | grep /opt
192.168.17.130:/var/web on /opt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.17.131,local_lock=none,addr=192.168.17.130)

添加到开机自动挂载

[root@localhost ~]# cp -a /etc/fstab /etc/fstab.bak
[root@localhost ~]# echo "192.168.17.130:/var/web /opt nfs defaults,_netdev 0 0" >>/etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
192.168.17.130:/var/web /opt nfs defaults,_netdev 0 0
[root@localhost ~]# umount /opt/
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep nfs
192.168.17.130:/var/web on /opt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.17.131,local_lock=none,addr=192.168.17.130,_netdev)

server端:

[root@localhost ~]# cat /var/lib/nfs/etab 
/var/web    192.168.17.0/24(rw,async,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)

除了使用NFS的挂载参数来控制权限外,还可以通过共享目录本身的权限来进行控制

实验结果:

在server写一个测试文件

客户端就可以查看

 

原文地址:https://www.cnblogs.com/huangchuan/p/11651902.html