kernel-lite-small-file-nfs.md 5.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
# NFS<a name="ZH-CN_TOPIC_0000001052170493"></a>

-   [概述](#section18322139164413)
-   [注意事项](#section532912331467)
-   [开发指导](#section166873374711)

## 概述<a name="section18322139164413"></a>

NFS是Network File System(网络文件系统)的缩写。它最大的功能是可以通过网络,让不同的机器、不同的操作系统彼此分享其他用户的文件。因此,用户可以简单地将它看做是一个文件系统服务,在一定程度上相当于Windows环境下的共享文件夹。

NFS客户端用户,能够将网络远程的NFS服务端分享的目录挂载到本地端的机器中,运行程序和共享文件,但不占用当前的系统资源,所以,在本地端的机器看起来,远程服务端的目录就好像是自己的一个磁盘一样。

## 注意事项<a name="section532912331467"></a>

-   当前NFS文件不支持权限控制,请在创建NFS目录和文件时使用777权限。

-   当前NFS文件不支读阻塞和写阻塞。

-   当前NFS文件不支持信号功能。

-   当前NFS文件系统mount路径长度(不包含IP的长度)不超过255个字符,超过时返回ENAMETOOLONG错误。

-   当前NFS文件支持的操作有:open, close, read, write, seek, dup, dup2, sync, opendir, closedir, readdir, readdir\_r, rewinddir,  scandir, statfs, remove, unlink, mkdir, rmdir, rename, stat, stat64, seek64, mmap, mount, umount。

-   当前NFS支持TCP和UDP两种传输层协议,默认使用TCP。

-   open打开一个文件,参数有O\_TRUNC时,必须同时拥有写的权限,才会将文件中的内容清空。

-   在文件未关闭的情况下,rename\(\)函数重命名A为B之后,不会改变文件fd。

-   NFS功能目前处于beta测试阶段,可能存在功能不稳定的情况,建议您不要用于正式商用产品当中。


## 开发指导<a name="section166873374711"></a>

1.  **搭建NFS服务器**

    这里以Ubuntu操作系统为例,说明服务器端设置步骤。

    1.  安装NFS服务器软件。

        设置好Ubuntu系统的下载源,保证网络连接好的情况下执行:

        ```
        sudo apt-get install nfs-kernel-server
        ```

    2.  创建用于挂载的目录并设置完全权限

        ```
        mkdir /home/sqbin/nfs
        sudo chmod 777 /home/sqbin/nfs
        ```

    3.  设置和启动NFS server。

        修改NFS配置文件/etc/exports,添加如下一行:

        ```
        /home/sqbin/nfs *(rw,no_root_squash,async)
        ```

        其中/home/sqbin/nfs是NFS共享的根目录。

        执行以下命令启动NFS server:

        ```
        sudo /etc/init.d/nfs-kernel-server start
        ```

        执行以下命令重启NFS server:

        ```
        sudo /etc/init.d/nfs-kernel-server restart
        ```


2.  **设置单板为NFS客户端**

    本指导中的NFS客户端指运行OpenHarmony内核的设备。

    1.  硬件连接设置。

        OpenHarmony内核设备连接到NFS服务器的网络。设置两者IP,使其处于同一网段。比如,设置NFS服务器的IP为10.67.212.178/24,设置OpenHarmony内核设备IP为10.67.212.3/24,注意:此IP为内网私有IP地址,用户使用时有差异,以用户实际IP为准。

        OpenHarmony内核设备上的IP信息可通过ifconfig命令查看。

    2.  启动网络,确保单板到NFS服务器之间的网络通畅。

        启动以太网或者其他类型网络,使用ping命令检查到服务器的网络是否通畅。

        ```
        OHOS # ping 10.67.212.178
        [0]Reply from 10.67.212.178: time=1ms TTL=63
        [1]Reply from 10.67.212.178: time=0ms TTL=63
        [2]Reply from 10.67.212.178: time=1ms TTL=63
        [3]Reply from 10.67.212.178: time=1ms TTL=63
        --- 10.67.212.178 ping statistics ---
        4 packets transmitted, 4 received, 0 loss
        ```

        客户端NFS初始化,运行命令:

        ```
        OHOS # mkdir /nfs
        OHOS # mount 10.67.212.178:/home/sqbin/nfs /nfs nfs 1011 1000
        ```

        将从串口得到如下回应信息,表明初始化NFS客户端成功。

        ```
        OHOS # mount 10.67.212.178:/home/sqbin/nfs /nfs nfs 1011 1000
        Mount nfs on 10.67.212.178:/home/sqbin/nfs, uid:1011, gid:1000
        Mount nfs finished.
        ```

        该命令将服务器10.67.212.178上的/home/sqbin/nfs目录mount在OpenHarmony内核设备上的/nfs上。

        >![](../public_sys-resources/icon-note.gif) **说明:** 
        >本例默认nfs server已经配置可用,即示例中服务器10.67.212.178上的/home/sqbin/nfs已配置可访问。

        mount命令的格式为:

        ```
        mount <SERVER_IP:SERVER_PATH> <CLIENT_PATH> nfs
        ```

        其中“SERVER\_IP“表示服务器的IP地址;“SERVER\_PATH“表示服务器端NFS共享目录路径;“CLIENT\_PATH“表示设备上的NFS路径。

        如果不想有NFS访问权限限制,请在Linux命令行将NFS根目录权限设置成777:

        ```
        chmod -R 777 /home/sqbin/nfs
        ```

        至此,NFS客户端设置完毕。NFS文件系统已成功挂载。


3.  **利用NFS共享文件**

    在NFS服务器下新建目录dir,并保存。在OpenHarmony内核下运行ls命令:

    ```
    OHOS # ls /nfs
    ```

    则可从串口得到如下回应:

    ```
    OHOS # ls /nfs 
    Directory /nfs:                 
    drwxr-xr-x 0        u:0     g:0     dir
    ```

    可见,刚刚在NFS服务器上新建的dir目录已同步到客户端\(OpenHarmony内核系统\)的/nfs目录,两者保持同步。

    同样地,在客户端\(OpenHarmony内核系统\)上创建文件和目录,在NFS服务器上也可以访问,读者可自行体验。

    **平台差异性:**

    目前,NFS客户端仅支持NFS v3部分规范要求,因此对于规范支持不全的服务器,无法完全兼容。在开发测试过程中,建议使用Linux的NFS server,因为其对NFS支持很完善。