Centos7挂载NFS内容

现在有三台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现!

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

1

yum install -y nfs-utils

二、编辑exports文件,添加从机

1

2

vim /etc/exports

/data 192.168.0.100(rw,sync,fsid=0)  192.168.0.101(rw,sync,fsid=0)

192.168.0.100 和192.168.0.101两台机器可以挂载NFS服务器上的/data目录到自己的文件系统中

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

三、启动nfs服务

先为rpcbind和nfs做开机启动:

1

2

systemctl enable rpcbind.service

systemctl enable nfs-server.service

然后分别启动rpcbind和nfs服务:

1

2

systemctl start rpcbind.service

systemctl start nfs-server.service

确认NFS服务器启动成功:

1

rpcinfo -p

检查 NFS 服务器是否挂载我们想共享的目录 /data:

1

2

3

4

exportfs

#可以查看到已经ok

/data           192.168.0.100

/data           192.168.0.101

四、在从机上安装NFS 客户端 (群晖需要在控制面板-->文件服务-->NFS勾选支持nfs4)

首先是安裝nfs,同上,然后启动rpcbind服务

先为rpcbind做开机启动:

1

systemctl enable rpcbind.service

然后启动rpcbind服务:

1

systemctl start rpcbind.service

注意:客户端不需要启动nfs服务

检查 NFS 服务器端是否有目录共享:

1

showmount -e nfs服务器的IP

在从机上使用 mount 挂载服务器端的目录/data到客户端某个目录下:

1

2

3

mkdir /data

mount -t nfs4 nfs服务器IP:/    /data

df -h 查看是否挂载成功

想在客户机上实现开机挂载,则需要编辑/etc/fstab:

1

2

3

vi /etc/fstab

# 加上

nfs服务器IP:/   /data  nfs4 ro,hard,intr,proto=tcp 0 0

客户端挂载后,写文件时可能会报一个权限问题:Permission denied。解决这个问题可以修改nfs主服务器/etc/exports文件,改成如下內容:

1

2

3

vi /etc/exports

# xx请根据下面替换

/data  192.168.0.100(rw,sync,fsid=0,anonuid=xx,anongid=xx) 192.168.0.101(rw,sync,fsid=0,anonuid=xx,anongid=xx)

查看服务器uid

1

2

# id root 

uid=0(root) gid=0(root) groups=0(root)

将xx改成65534

重新读取NFS配置文件:

1

exportfs -rv

可使用如下命令查看配置

1

exportfs -v

但是你会发现,服务端可以读写客户端的文件,但是客户端的无法读写服务端的。

可以有下面的配置

   /testfs 10.0.0.0/8(rw)
    重启NFS服务以后,在客户机通过mount -o rw -t nfs 10.214.54.29:/testfs /rd1命令将网络文件mount到本地。执行完成之后,目录是可以访问了,但无法写入。感觉有点奇怪,明明在命令中指定可以写入了。于是到网上搜索资料,发现exports目录权限中,有这么一个参数no_root_squash。其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有                      root 的权限!。默认情况使用的是相反参数                     root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的                      UID 与 GID 都会变成 nobody 那个身份。
    因为我的客户端是使用root登录的,自然权限被压缩为nobody了,难怪无法写入。将配置信息改为:
    /testfs 10.0.0.0/8(rw,no_root_squash)
    据说有点不安全,但问题是解决了。 
    另外,在测试NFS文件系统时,会经常mount和umount文件,但有时会出现device is busy的错误提示。你肯定感到很奇怪,我明明没有使用啊,看看你当前所在的目录,是不是在mount的文件目录中?回退到上层目录重新umount,是不是OK了?

1、exports参数说明
ro          只读访问  
rw          读写访问  
sync        所有数据在请求时写入共享  
async       NFS在写入数据前可以相应请求  
secure      NFS通过1024以下的安全TCP/IP端口发送  
insecure    NFS通过1024以上的端口发送  
wdelay      如果多个用户要写入NFS目录,则归组写入(默认)  
no_wdelay   如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。  
hide        在NFS共享目录中不共享其子目录  
no_hide     共享NFS目录的子目录  
subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)  
no_subtree_check        和上面相对,不检查父目录权限  
all_squash  共享文件的UID和GID映射匿名用户anonymous,适合公用目录。  
no_all_squash           保留共享文件的UID和GID(默认)  
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)  
no_root_squash          root用户具有根目录的完全管理访问权限  
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID  
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID 

/u01/attachments 10.0.1.155(rw,sync,fsid=0,anonuid=65534,anongid=65534,no_root_squash)  10.0.1.156(rw,sync,fsid=0,anonuid=65534,anongid=65534,no_root_squash)


2、NFS 管理命令
showmount -e     在NFS Server上执行此命令显示NFS Server上所有的共享卷;
showmount -e 192.168.1.100    在NFS Client上执行此命令显示NFS Server上所有共享卷;
exportfs -av     根据/etc/exports导出所有卷;
exportfs -rv     重新导出所有卷,增加/etc/exports中的新项目、删除不存在的项目、更新改变的项目;

参考:https://blog.csdn.net/zzcchunter/article/details/79051718

           http://blog.chinaunix.net/uid-26495963-id-3219407.html

          https://blog.csdn.net/xiyang_1990/article/details/78284048

猜你喜欢

转载自blog.csdn.net/wenfeifang/article/details/83029067