天天看点

nfs

1.nfs:network file systen

nfs是一种文件系统,也可以称为一种协议(只能使用在类unix的系统上,windows不适用),文件系统都是在内核级别实现的,nfs也是在内核级别实现,它的工作机制严重依赖与rpc(远程过程调用).他是如何实现的呢?服务器端有本地的磁盘文件系统,在服务器级别内都是ext4(ext2,ext3都可)类型的,rpc相当于一个超级守护进程帮本地磁盘监听在一个套接字上,只有当客户端发起远程调用时,才在这个套接字上表现为nfs的文件系统类型,而客户端的内核中有nfs模块,当客户端需要挂载nfs系统时,就会想服务器发起请求,当请求回来时,就会把服务器端的共享目录以nfs的文件系统类型挂载在本地,客户端就可对该文件系统实行增删查该的操作,但是执行的操作的结果都是保存在服务器端.

1-1监听端口:2049/tcp,2049/udp

用户认证:nis(network infromation service)

nfs本身不做用户认证,他只做ip认证,nis可以帮他完成用户认证,和账户映射.

2.rpc(远程过程调用)

2-1:原理

nfs在访问远程主机的时候,会先跟rpc会话,rpc会随机挑一个未使用的端口使用(任何端口),来检查该客户端是否有权限访问nfs,然后去调用服务器端被rpc管理的服务(nfs)来完成客户端和服务器端的连接

2-2.安装nfs-utils,一般装系统的时候就装好了

nfs

2-3启动nfs,有时候启动不了,要注意启动rpcbind(service rpcbind start)

使用命令:service nfs start

nfs

2-4.查看rpc监听的端口,注意:moutd的端口每次重启都会改变

rpcinfo –p localhost

注意几个进程:

mounted:挂载守护进程,负责客户端来源认证,认证通过才允许挂载

nfsd:文件读写操作

idmapd:id映射进程,把客户端id号映射成服务器的用户名

rquotad:磁盘配额,限制用户使用的空间大小

nlockmgr:锁,禁止一个文件被多个用户访问

nfs
nfs
nfs

3.rpc

3-1.安装rpcbind

使用命令:yum –y install rpcbind

nfs

3-2.查看其他主机rpcbind监听端口的信息

rpc监听端口:111/tcp,111/udp

rpcinfo –p host

nfs

4.配置

4-1.配置nfs配置文件

nfs很简单,只要配置好这文件就可以了(最好导出整个分区,不要导出单个目录),挂载的客户端可以使用网域;示例:/share 912.168.1.1(rw,no_root_squash)

/etc/exports

nfs

4-2.重启服务

实际生产中不要重启,这里只是为了演示,还有其他命令可以重新加载

使用命令:service nfs restart

nfs

4-3.在客户端查看服务器端是否有共享文件

之前有个客户端没有showmount命令,经测试是nfs-utils未安装,安装后可以解决

使用命令:showmount –e ip

nfs

4-4.在客户端挂载文件系统

使用命令:mount –t nfs 192.168.1.4:/share /nfs

nfs

注意:这时候客户端的root用户是没有写入权限的,因为在配置文件中有个root_squash,这是默认设置,意思是让客户端的root用户在服务器端的权限最小(如果不想这样可以使用no_root_squash),客户端的root就可以执行写操作了,建议使用默认.all_squash,减少所有来访用户的权限.注:文件系统的文件权限最终决定文件系统的权限和网络文件系统的权限的交集.适用所有文件系统

4-5.在客户端建立一个uid为500,用户名为nfs的账户,在服务器端建立一个uid为500,用户名为ldf的账户

使用命令:useradd –u 500 [nfs|ldf],这里就不演示了

在客户端的nfs目录下创建一个aa的文件

nfs
nfs

这是为什么呢?因为nfs的特殊管理机制,在客户端创建的文件,会在一个中间服务器(用户认证和映射服务器),检查账户,如果客户端和服务器端的用户id相同,用户名不同,则创建的目录为nobady.所以最好在每个服务器或客户端创建相同的id号和用户名

4-6.重新导出不重启的方式,在服务器上

使用命令:exportfs -rav:重新导出所有文件系统

exportfs -uav:取消导出所有文件系统

4-7:开机自动挂载文件系统

编辑:/etc/fstab

nfs

补:需要让客户端访问服务器端的文件并且有读写权限,需设置服务器端的文件夹权限

如:服务器端的文件夹为root:root,要让uid号为1000的用户可以读写,sefacl -m u:1000:rwx /file.

  然后在客户端建立一个uid号为1000的用户,用这个用户访问即可

就说到这里吧.................

继续阅读