NFS基本运用

NFS:Network File System

  1. 概述nfs:

传统意义上,文件系统在内核中实现;

RPC: 远程过程调用,函数调用(远程主机上的函数)一部分功能由本地程序完成,另一部分功能由远程主机上的函数完成。

Nfs:进程发起系统调用-ànfs在内核里工作为一个模块—>通过网络-à对方监听在套接字上收到参数与调用函数信息à交给执行的进程–à通过进程发起系统调用–à得到返回值通过套接字给对方主机送回

Remote Procedure Call protocol

  1. 半结构数据:由于远程发起了远程系统调用那么参数等等并调用函数如何协商?

XML:eXtended Mark Language重量的

<integer>123</integer>

JSON:轻量级的

http:restful是一种设计方式,它可以基于http协议及https封装。

  1. NFS: Sun公司开发

NFSv1:未出厂

NFSv2::udp

NFSv3:tcp、udp保障数据传输安全可靠,无状态的,大量数据,性能不行。

NFSv4.0:centos6.4开始支持03

NFSv4.1:并行存储,分布式文件系统

NFSv4.2:进一步增强

pNFS: parallel:允许并行存储,数据与元数据分开存储。

Windows, MAC OS都在想方设法支持nfs。

  1. 属主、属组问题
    1. 早期nfs只认id,用户不一致现象
    2. Root用户的问题,挤压为权限最小的用户。ànfsnobady
    3. 如果两边用户不统一,sun想用nis解决这个问题,视图统一管理账号。
    4. NIS: Network Information System

      身份认证:集中于某服务器完成身份认证,明文认证,单点故障全部瘫痪隐患,为了解决属主属组问题。基本实际未部署。Ldap+corppers

    ·V4上有个进程Idmap,账户全部映射结果nfsnobady,看到的还是账号本身。

  2. NFS:仅支持基于IP的认证
    1. 需要守护进程mountd,用户请求来了,交给mound看是否允许,如果允许,就发给你nfs进程地址,给你发令牌。
  1. nfs服务器进程:nfsd, mountd, idmapd
    1. 客户端:锁管理,连接状态信息。

RPC:rpc监听

  1. Mount监听的端口由rpc服务决定,半随机端口

NFSd:使用端口2049/tcp, 2049/udp

RPC服务:portmapper

Centos6.4以前叫pmap

Centos6.4以后叫portmapper

  1. 运行原理
    1. 基于rpc服务

rpcinfo: report RPC information

[root@mx2 chongqing]# rpcinfo –p

先找portmapper—>umount端口-à令牌-ànfs

  1. 启动服务

[root@localhost ~]#Yum –y install nfs-utils

[root@localhost ~]# service rpcbind start

[root@localhost ~]# service nfs start

[root@localhost discuz]# rpm -ql nfs-utils

  1. 程序组织结构

/etc/nfsmount.conf

/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 安全

挂载nfs文件系统视同的命令

/sbin/mount.nfs

/sbin/mount.nfs4

/sbin/umount.nfs

/sbin/umount.nfs4

Rpc相关

/usr/sbin/rpc.gssd

/usr/sbin/rpc.idmapd

/usr/sbin/rpc.mountd

/usr/sbin/rpc.nfsd

/usr/sbin/rpc.svcgssd

  1. 查看程序是否正常

[root@localhost ~]# service nfs start

Quotas 磁盘配额相关

[root@localhost ~]# rpcinfo -p

Nfs端口固定2049

Mountd半随机

  1. 查看NFS服务器端共享的文件系统:

showmount -e NFSSERVER_IP

[root@localhost ~]# showmount -e 11.100.45.82

Export list for 11.100.45.82:

/nfs/share 11.100.45.76

  1. 挂载NFS文件系统:

mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point

    [root@localhost ~]# mount -t nfs 11.100.45.82:/nfs/share /htdocs/www

  1. 配置挂载/etc/exports:

文件系统     客户端(选项) 客户端(选项)

客户端:IP、FQDN或DOMAIN、NETWORK

exportfs:维护exports文件导出的文件系统表的专用工具:

        export -ar: 重新导出所有的文件系统

[root@localhost share]# exportfs –arv

export -au: 关闭导出的所有文件系统

export -u FS: 关闭指定的导出的文件系统

  1. 开机自动挂载nfs:

/etc/fstab

SERVER:/PATH/TO/EXPORTED_FS /mount_point     nfs     defaults,_netdev     0 0

  1. 完整的nfs初始化过程:
    1. 安装启动服务

[root@localhost ~]#Yum –y install nfs-utils

[root@localhost ~]# service rpcbind start

[root@localhost ~]# rpcinfo –p

[root@localhost ~]# service nfs start

  1. 编辑配置文件加入:

[root@localhost ~]# vim /etc/exports

/nfs/share 11.100.45.76(rw)

  1. 重启服务:

查看nfs共享文件夹

  1. 在11.100.45.76上挂载nfs文件夹

[root@localhost ~]# showmount -e 11.100.45.82

Export list for 11.100.45.82:

/nfs/share 11.100.45.76

[root@localhost ~]# mount -t nfs 11.100.45.82:/nfs/share /htdocs/www

  1. 在11.100.45.76上试着创建文件:被拒绝

[root@localhost ~]# cd /htdocs/www/

[root@localhost www]# touch 111.111

touch: cannot touch `111.111′: Permission denied

  1. 在11.100.45.82 nfs服务器上试着创建文件:这时82、76看见属组属主都是root

[root@localhost ~]# cd /nfs/share/

[root@localhost share]# touch 11.11

[root@localhost share]# ls -l

total 0

-rw-r–r– 1 root root 0 Mar 17 15:13 11.11

  1. 因为nfs默认是压缩根的(root_squash),下面我不压缩root

编辑:[root@localhost ~]# vim /etc/exports 加入:

/nfs/share 11.100.45.76(rw,no_root_squash)

成功创建了文件属组属主都为root服务器客户端都一致

  1. 在服务器82上创建jia gid=888 uid=888

在客户端76上创建 jiazi gid=888 uid=888 jia gid=887 uid=887

结果为:jiazi可以在76上创建文件,而jia不能,所以他依照的是id而不是名字

验证如下:

在82上创建jiazi,并给予权限:

[root@localhost ~]# groupadd -g 888 jia

[root@localhost ~]# useradd -u 888 jia -g 888

[root@localhost ~]# setfacl -m u:jia:rwx /nfs/share/

在76上创建,并试着创建文件

[root@localhost www]# groupadd -g 888 jiazi

[root@localhost www]# useradd -u 888 -g 888 jiazi

[root@localhost www]# groupadd -g 887 jia

[root@localhost www]# useradd -u 887 -g 887 jia

[root@localhost www]# su – jiazi

[jiazi@localhost ~]$ pwd

/home/jiazi

[jiazi@localhost ~]$ cd /htdocs/www/

[jiazi@localhost www]$ touch jiazi.txt

[jiazi@localhost www]$ ls -l

total 0

-rw-r–r– 1 root root 0 Mar 17 15:13 11.11

-rw-r–r– 1 root root 0 Mar 17 15:19 22.22

-rw-rw-r– 1 jia jia 0 Mar 17 15:35 jiazi.txt

[jiazi@localhost www]$ exit

logout

[root@localhost www]# su – jia

[jia@localhost ~]$ cd /htdocs/www/

[jia@localhost www]$ touch jia.txt

touch: cannot touch `jia.txt’: Permission denied

  1. 改为all_squash后,所有无法创建写入了

  1. 给nfsother写入权限后,可以创建文件

全部被映射到了nfsnobody

  1. 下面全部映射到httpuser上面。

编辑[root@localhost share]# vim /etc/exports

加入:

/nfs/share 11.100.45.76(rw,all_squash,anonuid=900,anongid=900)

[root@localhost share]# groupadd -g 900 httpuser

[root@localhost share]# useradd -g 900 -u 900 httpuser

[root@localhost share]# exportfs -ar

[root@localhost share]# chmod og-w /nfs/share/

[root@localhost share]# chown httpuser:httpuser /nfs/share/

服务器端看见的是映射的用户名,而客户端全部看见的是nobody

补充材料:

/etc/exports 文件中的项的格式相当简单。要共享一个文件系统,只需要编辑 /etc/exports 并使用下面的格式给出这个文件系统(和选项)即可:

directory (or file system) client1(option1, option2) client2(option1, option2)

常用选项

有几个常用的选项可以对 NFS 实现进行定制。这些选项包括:

secure: 这个选项是缺省选项,它使用了 1024 以下的 TCP/IP 端口实现 NFS 的连接。指定 insecure 可以禁用这个选项。

rw: 这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读的。

async: 这个选项可以改进性能,但是如果没有完全关闭 NFS 守护进程就重新启动了 NFS 服务器,这也可能会造成数据丢失。

no_wdelay: 这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项。

nohide: 如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用 hide 选项。

no_subtree_check: 这个选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。

no_auth_nlm: 这个选项也可以作为 insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。

mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录。

fsid=num: 这个选项通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。

用户映射

通过 NFS 中的用户映射,可以将伪或实际用户和组的标识赋给一个正在对 NFS 卷进行操作的用户。这个 NFS 用户具有映射所允许的用户和组的许可权限。对 NFS 卷使用一个通用的用户/组可以提供一定的安全性和灵活性,而不会带来很多管理负荷。

在使用 NFS 挂载的文件系统上的文件时,用户的访问通常都会受到限制,这就是说用户都是以匿名用户的身份来对文件进行访问的,这些用户缺省情况下对这些文件只有只读权限。这种行为对于 root 用户来说尤其重要。然而,实际上的确存在这种情况:希望用户以 root 用户或所定义的其他用户的身份访问远程文件系统上的文件。NFS 允许指定访问远程文件的用户——通过用户标识号(UID)和组标识号(GID),可以禁用正常的 squash 行为。

用户映射的选项包括:

root_squash: 这个选项不允许 root 用户访问挂载上来的 NFS 卷。

no_root_squash: 这个选项允许 root 用户访问挂载上来的 NFS 卷。

all_squash: 这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。

anonuid 和 anongid: 这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。

客户端挂载时可以使用的特殊选项:

Client

Mounting remote directories

Before mounting remote directories 2 daemons should be be started first:

rpcbind

rpc.statd

rsize 的值是从服务器读取的字节数。wsize 是写入到服务器的字节数。默认都是1024, 如果使用比较高的值,如8192,可以提高传输速度。

The timeo value is the amount of time, in tenths of a second, to wait before resending a transmission after an RPC timeout. After the first timeout, the timeout value is doubled for each retry for a maximum of 60 seconds or until a major timeout occurs. If connecting to a slow server or over a busy network, better performance can be achieved by increasing this timeout value.

The intr option allows signals to interrupt the file operation if a major timeout occurs for a hard-mounted share.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值