• 欢迎访问夏天爸爸记录站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入SUmmerdad BLOG

NFS简介和配置

生活点滴 summerdad 4年前 (2016-03-05) 64次浏览 已收录 0个评论 扫描二维码

一、简介

NFS(Network File System/网络文件系统):

1)、设置 Linux 系统之间的文件共享(Linux 与 Windows 中间文件共享采用 SAMBA 服务);

2)、NFS 只是一种文件系统,本身没有传输功能,是基于 RPC 协议实现的,才能达到两个 Linux 系统之间的文件目录共享;

3)、NFS 为 C/S 架构;

二、依赖的服务和软件包

1、检查下列两个包是否已经安装(默认安装完 RHEL 或者 CentOS 系统,就已经安装了这两个软件包)

[root@Mylinux ~]# rpm -qa | grep 'portmap\|nfs-utils'

2、如果没有安装,现在就安装它们

[root@Mylinux ~]# yum install -y portmap nfs-utils

说明如下:
(1)nfs-utils 套件
该套件提供?rpc.nfsd?及?rpc.mountd?这两个?NFS daemons?与其它相关?documents?与说明文件、执行档等的套件!所以它是?NFS?的主要套件
(2)portmap 套件
NFS?其实可以被视为一个?RPC server program,而要激活任何一个?RPC server program?之前,我们都需要做好?port?的对应?(mapping)的工作才行,这个工作其实就是 portmap 这个服务所负责的!也就是说,在激活任何一个?RPC server?之前,需要激活?portmap?,那么?portmap?就是作?port?的?mapping
例如:当?Client?端尝试来使用?RPC server?所提供的服务时,由于?Client?需要取得一个可以连接的?port?才能够使用?RPC server?所提供的服务,因此,?Client?首先就会去跟?portmap?联系一个 port number?,好让 Client 可以跟?RPC?联络,这个时候?portmap?就自动的将自己管理的?port mapping?告知?Client?,好让他可以连接上来?server!所以说:在激活?NFS?之前,要先激活 portmap

既然 nfs 依赖于 RPC,那么我们使用 rpcinfo 指令来查看一下本地 rpc 信息
[root@Mylinux ~]# service portmap start;?? service nfs start;?? rpcinfo -p localhost
rpc.nfsd—管理 clinet 是否有权限登录,以及判别登录者的 uid 等
rpc.mountd—读取/etc/exports 的权限,对文件访问权限进行控制
rpc.lockd—文件的互斥锁,保证文件在同一时间只有一个人访问,需要 nfslockd 服务
rpc.statd—检查文件的一致性,需要 nfslockd 服务

三、服务端配置方法

1)配置服务器端的主配置文件/etc/exports

[root@Mylinux ~]# vim?? /etc/exports

(1)语法格式
/etc/exports 文件中每一行提供了一个共享目录的设置,其格式为如下:
<share directory> + 空格 + [hostname1 或 IP1(参数 1,参数 2…..)] + 空格 + [?hostname2 或 IP2(参数 3,参数 4….)]

(2)主要参数如下

rw 可读可写
ro 只读
sync 数据同步写入内存缓冲区与磁盘中,虽然这样做效率较低,但可以保证数据的一致性(适合于小文件传输)
async 数据先暂时放于内存,而非直接写入硬盘,等到必要时才写入磁盘(适合于大文件传输)
no_root_squash 使用 nfs 时,如果用户是 root,不进行权限压缩,即 root 用户在 nfs 上创建的文件???属组和属主仍然是 root(不安全,不建议使用)
root_squash 使用 nfs 时,如果用户是 root,则进行权限压缩,即把 root 用户在 nfs 上创建的文件???属组和属主修改为 nfsnobody
all_squash 所有的普通用户使用 nfs 都将使用权限压缩,即:将远程访问的所有普通用户及所属用户组都映射为匿名用户或者用户组(一般均为 nfsnobody)
no_all_squash 所有的普通用户使用 nfs 都不使用权限压缩,即:不将远程访问的所有普通用户及所属用户组都映射为匿名用户或者用户组(默认设置)
anonuid=XXX anon 即 anonymous(匿名者),前面关于*_squash 提到的匿名用户的 uid 的设置值,通常为 nobody 或者 nfsnobody,使用这个参数可以自行设定这个 uid 值,这个 uid 必须存在??于/etc/passwd
anongid=XXX 将远程访问的所有用户组都映身为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=XXX)
insecure 允许客户端从大于 1024 的 TCP/IP 端口连 NFS 服务器
secure 限制客户端只能从小于 1024 的 TCP/IP 端口连接 NFS 服务器(默认设置)
wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可提高效率(默认设置)
no_wdelay 若有写操作则立即执行(应与 sync 配置)
subtree_check 若输出目录是一个子目录,则 NFSW:务器将检查其父目录的权限(默认设置)
no_subtree_check 即使输出目录是一个子目录,NFS 服务器也不检查其父目录的权限,这样做可提高效率

(3)设置实例

/tmp?*(rw,no_root_squash) 在所有的 IP(主机)上登录的用户都可对 NFS 服务器上的共享目录/tmp 拥有 rw 操作权限,同时如果是 root 用户访问该共享目录,那么不将 root 用户及所属用户组都映射为匿名用户或用户组(*表示所有的主机或者 IP)
/tmp?*(rw) 在所有的 IP(主机)登录的用户都可对 NFS 服务器上的共享目录/tmp 拥有 rw 操作权限
/home/public?192.168.0.*(rw)???*(ro)
/home/public?192.168.0.0/24(rw)?*(ro)
除了在 192. 168. 0.0/24 这个网段内的主机上登录的用户,可对 NFS 服务器共享目录/home/public 进行 rw 操作权限,而其它网段的主机上登录的用户,对 NFS 服务器共享目录/home/public 只能进行 r 操作
/home/test?192.168.0.100(rw) 只对 192.168.0.100 该台主机设置权限,即:使在该台主机登录的用户都可对 NFS 服务器上的共享目录/home/test 拥有读与写的操作
/home/linux?*.linux.org(rw,all_squash,anonuid=40,anongid=40) 当*.linux.org(加入域 linux.org 的所有主机) 登陆此 NFS 主机,并且在/home/linux 下面写入档案时,该档案的所有人与所有组,就会变成 NFS 服务器上的/etc/passwd 文件里面对应的 UID 为 40 的那个身份的使用者了(因为指定了参数:all_squash,anonuid=40,anongid=40)

(4)权限问题

NFS 服务器(192.168.0.2)上的/etc/exports 配置文件设置如下
/tmp *(rw,no_root_squash)
/home/public 192.168.0.*(rw) *(ro)
/home/test 192.168.0.100(rw)
/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)
例如:我们在 192.168.0.100 这个 client 端登陆此 NFS 主机(192.168.0.2),那么会怎么样呢?
情况一: 在 192.168.0.100 的帐号为 test 这个身份,同时 NFS 主机上也有 test 这个帐号 (1)由于 NFS 主机的/tmp 权限为-rwxrwxrwt,所以我(test 在 192.168.0.100 上)在/tmp 下面具有存取的权限,并且写入档案的所有人为 test
(2)在/home/public 中,由于我有读写的权限,如果 NFS 主机在/home/public 这个目录的权限对于 test 开放写入的话,那么就可 以读写,并且写入档案的所有人是 test。如果 NFS 主机的/home/public 对于 test 这个使用者并没有开放写入权限时,那就无法写入,虽然?/etc/exports 里面是 rw,也不起作用
(3)在/home/test 中,权限与/home/public 有相同的状态,需要 NFS 主机的/home/test 对于 test 有开放的权限
(4)在/home/linux 当中,不论是何种的 user,身份都会被变成 UID=40 的这个帐号
情况二: 如果我们在 192.168.0.100 的身份为 test2,但是 NFS 主机却没有 test2 这个帐号时 (1)在/tmp 下还是可以写入,但是写入的档案所有人变成 nobody
(2)在/home/public 与/home/test 里面是否可以写入,还需要看/home/public 的权限而定,不过身份就被变成 nobody
(3)/home/linux 下的身份还是变成 UID=40 的帐号
情况三:在 192.168.0.100 的身份为 root (1)在/tmp 里面可以写入,但是由于 no_root_squash 的参数,改变了预设的 root_squash 的设定值,所以在/tmp 写入档案的所有人为 root 了
(2)在/home/public 底下的身份被压缩成了 nobody,因为预设的属性都具有 root_squash,所以档案所有人就变成了 nobody
(3)/home/test 情况与/home/public 相同
(4)/home/linux 中,root 的身份也被压缩成 UID=40 的那个使用者了

(5)启动 nfslock、portmap、nfs 服务,并查看日志是否正常的激活
[root@Mylinux ~]# service portmap start
[root@Mylinux ~]# service nfs?? start
[root@Mylinux ~]# service nfslock start
[root@Mylinux ~]# tail -10 /var/log/messages

注意:启动这些服务的顺序

(6)客户端连接使用 nfs
[root@Mylinux ~]# /etc/init.d/portmap start
[root@Mylinux ~]# /etc/init.d/nfslock??? start
[root@Mylinux ~]# showmount -e 192.168.0.2

(7)exportfs 与 showmount 指令的用法

exportfs 指令作用 用来维护 NFS 服务的共享目录列表的输出
exportfs 指令语法
(exportfs [-aruv])
-a 全部 mount 或者 unmount /etc/exports 中内容(即:要被共享出来的目录)
-r 重新读取/etc/exports 文件的设置,并使得设置立即生效,而不需要重新启动 nfs 服务
-u 停止输出某一个目录
-v 在输出目录时,将详细的信息输出到屏幕上
注意:当修改了/etc/exports 配置文件,可以使用参数-r 重新读取/etc/exports 配置文件,使得设置立即生效,而不需要重启 nfs 服务
exportfs 指令例子 #exportfs -rv //重新 export 一次
#exportfs -au //全部卸载
exporting 192.168.0.100:/home/test
exporting 192.168.0.*:/home/public
exporting *.the9.com:/home/linux
exporting *:/home/public
exporting *:/tmp
reexporting 192.168.0.100:/home/test to kerne
格式:showmount [-ae] hostname(IP)
-a 显示指定的 NFS 服务器的所有客户端主机及其所连接的目录(一般在 NFS Server 上使用该参数)
-e
-d
显示指定的 NFS 服务器上所有 export 出来的目录
显示指定的 NFS 服务器中已被客户端连接的所有 export 出来的目录

(8)/var/lib/nfs/etab 里面可以查看每个目录的分享权,例如:
/nfs *rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)
对照一下?/etc/passwd?,你就会发现,65534 这个 UID 的用户是 nfsnobody

(9)启动和停止 NFS 服务
Section 1:启动 NFS 服务

[root@Mylinux ~]# service portmap start
[root@Mylinux ~]# service nfs start
[root@Mylinux ~]# service nfslock start

注意:它们的启动顺序,因为 nfs 服务是依赖于 RPC 服务的,而 RPC 服务又依赖于 portmap 服务,所以要先启动 portmap,而最后一个 nfslock 服务是对 nfs 共享的文件的读定锁定,所以在启动 nfs 服务后再启动
Section 2:停止 NFS 服务

[root@Mylinux ~]# service nfslock start
[root@Mylinux ~]# service nfs start
[root@Mylinux ~]# service portmap start[/demo]

Section 3:检测与重启 NFS 服务

[root@Mylinux ~]# /etc/init.d/nfs restart
[root@Mylinux ~]# /etc/init.d/nfs status
[root@Mylinux ~]# /etc/init.d/portmap status[/demo]

Section 4:设置自动启动 NFS 服务

[root@Mylinux ~]# chkconfig --level 345 portmap on
[root@Mylinux ~]# chkconfig --level 345 nfs on

四、客户端配置方法

1、手动挂载 NFS 服务器的共享目录到 NFS 客户端

[root@Mylinux ~]# mount -t nfs hostname(orIP):/directory /mountpoint[/demo]<pre>
注意:为了担心会不小心将 NFS 端挂进来的具有 SUID 权限档案的程序执行,root 可以将 NFS 所分享的目录以较为安全的情况挂载进来,即:“ mount -t nfs -o?nosuid,ro?hostname:/directory /mountponit ”
<table width="730">
<tbody>
<tr>
<td colspan="2" width="570">挂载 NFS 系统文件的可选参数如下</td>
</tr>
<tr>
<td width="115">soft</td>
<td width="453">当服务器端没回应时,会在 timeout 后重新连接,传回错误信息</td>
</tr>
<tr>
<td width="115">hard</td>
<td width="453">当服务器端没回应时持续在后台尝试连接</td>
</tr>
<tr>
<td width="115">intr</td>
<td width="453">当正在进行?NFS?请求时,允许用键盘中断</td>
</tr>
<tr>
<td width="115">nointr</td>
<td width="453">当正在进行?NFS?请求时,不允许用键盘中断</td>
</tr>
<tr>
<td width="115">timeo</td>
<td width="453">请求过期时间,单位为秒</td>
</tr>
<tr>
<td width="115">bg</td>
<td width="453">当第一次请求不成功,第二次的 mount 将放到后台执行</td>
</tr>
<tr>
<td width="115">fg</td>
<td width="453">一直在前台发送请求</td>
</tr>
<tr>
<td width="115">proto=tcp|udp</td>
<td width="453">修改使用 TCP 协议还是 UDP 协议来传输 nfs 的数据</td>
</tr>
<tr>
<td width="115">default</td>
<td width="453">hard 和 nointr</td>
</tr>
<tr>
<td width="115">rsize</td>
<td width="453">读操作的块大小,这个设置影响服务器和客户端的 nfs 缓存大小,如果有充足的内存和网络带宽,可以设置高些,如 32768(bytes)</td>
</tr>
<tr>
<td width="115">wsize</td>
<td width="453">写操作的块大小,这个设置影响服务器和客户端的 nfs 缓存大小,如果有充足的内存和网络带宽,可以设置高些,如 32768(bytes)</td>
</tr>
<tr>
<td colspan="2" width="570">查看帮助文件:man fstab、man -a mount</td>
</tr>
</tbody>
</table>
注意:如果要自动挂 NFS 共享目录,那么可以在/etc/fstab 文件中进行配置

2、使用 autofs 来实现自动挂载 NFS 服务器的共享目录到 NFS 客户端

1)为什么要使用 autofs
autofs?能够自动挂载卸载 nfs 和文件系统,并且在空闲的时候能够关闭 nfs 连接,降低系统负载。使用 autofs 要先关闭 netfs 服务,并注释掉/etc/fstab 里关于 nfs 的内容

2)如何使用 autofs 实现 NFS 服务
<pre class="prettyprint linenums" >
[root@Mylinux ~]#?chkconfig --level 35 autofs on
[root@Mylinux ~]#?/etc/init.d/autofs start
[root@Mylinux ~]#?vi /etc/auto.master
/nfs??? /etc/auto.nfs?? --timeout=60
[root@Mylinux ~]# vi /etc/auto.nfs
public????????? -ro,soft,intr?????????? 192.168.0.228:/data
[root@Mylinux ~]# reboot
[root@Mylinux ~]# cd /nfs
[root@Mylinux ~]# ls
[root@Mylinux ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda2 on /web type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[root@Mylinux ~]# cd public
[root@Mylinux ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hda2 on /web type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.0.228:/data on /nfs/public type nfs (ro,soft,intr,addr=192.168.0.228)

同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs

注意:NFS 客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式 mount,虽然可以成功 mount 上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准

3、配置/etc/fstab 文件来实现开机自动挂载 NFS 服务器的共享目录到 NFS 客户端
注意:?要开机挂载 nfs 文件系统还需要开启 netfs 服务,并且把挂载项写入到/etc/fstab

/etc/fstab 文件的语法格式
格式:?fs_spec   fs_file  ?fs_type   fs_options  fs_dump fs_pass
fs_spec 该字段定义希望加载的文件系统所在的设备或远程文件系统,?对于 nfs 这个参数一般设置为这样:192.168.0.1:/NFS
fs_file 本地的挂载点
fs_type 对于 NFS 来说这个字段只要设置成 nfs
fs_options 挂载的参数,可以使用的参数可以参考上面的 mount 参数
fs_dump 该选项被?” dump “?命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为:0
fs_pass 该字段被 fsck 命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统”/”对应该字段的值应该为:1,其他文件系统应该为:2。若该文件系统无需在启动时扫描则设置该字段为:0
查看帮助文件:man?fstab、man?-a?mount

4、与 NFS 有关一些其它指令
nfsstat: 查看 NFS 的运行状态,对于调整 NFS 的运行有很大帮助
rpcinfo -p hostname(orIP):?查看 rpc 执行信息,可以用于检测 rpc 运行情况的工具


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:NFS简介和配置
喜欢 (0)
[xiahuanming@gmail.com]
分享 (0)

您必须 登录 才能发表评论!