创建 NFS 服务器

NFS是网络文件系统(Network File System), 它允许系统将本地目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。

安装

NFS需要nfs-utils和rpcbind两个包, 但安装nfs-utils时会一起安装上rpcbind:

yum install nfs-utils

编辑exports文件

编辑/etc/exports文件添加共享目录,每个目录的设置独占一行,每行共三部分, 前边是目录, 后边是客户机, 括号中是配置参数. 编写格式如下:

NFS共享目录路径 客户机IP或者名称(参数1,参数2,...,参数n)

例如:

# example: /home/nfs 192.168.64.134(rw,sync,fsid=0)  192.168.64.135(rw,sync,fsid=0)   
# 第一部分: /home/nfs, 本地要共享出去的目录。
# 第二部分: 192.168.64.0/24 ,允许访问的主机,可以是一个IP:192.168.64.134,也可以是一个IP段:192.168.64.0/24. "*"表示所有
# 第三部分:
#     rw表示可读写,ro只读;
#     sync :同步模式,内存中数据时时写入磁盘;async :不同步,把内存中数据定期写入磁盘中;
#     no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
#     anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
#     fsid=0表示将/home/nfs整个目录包装成根目录
/home/nfs *(rw,sync,no_root_squash)

设置开机自启动

systemctl enable rpcbind.service
systemctl enable nfs-server.service

启动

service nfs-server start
service rpcbind start

查看nfs运行

[root@localhost ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100024    1   udp  47378  status
    100024    1   tcp  34772  status
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  58178  nlockmgr
    100021    3   udp  58178  nlockmgr
    100021    4   udp  58178  nlockmgr
    100021    1   tcp  42391  nlockmgr
    100021    3   tcp  42391  nlockmgr
    100021    4   tcp  42391  nlockmgr

关闭防火墙

systemctl stop firewalld.service

客户端

客户端不需要启动服务, 只下载nfs工具:

yum install nfs-utils

客户端验证

[root@localhost ~]# showmount -e 192.168.64.133Export list for 192.168.64.133:
/home/nfs *

客户端挂载

使用 mount 命令将NFS服务器的/home/nfs挂载到客户端的/kubernetes目录。可以在客户端终端输入如下命令:

mount 192.168.64.133:/home/nfs /kubernetes



===

NFS即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS最早由Sun公司开发,分2、3、4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本。

搭建部署

服务端

1、安装软件

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

2、编辑配置文件

1
2
3
[root@plinuxos ~] # vim /etc/exports
/home/nfssharedir  192.168.137.0 /24 (rw, sync ,all_squash,anonuid=1000,anongid=1000)
##配置格式:共享目录 客户端IP(参数1,参数2,参数.......)

▎参数说明:

rw:允许读写;
ro:只允许读;
sync:同步模式,内存数据实时写入磁盘,影响性能;
async:非同步模式,数据有丢失风险;
no_root_squash:客户端挂载NFS共享目录后,root用户不受约束,权限很大;
root_squash:与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户;
all_squash:客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户;
anonuid/anongid:和上面几个选项搭配使用,定义被限定用户的uid和gid。


3、授权

1
2
[root@plinuxos ~] # mkdir -p /home/nfssharedir
[root@plinuxos ~] # chown 777 /home/nfssharedir

4、检查与启动

1
2
3
4
5
[root@plinuxos ~] # netstat -ltnp
[root@plinuxos ~] # systemctl start nfs
[root@plinuxos ~] # ps aux | grep nfs
[root@plinuxos ~] # ps aux | grep rpc
[root@plinuxos ~] # systemctl enable nfs

客户端

1
2
[root@ test -03 ~] # yum install -y nfs-utils
[root@ test -03 ~] # showmount -e 192.168.137.100

如果没有效果,先确认服务端服务已经启动,再确认服务端和客户端的防火墙已经关闭后,再次尝试。

也可以挂载:

1
[root@ test -03 ~] # mount -t nfs 192.168.137.100:/home/nfssharedir /mnt/


exportfs

重启nfs服务时,需要把所有挂载点卸载掉。可以使用exportfs -arv命令。

1、编辑配置文件

1
2
3
[root@plinuxos ~] # vim /etc/exports
/home/nfssharedir  192.168.137.0 /24 (rw, sync ,all_squash,anonuid=1000,anongid=1000)
/tmp  192.168.137.200(rw, sync ,no_root_squash)  ##新增该行

2、执行exportfs -arv命令

1
2
3
[root@plinuxos ~] # exportfs -arv
exporting 192.168.137.200: /tmp
exporting 192.168.137.0 /24 : /home/nfssharedir

3、关闭服务端和客户端防火墙

4、检查效果

1
2
[root@ test -03 ~] # showmount -e 192.168.137.100
[root@ test -03 ~] # mount -t nfs 192.168.137.100:/tmp/ /mnt/



▎NFS 4/6版本会有该问题(客户端文件属主属组nobody)

1、CentOS 7版本系统如果出现问题解决方案:

客户端挂载服务端共享目录到挂载点后,再重新挂载一次同时指定NFS的版本为3;


2、CentOS 6可以这样解决:

客户端和服务端都需要修改如下配置文件内容:

vim /etc/idmapd.conf

把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcidmapd服务。