NFS-SERVER是一种基于TCP/IP传输的网络文件系统协议,它允许网络中的不同机器和操作系统共享文件

1.nfs概述(network file system)

nfs最大的功能就是可以透过网络,让不同的机器(跨系统)、不同的作业系统、可以彼此分享个别的档案 (share files),可以简单的将他看做是一个档案服务器 (file server) 这个 NFS 服务器可以让您的 PC 来将网络远端的 NFS 主机分享的目录,挂载到本地端的机器当中使用

nfs-client/server mount alt text

2.NFS Server端设定

# 依赖软件包
以RHEL5 为例的话,要设定好 NFS 服务器我们必须要有两个套件才行,分别是∶
NFS 主程序∶nfs-utils
RPC 主程序∶portmap    //rhel5.x  RHEL6,不需要了,rpcbind服务

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

# 配置文件及命令
/etc/exports
/usr/sbin/exportfs
/usr/sbin/showmount

3./etc/exports语法与参数

[root@linux     ~]# vi /etc/exports
/tmp         192.168.1.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
#[分享目录]  [主机(权限)]

可以使用完整的IP或者是网域,例如 192.168.1.10 或 192.168.1.0/24 ,或 192.168.1.0/255.255.255.0 都可以接受!
可以使用主机名称,这个主机名称要在 /etc/hosts 内或使用 DNS 可以被找到才行啊!重点是可找到 IP 就是了,如果是主机名称的话,那么他可以个援万用字元,例如 * 或 ? 均可接受。

权限方面 (就是小括号内的参数) 常见的参数则有∶
rw∶read-write,可读写的权限;
ro∶read-only,唯读的权限;
sync∶资料同步写入到记忆体与硬盘当中;
async∶资料会先暂存于记忆体当中,而非直接写入硬盘!
no_root_squash∶登入 NFS 主机使用分享目录的使用者
root_squash∶    #squash  权限压制
在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody(nfsnobody) 那个系统帐号的身份;

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

anonuid∶
anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody(nfsnobody),但是您可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于您的 /etc/passwd 当中!

anongid∶同 anonuid ,但是变成 group ID 就是了!

4.启动 NFS

[root@linux ~]# /etc/init.d/portmap start
[root@linux ~]# /etc/init.d/nfs start

[root@linux ~]# vi /etc/exports
/tmp          *(rw,no_root_squash,sync)
/home/public  192.168.0.0/24(rw,sync)    *(ro,sync)
/home/test    192.168.0.100(rw,sync)
/home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync)

[root@linux ~]# /etc/init.d/nfs restart

# 查看分享情况showmount
[root@linux ~]# showmount [-ae] [hostname|IP]
参数∶
-a ∶显示目前主机与用户端的 NFS 连线分享的状态;
-e ∶显示某部主机的 /etc/exports 所分享的目录资料。

 
范例一∶请显示出刚刚我们所设定好的相关 exports 资讯
[root@linux ~]# showmount -e localhost
Export list for localhost:
/tmp         *
/home/linux  *.linux.org
/home/public (everyone)
/home/test   192.168.0.100

[root@linux ~]# exportfs [-aruv]
参数∶
-a ∶全部挂载(或卸载) /etc/exports 档案内的设定
-r ∶重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports及/var/lib/nfs/xtab 的内容!
-u ∶卸载某一目录
-v ∶在 export 的时候,将分享的目录显示到萤幕上!


范例一∶重新挂载一次 /etc/exports 的设定
[root@linux ~]# exportfs -arv
exporting 192.168.0.100:/home/test
exporting 192.168.0.0/24:/home/public
exporting *.linux.org:/home/linux
exporting *:/home/public
exporting *:/tmp

范例二∶全部都卸载
[root@linux ~]# exportfs -auv

[root@linux ~]# showmount -e 192.168.0.2
Export list for 192.168.0.2:
/tmp         *
/home/linux  *.linux.org
/home/public (everyone)   <==这是等一下我们要挂载的目录
/home/test   192.168.0.100


# 挂载远程目录
接下来我想要将远端主机的 /home/public 挂载到本地端主机的 /home/nfs/public , 所以我就得要在本地端主机先建立起这个挂载点目录才行啊!然后就可以用 mount 这个指令直接挂载 NFS 的档案系统!

[root@linux     ~]# mkdir -p /home/nfs/public
[root@linux     ~]# mount -t nfs 192.168.0.2:/home/public /home/nfs/public

#注意一下挂载的语法!『 -t nfs 』指定档案系统类型,IP:/dir 则是指定某一部主机的某个提供的目录

[root@linux     ~]# df
Filesystem    1K-blocks      Used Available Use% Mounted on
192.168.0.2:/home/public
               10080512   2135072       7433344  23% /home/nfs/public

注意:保持权限一致,则服务端和客户端用户名及uid/gid保持一致

reference