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)'

  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/cherishui/p/4201850.html
Copyright © 2011-2022 走看看