zoukankan      html  css  js  c++  java
  • NFS网络操作系统介绍以及相关应用

        1. NFS服务简介

           NFS是Network File System 的缩写,中文名称为网络文件系统,由Sun公司开发,功能是通过网络让不同的机器、不同的操作能够彼此分享数据,让应用程序在客户端通过网恋过访问位于服务器磁盘中的数据,是类Unix系统间实现磁盘文件共享的一种方法。

              NFS在文件传送或信息传送的过程中,依赖于RPC协议。RPC(Remote Procedure Call),中文名为远程过程调用,它是一种能使客户端执行其他系统中程序的一种机制,可以说NFS本身是使用RPC进行通讯的一个程序,凡是用到NFS的地方,无论是NFS Server或者NFS Client,都需要开启RPC服务,这样Server和Client才能通过RPC来实现PROGRAM PORT的对于,可以这么来理解,NFS是一个文件系统,RPC是负责信息的传输。

         2. NFS安装和配置

            在Linux下,安装NFS非常简单,只需要

            nfs-utils-*  : 包含基本的NFS命令与监控程序

            portmap-*  : 支持安全NFS RPC服务的连接

            当NFS服务启动后,它会有三个守护进程来配合协调工作。

            nfsd: 最基本的nfs守护进程,主要功能是管理客户端是否能够登陆服务器并提供服务,使用端口为2049

            mountd: RPC的守护进程,主要功能是管理NFS文件系统,当客户端通过nfsd登陆成功NFS服务器后,还需要鉴权操作。鉴权依据NFS的配置文件

                            /etc/exports

            portmap: 主动进行端口映射工作,当客户端尝试连接并且使用NFS时,portmap会将所管理NFS服务端口提供给客户端,从而使客户端可以通过该端口向服务器发出请求,使用端口为111,在新版本中,portmap被rpcbind取代。

           上面介绍了NFS的安装和守护进程,一般来说,需要先配置好服务器,再配置好客户端,就可以正常工作。 下面先介绍如何配置NFS服务器。

            NFS的常用目录

    /etc/exports              NFS服务的主要配置文件
    
    /usr/sbin/exportfs        NFS服务的管理命令
    
    /usr/sbin/showmount       客户端的查看命令
    
    /var/lib/nfs/etab         记录NFS分享出来的目录的完整权限设定值
    
    /var/lib/nfs/xtab         记录曾经登录过的客户端信息

    NFS服务器的配置主要是对/etc/exports的配置,其文件内容格式如下:

      <输出目录> [客户端1     选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

         共享目录     有权访问共享目录的主机  选项用来设置输出目录的访问权限(ro,rw)、用户映射等

      用户映射选项:

    • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
    • no_all_squash:与all_squash取反(默认设置);
    • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
    • no_root_squash:与rootsquash取反;
    • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
    • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

    其他选项:

    • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
    • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
    • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
    • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
    • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
    • no_wdelay:若有写操作则立即执行,应与sync配合使用;
    • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
    • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

    例如:将NFS Server 的/home/david/ 共享给192.168.1.0/24网段,权限读写,

            配置文件/etc/exports添加一行:  /home/david 192.168.1.0/24(rw)

        配置好exports文件后,就可以启动NFS服务器,nfs服务器程序依赖protmap和nfs程序,所以要先启动他们两个。

        执行 service portmap[nfs] start 启动服务,执行service portmap[nfs] status查看服务状态。

        凡是修改/etc/exports文件后,需要先执行service portmap restart,在执行service nfs restart,就可以使设置的参数生效。

        exportfs命令可以查看当前nfs配置文件内容。

    # exportfs [-aruv]

    -a 全部挂载或卸载 /etc/exports中的内容
    -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
    -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
    -v 在export的时候,将详细的信息输出到屏幕上。

    具体例子:
    # exportfs -au 卸载所有共享目录
    # exportfs -rv 重新共享所有目录并输出详细信息

       用户可以通过nfsstat来查看nfs的运行状态,通过rpcinfo来检测rpc运行情况,rpcinfo –p 查看哪些程序使用的RPC端口。

       showmount 查看目前有多少客户端连接。

        停止NFS服务器,执行service nfs stop,是否停止protmap看系统中还有谁在使用此服务来决定。

       

        服务器端的NFS设置完成后,下面来设置客户端的NFS。

        mount NFS服务器IP:共享目录 本地挂载目录

        例如: mount 192.168.1.108:/home/hao  /mnt/   表示将108服务器下的/home/hao目录挂载到本地mnt目录下。

        将  192.168.1.108:/home/hao  /mnt nfs defaults 0 0 写入/etc/fstab文件,就可以让系统开机启动时,自动挂载NFS文件系统。

        挂载成功之后,上述两个目录内的文件保持同步变化。卸载已挂账的NFS共享目录umount /home/hao。

        新版本上面,已经用rpcbind来代替portmap,用nfs-kernel-server来代替nfs。

        上面介绍了nfs挂载的相关知识,如果在共享目录里面创建文件,那么这个文件属于谁呢?这里面就牵涉到NFS的权限问题,下面来介绍。

      3. NFS的权限控制

         同一个文件夹,在两个不同的Linux系统上可以进行同时更改,创建。如果A系统上是A用户,B系统上是B用户,A用户在自己目录(非NFS共享目录)下创建文件,文件的属主属于A,B用户的属于B,这样是没有冲突的。如果A和B都在NFS共享目录里面创建文件,这又怎么来处理呢?

         如果客户端所在的共享目录无法创建文件,原因可能是NFS服务器端的共享目录本身的写权限没有开放给其他用户,这可以通过chmod 777 –R 目录来解决。

         NFS有很多默认的参数,打开/var/lib/nfs/etab 查看分享文件夹的完整权限设定值。

      image

       root用户创建文件的文件属主和组默认是nfsnobody,而普通用户写入文件时就是自己的名字,这保证了服务器的安全性

       

    3. 在嵌入式领域的应用

        使用NFSROOT来启动开发板,可以避免重复制作根文件系统(rootfs)镜像以及烧写文件系统,从而节省大量拷贝、传送文件的操作,节省开发时间。

        如何开启nfsroot功能?开启nfsroot功能需要具备如下几个条件:

         1.  宿主机(一般为虚拟机里面的Linux系统)要开启nfs server服务

         2. 开发板的网口要畅通

         3. 开发板的Linux内核要支持nfsroot

         1和2是硬件条件,一般都是支持的。第三项需要对内核和uboot进行相关设置才行,下面来介绍:

          首先,内核配置里面,要选中有关NFSROOT的选项

    image

         选择完毕后,编译运行,然后烧写到Flash指定分区就行。这一步是让kernel有能力去从nfs上挂载rootfs,但具体的路径参数还不知道,剩下的需要通过配置uboot终端bootargs参数,这个参数会传递给kernel,kernel根据此参数去找具体的路径并且挂载。下面介绍在Uboot中,启动nfs的相关参数

        在Uboot命令行中,输入

        setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.4.165:/home/NFSROOT/rootfs_dir

                               ip=192.168.4.99:192.168.4.1:255.255.255.0 mtdparts=hi_sfc:256K(boot),256K(env),1792K(kernel),-(rootfs)'

  • 相关阅读:
    Linux_Bash脚本基础
    Linux_Bash脚本基础
    Windows perl dbi oracle环境配置
    第八章 引用:
    bless 概念
    电力企业信息化建设解决方案之计量生产分析系统
    Tom和Jerry来了,Tom和Jerry走了——北漂18年(38)
    电力企业信息化建设解决方案之计量生产分析系统
    请用fontAwesome代替网页icon小图标
    Python Module_openpyxl_处理Excel表格
  • 原文地址:https://www.cnblogs.com/cherishui/p/4201850.html
Copyright © 2011-2022 走看看