Linux下搭建并使用nfs(网络文件系统)

NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

说白了就是,当我们集群机器想要共同访问同一路径下的某些文件,就需要用到nfs了,因为搭建的时候遇到了一些坑,所以在这里记录下来。

要设定好 NFS 服务器我们必须要有两个软件,分别是:

RPC 主程序:rpcbind

NFS 其实可以被视为一个 RPC 服务,而要启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说,在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)

NFS 主程序:nfs-utils

就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件。

首先是准备工作,也就是需要一台NFS服务器和若干台客户机。下面以一台服务器两台客户机为例(都是一样的linux机器,可以自己选择哪一台做服务器)

比如我这里,选择了ip为10.0.0.26作为服务器,客户机ip分别是10.0.2.18,10.0.2.20.

(以下代码加粗的为需要在机器上敲的指令,如果指令没有权限记得前面加上sudo

1前期准备:

1.安装nfs-utils和rpcbind

先看系统有没有安装这两个东西:

[root@sr126 ~]# rpm -qa |grep nfs

[root@sr126 ~]# rpm -qa |grep rpcbind

图1-检查是否安装过

像图一就是已经安装过,如果没有安装则敲下面的指令进行安装。

[root@sr126 ~]# yum-yinstallnfs-utils rpcbind

2.设置开机启动服务

[root@sr126 ~]# chkconfig nfs on

[root@sr126 ~]# chkconfig rpcbind on

2服务端配置:

1.创建共享目录 

[root@sr126 ~]# mkdir /share

2.编辑/etc/exports文件添加如下内容 

[root@sr126 ~]# vim /etc/exports 

添加内容如下:

/share 10.0.2.18(rw,sync)

/share 10.0.2.20(rw,sync)

(因为我需要共享到两个服务器里所以加了两条,大家可以根据需要进行删减。试过10.0.2.*的方式发现不行,所以就用了最笨的方法每条都加上了)

图2-/etc/exports 内容

网上的示例一般是这样的:

/share 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)
常见的参数则有:

参数值    内容说明

rw  ro    该目录分享的权限是可读写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

sync  async    sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

no_root_squash  root_squash    客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

all_squash    不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

设置配置生效:

[root@sr126 ~]# exportfs -r

启动服务

[root@sr126 ~]# service rpcbind start

[root@sr126 ~]# service nfs start

本机查询nfs服务器

[root@sr126 ~]# showmount -e localhost

图3-本机查询 nfs服务器

3客户端配置:

查看服务器抛出的共享目录信息

[root@sr418 ~]# showmount -e 10.0.0.26

图4-服务器的共享目录信息

[root@sr418 ~]# mount -t nfs 10.0.0.26:/share /mnt

(这里是将本机的mnt目录与服务器的share目录共享,这样进入到mnt就可以看到服务器中share文件夹内所有内容啦)

这里有可能会报无权限,是我遇见的大坑。一种可能就是你服务器端/etc/exports写的配置不对,还有一种可能是你没有给用户设置权限。也就是给服务器端当前用户配一下权限

[root@sr126 ~]# sudo chown sparkuser:sparkuser -R share/

mount成功后就可以查看挂载情况啦

[root@sr418 ~]# df -h

图5-挂载情况

如上图5所示可以看到服务器端的share文件夹已经挂载到了当前客户端的mnt上了

你可能感兴趣的:(Linux下搭建并使用nfs(网络文件系统))