文件服务器之二:nfs服务器的搭建及配置详解

服务器 struggling 1260次浏览 0个评论

NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的 。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!这种文件系统相当于windows下的网上邻居,只不过只能在linux与linux或Unix之间来用。
因为 NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。此时我们就得需要远程过程调用 RPC 的服务啦!
RPC: 远程过程调用协议(只转发封装报文,不接受客户端的请求) ,提供rpc服务的程序是portmap,其监听服务器的111/tcp ,111/udp端口,它支持二进制格式和文本格式文件的传输。
下面开始安装:

<code>

[root@localhost yum.repos.d]#yum install nfs-utils     #服务器端软件:nfs-utils
[root@struggle ~]# rpm  -ql  nfs-utils   #查看其安装生成的文件
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/request-key.d/id_resolver.conf
/etc/sysconfig/nfs
/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/nfs_cache_getent
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4
。。。。。。。

[root@localhost yum.repos.d]# service nfs start             #直接启动nfs会失败
Shutting down NFS daemon:                                  [FAILED]
Shutting down NFS mountd:                                  [FAILED]
Shutting down NFS quotas:                                  [FAILED]
Starting NFS services:                                     [  OK  ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [FAILED]
Starting NFS mountd:                                       [FAILED]
Starting NFS daemon:                                       [FAILED]
</code>

RH系操作系统在6.0版本之后没有portmap服务控制rpc的启动,由于NFS和nfslock的启动需要向rpc进行注册,rpc不启动的话就会报错。
解决方法:启动rpcbind&rpcidmap rpcbind是6.0版本后默认的RPC服务,所以要先于nfs启动。如果不启动rpcidmap则会造成用户权限的映射错误,用户的权限看起来是一串数字。

<code>
[root@localhost yum.repos.d]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@localhost yum.repos.d]# service rpcidmapd start
Starting RPC idmapd:                                   [  OK  ]
                                                        
[root@localhost yum.repos.d]# 
[root@localhost yum.repos.d]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                     [  OK  ]
Starting NFS daemon:                                     [  OK  ]

[root@localhost yum.repos.d]# rpcinfo -p localhost          #查看主机上rpc监听的所有端口号
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad              #后台的
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  35347  mountd
    100005    1   tcp  38693  mountd
    100005    2   udp  54063  mountd
    100005    2   tcp  40889  mountd
    100005    3   udp  40082  mountd
    100005    3   tcp  39359  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  48470  nlockmgr
    100021    3   udp  48470  nlockmgr
    100021    4   udp  48470  nlockmgr
    100021    1   tcp  40434  nlockmgr
    100021    3   tcp  40434  nlockmgr
    100021    4   tcp  40434  nlockmgr
</code>

nfs启动三个进程:nfsd(服务,主进程,监听在2049/tcp和2049/udp端口),mountd(挂载需要的),quotad(关于磁盘配额的)。
mountd和quotad端口,启动时向rpc注册,是会变的。

让mountd和quotad等进程监听在固定端口,编辑配置文件/etc/sysconfig/nfs
启动以下几个选项:

<code>
12 RQUOTAD_PORT=875
20 LOCKD_TCPPORT=32803
21 # UDP port rpc.lockd should listen on.
22 LOCKD_UDPPORT=32769
57 MOUNTD_PORT=892

[root@struggle log]# service nfs  restart   #重启服务
[root@struggle log]# rpcinfo  -p  localhost   #查看端口
    100024    1   tcp  46208  status
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad         #
    100005    1   udp    892  mountd       #刚设置的端口
    100005    1   tcp    892  mountd
    100005    2   udp    892  mountd
    100005    2   tcp    892  mountd
    100005    3   udp    892  mountd
    100005    3   tcp    892  mountd     
    100003    2   tcp   2049  nfs

/etc/exports是nfs的配置文件, 文件里多个客户之间使用空白符隔开, 每个客户端后面必须跟上小括号,里面定义访问特性,如访问权限等。
 例, /shared   192.168.0.0/16(ro,rsync)      /shared1 192.168.1.0/24(rw,sync)

文件系统导出属性:
	ro:只读
	rw:读写
	sync:同步
	async:异步
	root_squash: 将root用户映射为来宾账号;
	no_root_squash: 不映射,意味着root有至高权限
	all_squash: 全都转换成访客
	anonuid, anongid: 指定映射的来宾账号的UID和GID;

与配置文件相关的命令:exportfs
	-a:与-r,-u一块使用
	-r:重新导出/etc/exports中共享的文件
	-u:取消导出/etc/exports中共享的文件
	-v:显示详细信息
[root@localhost vsftpd]# exportfs -arv   重新显示所有导出的项目
exporting 192.168.0.0/16:/tmp/shared

[root@localhost vsftpd]# exportfs -au    取消导出
[root@localhost vsftpd]# exportfs -ar	 重新导出

showmount:客户端和服务器端都可以使用

[root@struggle log]# showmount -e 192.168.0.130     #查看NFS服务器“导出”的各文件系统
Export list for 192.168.0.130: 
/tmp/test   192.168.0.0/16
/tmp/shared 192.168.0.0/16 
[root@struggle log]# showmount -a 192.168.0.130   #查看NFS服务器所有被挂载的文件系统及其挂载的客户端对应关系列表
Export list for 192.168.0.130:
/tmp/test   192.168.0.128
/tmp/shared 192.168.1.135
[root@struggle log]# showmount -d 192.168.0.130   #显示NFS服务器所有导出的文件系统中被客户端挂载了文件系
Export list for 192.168.0.130:
/tmp/test   
/tmp/shared 

客户端使用mount挂载nfs:
mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT  /PATH/TO/SOMEWHRERE
[root@struggle ~]# mkdir /mnt/shared
[root@localhost ~]# mount -t nfs 192.168.0.130:/root/shared /mnt/shared
mount.nfs: access denied by server while mounting 192.168.0.130:/root/shared
#出现此问题时,可能是由于服务端权限设置的问题
</code>

挂载好后则可以在文件中随意写入。
rpc基于用户的身份很薄弱,若用户端为tom,服务器端没有此用户,则保存其创建的文件为其uid,若有此用户,且两者的uid不同,则保存为服务器端的用户的uid

将其写入/etc/fstab中,开机自动挂载

<code>
[root@struggle ~]# vim /etc/fstab
192.168.0.130:/tmp/shared           /mnt/shared             nfs     defaults,_rnetdev        0 0
#_rnetdev选项会使挂载不到的网络文件系统自动跳过,不然挂载不到就开不了机了



</code>

DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址