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上了