NFS

来源:互联网 发布:python 拉钩 源代码 编辑:程序博客网 时间:2024/06/06 13:09

简介:

nfs是工作在内核中,以底层文件系统的方式进行功能实现,以模块的方式加入内核。
这里写图片描述


NFS原理:

这里写图片描述

VFS

linux中的虚拟文件系统,应用程序进行本地文件系统访问时访问的是,虚拟文件系统.而虚拟文件系统在进行真正文件系统的访问
当需要访问某些文件系统独有的特性时,当vfs不支持时,可以访问文件系统提供的开发接口

NFS

NFS使用的文件系统,基于rpc的文件系统
rpc:远程过程调用
RPC采用C/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

资源访问过程

客户端进行资源访问
VFS寻找NFS
NFS进行基于网络的RPC远程过程调用

portmapper

这里写图片描述

客户端:

这里写图片描述
客户端实现访问远程的nfs服务器需要自身带有nfs的文件系统驱动。即nfs.ko 模块
rpm -qf /usr/lib/modules/3.10.0-514.el7.x86_64/kernel/fs/nfs/nfs.ko
kernel-3.10.0-514.el7.x86_64

nfs-utils
nfs的补充包。服务端与客户端共同使用,其中包含服务端的配置文件。以及客户端的功能实现,客户端访问网络NFS服务时,客户端必须安装nfs-utils
showmount
showmount -e <远程nef server的地址>      查看远程主机共享的目录
客户端挂载:
windows挂载:

windows 挂载NFS
windows需安装NFS文件系统服务,以支持linux 的NFS文件系统
mount 192.168.8.107:/app/nfsdir/dir1

linux挂载:

linux mount挂载
格式:mount [-o 挂载选项,[挂载选项]] 目标网络地址:目标的文件系统地址 挂载至本地的文件系统地址。

挂载选项:
vers=<数字>
指定挂载的级别
mount 192.168.0.2:/app/nfsdir/dir1 /mnt/nfs1 -o vers=3
fg(默认)前台挂载
bg后台挂载
以后台的方式进行挂载
mount -o bg 192.168.0.2:/app/nfsdir/dir1 /mnt/nfs1
hard(默认)持续请求, soft 非持续请求
intr 和hard配合,请求可中断
rsize和wsize 读和写block大小, rsize=32768
_netdev 无网络不挂载

fstab配置文件挂载
72.16.0.1:/public /mnt/nfs nfs defaults 0 0

服务端:

这里写图片描述
配置文件:
主配置文件 /etc/exports
附加配置文件 /etc/exports.d/*.exports
导出文件配置格式:
格式:
文件路径 主机(共享特性1,共享特性2) 主机(共享特性1,共享特性2)

主机表示:
单个主机
IP , FQDN
网段:
172.16.0.0/255.255.0.0
172.16.0.0/16
主机名通配 *.jinbus.com
* 统配符 所有主机

特性
默认选项: (ro,sync,root_squash)
ro,rw 只读和读写
root_squash
权限压缩,即对于root登录时 在nfsserver上被映射为另外一个权限相对小的用户(nfsnobody)对于非root用户,不进行压缩
no_root_squash
不对root进行权限压缩,
anonuid= anongid=
压缩为特定的用户,即将要进行压缩的用户压缩为指定的UID用户与GID组
async 异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享
no_all_squash (默认)保留共享文件的UID和GID
all_squash 所有远程用户(包括root)都变成nfsnobody
root_squash (默认)远程root映射为nfsnobody,UID为65534, CentOS5之前是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户
anonuid和anongid 指明匿名用户映射为特定用户和组,而非nfsnobody,可配合all_squash使用

伪根设置
格式:
文件路径 主机(fsid=0,srossmnt) #设置伪根的/
伪根绝对路径/子文件夹 主机(特性)
例:
vim /etc/fstab
/data/read /export/read none bind 0 0
/data/write /export/write none bind 0 0

vim /etc/exports
/export *(fsid=0,srossmnt)
/export/read 192.168.0.0/24(ro)
/export/write 192.168.0.0/24(rw)

端口配置
/etc/sysconfig/nfs

导出文件的操作命令
exportfs -r
重载配置文件
exportfs -v
查看导出的文件系统
exporfs–a
输出本机所有共享
exportfs–au
停止本机所有共享