zoukankan      html  css  js  c++  java
  • Linux----------nfs服务器的搭建及常识

    一、nfs简介

    nfs(network file system)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。

    nfs主要适用用linux与Unix系统间文件共享,由于是nfs是明文传输,无法加密,而且只能基于IP认证,所以一般用于公司或校园的局域网。

    nfs的优点就是能大量节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,而且访问的时候就跟访问自己的家目录一样方便,而且数据同步非常稳定、迅速。

    nfs是运行在应用层的协议,监听于2049/tcp端口和2049/udp套接字。

    二、nfs的组成

    nfs可以由一台nfs服务器和N台客户机组成

    客户机通过tcp/ip协议网络远程访问存放在NFS服务器上的数据

    在nfs服务器正式启用前,根据实际环境和需求,配置一些nfs参数

    三、nfs的应用场景

    多个机器共享一台CDROM或其他设备,这样比多台机器都装一台CDROM方便的多

    大型局域网内,配置一台NFS服务器用于放置所有用户的home目录,不管你周围局域网哪台工作站上登录,都是同一目录,能给工作带来极大的方便

    不同客户端如果通过NFS观看影视文件,能节省大量本地空间

    在客户端完成的工作数据,可以备份到NFS服务器上自己的路径下

    四、nfs的工作原理

    nfs是通过rpc(远程过程调用协议)来实现网络文件系统共享的,rpc是通过网络从远程计算机上请求服务器,不需要通过底层网络技术的协议

    nfs服务器端运行了四个进程:

    nfsd

    mountd

    idmapd

    portmapper

    idmapd       ----实现用户账号的集中映射,把所有的账号都映射成NFSNOBODY,但在访问时却能以本地用户访问,所以需要目录的权限

    mountd       ----用户验证客户端是否在允许访问此NFS文件系统的客户端列表中,在就允许访问

    nfsd            ----nfs的守护进程,监听在2049端口上

    portmapper ---nfs服务器的rpc服务,监听在111端口,用于管理远程过程调用

    举个例子说明工作过程:

    客户机A想查看file文件的信息,此信息存储在远程NFS服务器端主机B(挂载在本地目录/nfs中),A把查看文件信息的请求发给内核,内核通过NFS模块明白是远程主机B上的,内核通过RPC协议吧请求封装成rpc请求通过tcp111端口发给主机B的portmapper,portmapper告诉A主机B主机的mountd服务所在端口,然后A去找mountd请求验证,mountd看他有的允许列表,如果A在表内,就给一个令牌给A,A拿着这个令牌去找B主机的nfsd进程,请求查看需要的文件,B主机的nfsd进程发起本地调用,向B内核请求查看主机A要查看的文件信息,B内核执行系统调用,将结果返回给nfsd服务,nfsd服务器收到后将结果封装成rpc请求报文并用过tcp/ip协议发给主机A

    五、配置文件

    nfs的主配置文件是/etc/exports,此文件定位NFS系统的输出目录(共享目录),访问权限参数,允许访问的主机参数,该文件默认为空,文件每一行提供一个共享目录的使者,其格式为

    《共享目录》 【 客户端1IP(权限参数)】 【客户端2IP(权限参数)】

    共享目录为你想要共享出去的目录绝对路径

    客户端ip为你想共享给哪些或哪个主机

    权限参数为用户访问的权限,用户映射的选项

    exportfs  -r 重读配置文件,使其立即生效,无需重启服务

    访问权限选项:

    访问权限选项说明
    ro 设置输出目录只读
    rw 设置输出目录可读写

    用户映射选项:

    用户映射选项说明
    all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
    no_all_squash 不将远程访问的所有普通用户及所属用户组都映射为匿名用户或用户组(默认设置)
    root_squash 将root用户及所属用户组都映射为匿名用户或用户组(默认设置)
    no_root_squash 不将root用户及所属用户组都映射为匿名用户或用户组
    anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该匿名用户为本地用户帐户(UID=xxx)
    anongid=xxx 将远程访问的所有用户组都映射为匿名用户组,并指定该匿名用户组为本地用户组(GID=xxx)

    常用的其他选项:

    其他选项说明
    secure 限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
    insecure 允许客户端从大于1024的TCP/IP端口连接NFS服务器
    sync 将数据同步写入内存缓冲区或磁盘中,效率较低,但可保证数据一致性
    async 将数据先保存在内存缓冲区中,必要时才写入磁盘
    wdelay 检查是否有相关的写操作,如果有则这些写操作一起执行,可提高效率(默认设置)
    no_wdelay 若有写操作则立即执行,应与sync配置使用
    subtree_check 若输出目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)
    no_subtree_check 即使输出目录是一个子目录,NFS服务亦不检查其父目录的权限,可提高效率
    nohide 若将一个目录挂载到另一个目录之上,则原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用hide选项

    六、nfs使用:

    nfs安装

    yum -y install rpcbind nfs-utils

    启动服务

    systemctl  start rpcbind nfs-server

    shoumount命令测试共享目录状态

      -a  显示指定NFS服务器的所有客户端主机及其所连接的目录

      -d  显示指定NFS服务器的已被客户端连接的所有输出目录

      -e显示指定NFS服务器的所输出的共享目录

    客户端临时挂载NFS文件系统

    yum install rpcbind nfs-utils -y

    mount -t nfs  ip:/path1    /path2  

    客户端设置自动挂载nfs

    vim /etc/fstab

    ip/path   /path2  nfs defaults,_netdev  0 0 

    mount -a 

    df -h

    检查输出目录所使用的选项:
    在配置文件/etc/exports中,即使在命令行中只设置了一两个选项,但在真正输出目录时,实际上还带有很多默认的选项。通过查看/var/lib/nfs/etab文件,可以看到具体使用了何选项

    七、NFS使用实例:

    1.手动搭建一个nfs服务器
    开放/nfs/shared目录,供所有用户查阅资料
    开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300

    服务器端
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    yum install rpcbind nfs-utils
    mkdir /nfs
    chmod 775 /nfs
    groupadd -g 300 nfs-upload
    useradd -u 300 -g 300 nfs-upload
    echo " /nfs 172.16.12.0/24(ro,all-squash,root_squash,anonuid=300,anongid=300,sync)" > /etc/export
    systemctl start rpcbind nfs-server
    systemctl enable nfs-server
    systemctl enable rpcbind
    exportfs -r

    客户端

    mkdir /nfs
    mount -t nfs 192.168.160.46:/data/nfs /nfs


    vim /etc/fstab
    192.168.160.46:/data/nfs /nfs nfs defaults,_netdev 0 0

    mount- a
    df -h

  • 相关阅读:
    更改套接字I/O缓冲大小
    读取创建套接字时默认IO缓冲大小
    利用getsockopt读取套接字可选项
    如何查看安装的ubuntu是多少位的系统
    使用虚函数所带来的扩展性
    python学习第17天----接口类/抽象类、多态、封装
    python学习第16天----继承、查找顺序(深度、广度优先)
    python学习第15天----名称空间、组合
    python学习第14天----函数复习、面向对象初始
    python学习第13天----lambda、sorted、map、filter、递归、二分查找
  • 原文地址:https://www.cnblogs.com/wangchengshi/p/10712647.html
Copyright © 2011-2022 走看看