Linux课程笔记 NFS

1. NFS原理描述

主要功能是通过网络让不同的机器系统之间可以彼此共享文件或目录,允许NFS客户端将远端NFS服务器的共享目录挂载到本地的NFS客户端中。在本地NFS客户端的机器看来,NFS服务器端共享的目录就好像是自己的磁盘分区或者目录一样,一般用来存储共享视频,图片等静态数据。

2. RPC(Remote  Procedure  Call)

NFS支持的功能相当多,不同的功能使用不同的程序启动,随机取用一些未被使用的的小于1024的端口传输数据。

RPC最主要的功能就是记录每个NFS功能所对应的的端口号,并且将该信息传递给NFS客户端,让客户端可以连接到正确的端口上去。NFS启动时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,然后RPC服务使用固定的port 111来监听NFS客户端的请求,并将正确的NFS端口应答给客户端。

提示:


在启动NFS SERVER之前,首先要启动PRC服务(即portmap服务),否则NFS SERVER就无法向RPC服务注册。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文件后,是不需要重启NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs  -rv即可使修改的/etc/exports生效。

3. NFS工作原理简图

4. NFS SERVER端设置

4.1  查询系统版本

[[email protected] ~]$ cat /etc/redhat-release

CentOS release 5.8 (Final)

[[email protected] ~]$ uname -r

2.6.18-308.4.1.el5

4.2 NFS软件

要部署NFS服务,必须安装下面两个软件包:

1)  nfs-utils:NFS主程序

包括rpc.nfsd、rpc.mountd两个daemons等

2)  portmap:RPC主程序

4.3  查看NFS软件包

[[email protected] ~]# rpm -qa nfs-utils portmap

portmap-4.0-65.2.2.1

nfs-utils-1.0.9-60.el5

4.4  启动NFS相关服务
4.4.1  启动portmap服务

因为NFS及其辅助服务都是基于RPC协议的,所以要首先确保系统(客户端和服务端都要启动)中运行了portmap服务。


[[email protected] ~]# service portmap status

portmap 已停

[[email protected] ~]# service portmap start

启动 portmap:                                             [确定]

[[email protected] ~]# service portmap status

portmap (pid 2489) 正在运行...

如果portmap服务未启动,执行命令rpcinfo  -p localhost会报如下错误:


[[email protected] ~]# rpcinfo -p localhost

rpcinfo:无法同 portmapper 交互: RPC:远程系统错误 - 拒绝连接

正常情况下:


[[email protected] ~]# rpcinfo -p localhost

程序 版本 协议   端口

100000    2   tcp    111  portmapper

100000    2   udp    111  portmapper

4.4.2  启动NFS服务

[[email protected] ~]# /etc/init.d/nfs status

rpc.mountd 已停

nfsd 已停

rpc.rquotad 已停

[[email protected] ~]# /etc/init.d/nfs start

启动 NFS 服务:                                            [确定]

关掉 NFS 配额:                                            [确定]

启动 NFS 守护进程:                                        [确定]

启动 NFS mountd:                                          [确定]

正在启动 RPC idmapd:                                      [确定]

[[email protected] ~]# rpcinfo -p localhost

程序 版本 协议   端口

100000    2   tcp    111  portmapper

100000    2   udp    111  portmapper

100011    1   udp    773  rquotad

100011    2   udp    773  rquotad

100011    1   tcp    776  rquotad

100011    2   tcp    776  rquotad

100003    2   udp   2049  nfs

100003    3   udp   2049  nfs

100003    4   udp   2049  nfs

100021    1   udp  51795  nlockmgr

100021    3   udp  51795  nlockmgr

100021    4   udp  51795  nlockmgr

100003    2   tcp   2049  nfs

100003    3   tcp   2049  nfs

100003    4   tcp   2049  nfs

100021    1   tcp  42098  nlockmgr

100021    3   tcp  42098  nlockmgr

100021    4   tcp  42098  nlockmgr

100005    1   udp    809  mountd

100005    1   tcp    812  mountd

100005    2   udp    809  mountd

100005    2   tcp    812  mountd

100005    3   udp    809  mountd

100005    3   tcp    812  mountd

从NFS服务启动的提示,可以看出NFS默认需要启动的进程至少有:rpc.mountd,nfsd,rpc.rquotad。

(1) nfsd(rpc.nfsd)

这个daemon的主要功能是管理Client端是否能够登入主机,其中还包含登入者的判别。

(2) rpc.mountd

这个daemon的主要功能则是管理NFS的文件系统,当Client端顺利通过rpc.nfsd登入主机之后,在它可以使用NFS服务器提供的文件之前,还会经过文件使用权限的认证程序,它会去读NFS的配置文件/etc/exports来对比Client的权限,当通过这一关之后,Client端就可以取得使用NFS文件的权限。

4.5. nfs服务开机自启动

[[email protected] ~]# chkconfig --level 3 nfs on

[[email protected] ~]# chkconfig --level 3 portmap on

[[email protected] ~]# chkconfig --list |egrep "portmap|nfs"

nfs             0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:关闭  6:关闭

nfslock         0:关闭  1:关闭  2:关闭  3:关闭  4:启用  5:启用  6:关闭

portmap         0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

4.6. NFS配置文件路径

NFS配置文件默认路径为:/etc/exports

4.6.1 export文件格式

/etc/exports文件配置格式为:


NFS共享目录           客户端地址1(参数1,参数2)                  客户端地址2(参数1,参数2)

  1. NFS共享目录:为NFS服务端要共享的实际目录绝对路径
  2. 客户端地址:为服务授权的可访问共享目录的可兑换服务器地址,可以为单独的IP地址或域名,也可以为整个网段地址,还可以用*来匹配所有服务器
  3. 参数集:对授权的客户端的访问权限设置

生产常见的配置实例:


常用格式说明


要共享的目录  客户端IP 地址或IP段


配置例一


/ett/oldboy   10.0.0.0/24(rw,sync)  #注意红色部分没有空格


配置例二


/home/ryan  10.0.0.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000)


配置例三


/home/oldboy 10.0.0.15(ro) #只读共享

4.7. NFS权限设置

参数名称


参数用途


rw


表示读写权限


ro


表示只读权限


sync


请求或写入数据时,数据同步写入到NFS Server的硬盘后再返回


async


请求或写入数据时,先返回请求,再将数据写入到内存和缓存中。此参数可以提升NFS性能,但是会降低数据安全,不建议使用


no_root_squash


访问NFS Sever共享目录的用户如果是root的话,它对该共享目录就有root权限。避免使用


root_suqash


对于访问NFS Server共享目录的用户如果是root的话,则它的权限被压缩成匿名用户,同时它的UID和GID会变成nobody或nfsbody


all_squash


不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nobody或nfsnobody账号,在多个NFS客户端同时读写NFS Sever数据时,这个参数很有用


anonuid


参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nobody或nfsbody的UID值,当然我们也可以自行设置这个UID值,但是UID必须存在于/etc/passwd中。


anongid


同anonuid,区别就是把uid换成gid

提示:

  1. 大家可以通过执行man export查阅更多关于exports参数说明;
  2. 配置好nfs服务后,通过cat /var/lib/nfs/etab命令可以看到NFS配置默认自带的参数
  3. 通过cat /var/lib/nfs/rmtab查看有哪些客户端挂载到服务端
4.8. 开机挂载NFS

我们可以把共享的目录在/etc/fstab中进行配置,这样在开机启动就会自动加载mount的整个命令,而不需要开机再手工执行mount命令了,在/etc/fstab中加入如下配置即可:


192.168.1.3:/qinbf   /mnt      nfs        defaults  1  1

在生产环境中,对于共享的NFS目录,一般不会配置到/etc/fstab里,因为在客户端主机重启时,如果因为网络等原因连接不上nfs server时,就会导致客户端主机无法启动的厄运发生。一般会把mount -t nfs 192.168.1.3:/qinbf  /mnt  命令放到rc.local中来实现开机挂载,但是也会引起重启NFS客户端后,可能挂载NFS不成功。

4.9.  卸载NFS挂载目录

强制卸载NFS挂载的:umount  -lf  /mnt

无法卸载NFS挂载的原因:1)当前处于挂载点,必须要先退出才能卸载。2)nfs

server 挂了,nfs client会有问题

4.10. NFS实例

[[email protected] ~]# mkdir /qinbf

[[email protected] ~]# echo "/qinbf  192.168.1.0/24(rw,sync)">>/etc/exports

[[email protected] ~]# cat /etc/exports

/qinbf  192.168.1.0/24(rw,sync)

[[email protected] ~]# /etc/init.d/nfs reload   #不需要restart

[[email protected] ~]# showmount -e 192.168.1.3  #查看服务端有哪些目录可以挂载

Export list for 192.168.1.3:

/qinbf 192.168.1.0/24

[[email protected] ~]# cd /mnt   #未挂载前,此目录为空

[[email protected] mnt]# ll

总计 0

[[email protected] ~]# mkdir -p /qinbf/test/student    #对服务端进行一系列端的创建目录和文件的操作

[[email protected] ~]# cd /qinbf

[[email protected] qinbf]# touch aaa.txt

[[email protected] qinbf]# ll

总计 12

-rw-r--r-- 1 root root    0 06-25 23:28 aaa.txt

drwxr-xr-x 3 root root 4096 06-25 23:28 test

[[email protected] qinbf]# cd ..

[[email protected] /]# ll -d /qinbf

drwxr-xr-x 3 root root 4096 06-25 23:28 /qinbf

[[email protected] ~]# mount -t nfs 192.168.1.3:/qinbf  /mnt  #将服务端目录挂载到本地/mnt目录

[[email protected] ~]# cd /mnt/

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.7G  7.5G  19% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/qinbf    9.7G  2.3G  7.0G  25% /mnt  #挂载成功

[[email protected] mnt]# ll -a

总计 28

drwxr-xr-x  3 root root 4096 06-25 23:28 .

drwxr-xr-x 25 root root 4096 06-26 07:18 ..

-rw-r--r--  1 root root    0 06-25 23:28 aaa.txt

drwxr-xr-x  3 root root 4096 06-25 23:28 test

[[email protected] mnt]# mkdir client2   #在/etc/export文件已经有w权限,本地却不能创建目录

mkdir: 无法创建目录 “client2”: 权限不够

[[email protected] /]# chmod o+w /qinbf -R  #实际上,如果服务端本身没对外开放w权限,客户端也是没有w权限的

[[email protected] mnt]# mkdir client2

[[email protected] mnt]# ll

总计 28

-rwxr-xrwx 1 root      root         0 06-25 23:28 aaa.txt

drwxr-xrwx 2 nfsnobody nfsnobody 4096 06-25 23:42 client1

drwxr-xr-x 2 nfsnobody nfsnobody 4096 06-26 00:25 client2  #O位给了w,创建成功

drwxr-xrwx 3 root      root      4096 06-25 23:28 test

[[email protected] mnt]# umount /mnt  #当前的目录为mnt,所以无法卸载

umount: /mnt: device is busy

umount: /mnt: device is busy

[[email protected] mnt]# cd

[[email protected] ~]# umount /mnt  #退出挂载目录即可卸载

[[email protected] ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

或者

[[email protected] mnt]# umount -lf /mnt   #强制卸载的方法

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

5. NFS客户端mount挂载参数

由于NFS共享的是图片、视频之类的数据,所以不必使用到suid,exec等权限,因此在挂载的时候,可以使用这样的命令:


mount  -t nfs -o nosuid,noexec,nodev,rw,hard,intr,rsize=32768,wsize=32768 192.168.1.3:/qinbf /qinbf  #hard和init参数可以让在nfs服务出现异常的时候,按下ctrl+c退出。

6. NFS生产案例

实现把NFS服务端的/data目录共享指定主机,要求在在NFS客户端可读可写入数据,写入的数据能在NFS SERVER端看到,请给出操作步骤或者设置方法。


要点:无论什么版本的系统,nfs服务默认的配置里匿名UID和GID都为65534。32位bit的系统中的nfsnobody用户默认的UID恰好和nfs服务默认的匿名UID相同。

方法一:

确认系统是32位或者nfsnobody用户默认的UID是65534,就可以使用下面这种方法。

首先检查各台服务器的NFS服务状态:(test2是server,test3是client,test4是client)

[[email protected] ~]# grep nfsnobody  /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

[[email protected] ~]# /etc/init.d/portmap status

portmap 已停

[[email protected] ~]# /etc/init.d/portmap start

启动 portmap:[确定]

[[email protected] ~]# /etc/init.d/nfs start

nfs      nfslock

[[email protected] ~]# /etc/init.d/nfs start

启动 NFS 服务: [确定]

关掉 NFS 配额:[确定]

启动 NFS 守护进程:[确定]

启动 NFS mountd:[确定]

正在启动 RPC idmapd:[确定]

[[email protected] ~]# chkconfig --level 3 portmap on

[[email protected] ~]# chkconfig --list |grep portmap

portmap         0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:关闭  6:关闭

[[email protected] ~]# chkconfig --level 3 nfs on

[[email protected] ~]# chkconfig --list |grep nfs

nfs             0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:关闭  6:关闭

nfslock         0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

然后设置NFS SERVER

[[email protected] ~]# echo "/data 192.168.1.0/24(rw,sync)"> /etc/exports

[[email protected] ~]# tail /etc/exports

/data 192.168.1.0/24(rw,sync)

[[email protected] ~]# cat /var/lib/nfs/etab

/data 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,mapping=identity,anonuid=65534,anongid=65534)

在客户端机器上检测服务端设置情况

[[email protected] ~]# showmount -e 192.168.1.3

Export list for 192.168.1.3:

/data 192.168.1.0/24

[[email protected] ~]# showmount -e 192.168.1.3

Export list for 192.168.1.3:

/data 192.168.1.0/24

在客户端机器上挂载服务端目录:

[[email protected] ~]# cd /mnt

[[email protected] mnt]# ll

总计 0

[[email protected] mnt]# mount -t nfs 192.168.1.3:/data /mnt

[[email protected] mnt]# ll /mnt

总计 24

drwxr-xr-x 3 root root  4096 2012-06-08 htdocs

drwx------ 2 root root 16384 2012-05-28 lost+found

[[email protected] mnt]# mkdir test

mkdir: 无法创建目录 “test”: 权限不够

这是因为在server端/data这个目录的权限是755,当客户端机器创建目录,会转化成server端的nfsnoby用户创建,而other位没有w权限,故无权限创建目录。

[[email protected] /]# chmod o+w /data

[[email protected] mnt]# mkdir test

[[email protected] mnt]# ll

总计 32

drwxr-xr-x 3 root      root       4096 2012-06-08 htdocs

drwx------ 2 root      root      16384 2012-05-28 lost+found

drwxr-xr-x 2 nfsnobody nfsnobody  4096 07-19 08:11 test

[[email protected] ~]# cd /mnt

[[email protected] mnt]# ll

总计 32

drwxr-xr-x 3 root      root       4096 2012-06-08 htdocs

drwx------ 2 root      root      16384 2012-05-28 lost+found

drwxr-xr-x 2 nfsnobody nfsnobody  4096 07-19 08:11 test

方法二:

如果系统是64bit  5.x

需要在/etc/exports中添加参数

(rw,sync,all_squash,anonuid=4294967294,anongid=4294967294)

方法三:

万能的方法:所有的nfs的客户端和服务端都要建立oldboy用户及oldboy组,并指定ID。此方法不适用于服务器数量很大的情况。

[[email protected] /]# groupadd -g 1207 oldboynfs

[[email protected] /]# useradd -u 1207 -g 1207 oldboynfs

[[email protected] mnt]# groupadd -g 1207 oldboynfs

[[email protected] mnt]# useradd -u 1207 -g 1207 oldboynfs

[[email protected] mnt]# groupadd -g 1207 oldboynfs

[[email protected] mnt]# useradd -u 1207 -g 1207 oldboynfs

[[email protected] /]# mkdir /oldboynfs

[[email protected] /]# ll -d /oldboynfs/

drwxr-xr-x 2 root root 4096 07-19 08:29 /oldboynfs/

[[email protected] /]# chown -R /oldboynfs/

[[email protected] /]# tail -1 /etc/exports

/oldboynfs 192.168.1.0/24(rw,sync,all_squash,anonuid=1207,anongid=1207)

[[email protected] /]# /etc/init.d/nfs reload

[[email protected] mnt]# cd ..

-bash: cd: ..: Stale NFS file handle  #因为之前的挂载/data我已经注销了,所以无法退出当前目录。

[[email protected] mnt]# umount /mnt

umount: /mnt: device is busy

umount: /mnt: device is busy

[[email protected] mnt]# umount -lf /mnt   #强制卸载

[[email protected] mnt]# cd ..

[[email protected] /]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

#对test4进行同样的操作

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  2.3G  7.0G  25% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  20% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

[[email protected] /]# cat /var/lib/nfs/rmtab   #挂载目录历史

192.168.1.4:/qinbf:0x00000001

192.168.1.4:/data:0x00000001

192.168.1.5:/data:0x00000001

192.168.1.4:/oldboynfs:0x00000001

192.168.1.5:/oldboynfs:0x00000001

设置开机挂载

把/bin/mount -t nfs 192.168.1.3:/oldboynfs /mnt写进/etc/rc.local

7.人为模拟错误的学习方法

7.1 在客户端不卸载已挂载目录的前提下,观察停止各项服务对nfs服务的影响
7.1.1  停止客户端的portmap服务,测试是否影响已经运行的nfs服务

[[email protected] ~]# /etc/init.d/portmap stop

停止 portmap:                                             [确定]

[[email protected] ~]# cd /mnt

[[email protected] mnt]# ll

总计 8

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:09 test1

[[email protected] ~]# cd /mnt

[[email protected] mnt]# ll

总计 8

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:09 test1

#客户端机器test3停掉portmap服务之后,仍然可以创建目录test,并在同样是客户端机器test4中看到信创建的目录test,说明停止portmap服务不影响已经运行的nfs服务。

7.1.2  挂载server端的/oldboynfs目录之前,停止客户端机器的nfs服务(portmap服务仍然运行),观察挂载能否成功

[[email protected] /]# /etc/init.d/portmap status

portmap (pid 2680) 正在运行...

[[email protected] /]# /etc/init.d/nfs status

rpc.mountd (pid 2809) 正在运行...

nfsd (pid 2806 2805 2804 2803 2802 2801 2800 2799) 正在运行...

rpc.rquotad (pid 2794) 正在运行...

[[email protected] /]# umount /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

[[email protected] /]# /etc/init.d/nfs stop

关闭 NFS mountd:                                          [确定]

关闭 NFS 守护进程:                                        [确定]

关闭 NFS quotas:                                          [确定]

[[email protected] /]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

#证明客户端机器挂载server的目录时,并不需要运行nfs服务。

7.2  停止客户端的portmap服务和nfs服务,重启server端的nfs服务,观察对已经运行的nfs服务有何影响。

[[email protected] mnt]# /etc/init.d/portmap status

portmap (pid 2680) 正在运行...

[[email protected] mnt]# /etc/init.d/nfs status

rpc.mountd (pid 3063) 正在运行...

nfsd (pid 3060 3059 3058 3057 3056 3055 3054 3053) 正在运行...

rpc.rquotad (pid 3048) 正在运行...

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

[[email protected] mnt]# /etc/init.d/portmap stop

停止 portmap:                                             [确定]

[[email protected] oldboynfs]# rpcinfo -p localhost

程序 版本 协议   端口

100000    2   tcp    111  portmapper

100000    2   udp    111  portmapper

100011    1   udp   1006  rquotad

100011    2   udp   1006  rquotad

100011    1   tcp   1009  rquotad

100011    2   tcp   1009  rquotad

100003    2   udp   2049  nfs

100003    3   udp   2049  nfs

100003    4   udp   2049  nfs

100021    1   udp  38753  nlockmgr

100021    3   udp  38753  nlockmgr

100021    4   udp  38753  nlockmgr

100003    2   tcp   2049  nfs

100003    3   tcp   2049  nfs

100003    4   tcp   2049  nfs

100021    1   tcp  50878  nlockmgr

100021    3   tcp  50878  nlockmgr

100021    4   tcp  50878  nlockmgr

100005    1   udp   1021  mountd

100005    1   tcp    600  mountd

100005    2   udp   1021  mountd

100005    2   tcp    600  mountd

100005    3   udp   1021  mountd

100005    3   tcp    600  mountd

[[email protected] oldboynfs]# /etc/init.d/nfs restart

关闭 NFS mountd:                                          [确定]

关闭 NFS 守护进程:                                        [确定]

关闭 NFS quotas:                                          [确定]

关闭 NFS 服务:                                            [确定]

启动 NFS 服务:                                            [确定]

关掉 NFS 配额:                                            [确定]

启动 NFS 守护进程:                                        [确定]

启动 NFS mountd:                                          [确定]

[[email protected] oldboynfs]# rpcinfo -p localhost

程序 版本 协议   端口

100000    2   tcp    111  portmapper

100000    2   udp    111  portmapper

100011    1   udp    692  rquotad

100011    2   udp    692  rquotad

100011    1   tcp    695  rquotad

100011    2   tcp    695  rquotad

100003    2   udp   2049  nfs

100003    3   udp   2049  nfs

100003    4   udp   2049  nfs

100021    1   udp  56852  nlockmgr

100021    3   udp  56852  nlockmgr

100021    4   udp  56852  nlockmgr

100003    2   tcp   2049  nfs

100003    3   tcp   2049  nfs

100003    4   tcp   2049  nfs

100021    1   tcp  45426  nlockmgr

100021    3   tcp  45426  nlockmgr

100021    4   tcp  45426  nlockmgr

100005    1   udp    707  mountd

100005    1   tcp    710  mountd

100005    2   udp    707  mountd

100005    2   tcp    710  mountd

100005    3   udp    707  mountd

100005    3   tcp    710  mountd

#注意观察nfs服务重启前后,向portmap注册端口的变化,nfs和portmap的端口没变,其他的全部都改变了。

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

#先停止portmap服务,并未对已挂载的目录产生影响。

[[email protected] mnt]# mkdir test3

[[email protected] mnt]# ll

总计 24

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:09 test1

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:28 test2

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:36 test3

[[email protected] mnt]# /etc/init.d/nfs stop

关闭 NFS mountd:                                          [确定]

关闭 NFS 守护进程:                                        [确定]

关闭 NFS quotas:                                          [确定]

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

[[email protected] mnt]#

[[email protected] mnt]#

[[email protected] mnt]# mkdir test5

[[email protected] mnt]# ll

总计 40

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:09 test1

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:28 test2

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:36 test3

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:49 test4

drwxr-xr-x 2 oldboynfs oldboynfs 4096 07-19 16:50 test5

#重启并没有中断已经运行的nfs服务,目录仍然可以挂载写入。

7.3 卸载已经挂载的目录,然后停止客户端服务,观察是否能够重新挂载
7.3.1 卸载已经挂载的目录,停止portmap服务,观察能否重新挂载。

[[email protected] ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

[[email protected] ~]# /etc/init.d/portmap status

portmap (pid 3443) 正在运行...

[[email protected] ~]# /etc/init.d/nfs status

rpc.mountd (pid 3489) 正在运行...

nfsd (pid 3486 3485 3484 3483 3482 3481 3480 3479) 正在运行...

rpc.rquotad (pid 3474) 正在运行...

[[email protected] ~]# umount /mnt

[[email protected] ~]# /etc/init.d/portmap stop

停止 portmap:                                             [确定]

[[email protected] ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

[[email protected] ~]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

7.3.2 卸载已经挂载的目录,停止客户端的portmap服务,并重启server端的nfs服务,观察客户端能否重新挂载。

[[email protected] ~]# umount /mnt

[[email protected] ~]# /etc/init.d/nfs restart

关闭 NFS mountd:                                          [确定]

关闭 NFS 守护进程:                                        [确定]

关闭 NFS quotas:                                          [确定]

关闭 NFS 服务:                                            [确定]

启动 NFS 服务:                                            [确定]

关掉 NFS 配额:                                            [确定]

启动 NFS 守护进程:                                        [确定]

启动 NFS mountd:                                          [确定]

[[email protected] ~]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] ~]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

#客户端停掉portmap服务之后,重启server端的nfs,能够重新挂载目录

7.3.3 卸载已经挂载的目录,停止portmap服务和nfs服务,nfs服务,重启server端的nfs服务,观察能否重新挂载


[[email protected] /]# /etc/init.d/portmap status

portmap 已停

[[email protected] /]# /etc/init.d/nfs status

rpc.mountd 已停

nfsd 已停

rpc.rquotad 已停

[[email protected] /]# umount /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

[[email protected] /]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

#可以重新挂载

7.4 停止server端的nfs服务,观察对已经挂载目录的影响

[[email protected] ~]# /etc/init.d/nfs stop

关闭 NFS mountd:                                          [确定]

关闭 NFS 守护进程:                                        [确定]

关闭 NFS quotas:                                          [确定]

关闭 NFS 服务:                                            [确定]

[[email protected] mnt]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

hello,world!

#停止server端的nfs服务,客户端的挂载马上出现窗口死掉的异常,重启server端的nfs服务之后即可恢复。

或者在挂载的时候加上参数-o  hard,intr,按下ctrl+c即可退出窗口死掉的异常

回到最原始的测试:在不启动客户端的portmap和nfs服务,能否挂载server端的目录时,我发现答案是:可以!!


[[email protected] /]# /etc/init.d/portmap status

portmap 已停

[[email protected] /]# /etc/init.d/nfs status

rpc.mountd 已停

nfsd 已停

rpc.rquotad 已停

[[email protected] /]# mount -t nfs 192.168.1.3:/oldboynfs /mnt

[[email protected] /]# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2             9.7G  1.6G  7.7G  17% /

/dev/sda3             4.9G  139M  4.5G   3% /data

/dev/sda1              99M   18M   76M  19% /boot

tmpfs                 249M     0  249M   0% /dev/shm

192.168.1.3:/oldboynfs

9.7G  2.3G  7.0G  25% /mnt

8.NFS的优缺点

8.1  NFS的优点

1.简单

2.方便

3.可靠

8.2  NFS的局限

1.局限性是存在单点故障,如果nfs server挂了,所有的客户端不能访问共享目录,负载均衡及高可用方案可以弥补

2.在高并发的场合,NFS的性能有限

3.客户端认证时,基于ip和主机名的,安全性一般(用于内网则问题不大

4.NFS数据是明文的,完整性不作验证

5.多机器挂载服务器时,连接管理维护麻烦。尤其是NFS服务端除了问题之后,所有客户端都挂掉状态(可用autofs解决)

8.3 exportfs

exportfs命令可以不通过配置文件/etx/exports,直接在命令行中配置挂载。


[[email protected] ~]# mkdir /ex

[[email protected] ~]# export

export    exportfs

[[email protected] ~]# export

export    exportfs

[[email protected] ~]# exportfs -o sync,all_squash,mp,fsid=2 192.168.1.3:/ex

[[email protected] ~]# showmount -e 192.168.1.3

Export list for 192.168.1.3:

/ex        192.168.1.3

/oldboynfs 192.168.1.0/24

 

9. NFS调优

调优的步骤:

  1. 测量当前的网络、服务器和每个客户端的执行效率
  2. 分析收集来的数据并画出图表。查找出特殊情况,例如很高的磁盘和CPU占用、很高的磁盘使用时间
  3. 调整服务器
  4. 重复第一到第三直到到达你渴望的性能

与NFS性能有关的问题有很多,通常要考虑的有以下这些选择:

  1. WSIZE,RSIZE参数

WSIZE,RSIZE对于NFS的效能有很大的影响,设定了server端和client端之间来往数据块的大小,如果挂载时,使用了这两个参数,可以让客户端读取和写入数据时,一次性可以读写更多的数据包

  1. noatime、nodiratime

读写磁盘的时候,不更新文件的时间戳,减少和和磁盘的交互

可以通过time命令来检查添加参数之后,执行效率。

时间: 2024-11-08 20:46:19

Linux课程笔记 NFS的相关文章

Linux课程笔记 Day07 课上内容总结 SSH和rsync

一. SSH 1.1    SSH介绍 SSH是Secure Shell Protocol的简称.在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行数据传输.确保了传递的数据安全.SSH是专为远程登录会话和其他网络问题提供安全性的协议. 在默认状态下,SSH协议提供两个服务功能:一个是提供类似telnet远程链接服务器的服务,即上面提到的SSH服务:另一个是类似FTP服务的stp-server,借助SSH协议来传输数据,提供更安全的FTP服务. 特别提醒:SSH客户端

Linux课程笔记 Day01 课后作业总结

1.Linux启动流程分析 Linnux系统的启动过程如下: 加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备: 读取并执行第一个启动设备内MBR的boot loader(即是grub.spfdisk等程序): 依据boot loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序: 在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run level信息: Init执行/etc/rc.d/rc.sysinit来准备软件执行的操作环境

Linux课程笔记 Day01 课程内容总结

系统安装: 引导项简单介绍:在“boot:”提示后: 直接回车(Enter)——图形界面安装模式 linux text——字符界面安装模式 linux askmethod——提示用户选择安装方法(例如:nfs.ftp.http远程安装) linux  rescue——救援模式,如/etc/fstab文件损坏后的修复 memtest86——检测内存 (一)  选择安装方式 输入linux text进入字符安装界面模式,特点是方便.迅速. (二)  是否对光盘进行检查 一般不需要对光盘进行检查,可选

Linux课程笔记 Day02 课程内容总结

一 配置优化Centos5.XLinux系统 1.添加一个普通用户账号 生产环境,一般要避免直接使用root账户操作. 一次性设置密码小技巧:echo “qbf1932” | passwd –stdin  qinbf && history –c 2.  CentOS安装完毕,首先应该修改更新源,并升级到最新系统 国内速度较快的的常用更新源如下: —http://mirrors.sohu.com/ —http://mirrors.163.com/ 法一:将已经编辑好的CentOS-Base.

Linux课程笔记 Day06 课上内容总结

一.硬盘的基础知识 1. 硬盘的结构 1.1硬盘介绍 硬盘主要包括:盘片.磁头.主轴马达.控制电机.磁头控制器.数据转换器.接口.缓存等几个部分. 当今(2012年),互联网行业服务器领域(dell,hp)主流的有SATA硬盘(1万转/分,1-2T容量),SAS硬盘(1.5万转/分,300-600G),还有性能更高的SSD固态电子硬盘.线上应用的存储尽量用SAS硬盘,比如数据库.图片的线上应用,数据冷备份服务用SATA,比如站点程序及数据库.图片的备份等. 1.2 硬盘的内部结构图 1.3 硬盘

linux课程笔记--基础部分

Linux入门篇 Linux通常分区为 /--根分区,swap--交换分区,临时存储程序.文件.主分区+扩展分区. Linux文件系统类型则为ext2.ext3.ext4 在 Linux 中规定,每一个硬盘设备最多只能有 4个主分区. 修改网卡:vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes BOOTPROTO=static/dhcp IPADDR=192.168.1.166 NETMASK=255.255.255.0 GATEWA

Linux课程笔记 Day03 课程内容总结

1. 软硬链接的介绍和实践 1.1链接的概念 在linux系统中,链接分为硬链接和软链接.在默认不带参数的情况下,执行ln命令创建的是硬链接. 链接是指通过索引节点来进行链接.在linux系统中,多个文件名指向同一个索引节点是正常且允许的,这种是硬链接.硬链接的作用之一是允许一个文件有多个有效路径防止误删除源数据. 文件系统中,只要文件的索引节点还有一个以上的链接,只删除其中一个链接并不影响索引节点和其他的链接(即数据实体并未删除).只有当最后一个链接被删除,此时如果有新数据要存储到硬盘时,被删

Linux课程笔记 Day03 命令总结

egrep [使用权限] 所有使用者 [语法] egrep [选项] [查找模式] [文件名1,文件名2,……] [功能说明] 以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名. [参数] 选项: - E 每个模式作为一个扩展的正则表达式对待. - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式. - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量. - c 只显示

linux学习笔记--NFS

NFS分为客户端,服务端.客户端要访问服务端,要写从RPC服务获得端口. 整个流程分为: 1,服务端rpc服务先启动2,nfs服务把端口上报给rpc服务3,rpc客户端通过服务端的rpcbind拿到访问端口4,rpc客户端通过端口访问文件 rpc服务,在centos5.x下叫portmap,在centos6.x下叫rcpbind 客户端也要有rpc才能访问服务端 所以NFS的软件列表: nfs-utilsrpcbind 安装NFSyum install nfs-utils rpcbind最好客户