建立Ubuntu nfs服务器

本文介绍如何在 Ubuntu 上搭建 NFS 服务器,以便嵌入式 Linux 开发中使用。包括安装 NFS 服务器及客户端、配置挂载目录权限、更新配置文件、重启服务及测试等步骤。
 建立Ubuntu nfs服务器

  在嵌入式 linux 开发的时候,常常需要使用Ubuntu nfs服务器以方便程序的调试.使用 nfs,用户可以将板子要用到的根文件系统放在主机目录下,开发板则通过以太网挂载到这个目录并将这个目录下的文件作为根文件系统的内容,这样用户的程序更新后不比重新烧写板子的根文件系统便能被重新使用,这点能够大大加快程序的调试.Ubuntu 下安装 nfs 服务器的步骤如下:

  1 进行 NFS 服务器端与客户端的安装:

  sudo apt-get install nfs-kernel-server nfs-common portmap

  安装客户端的作用是可以在本机进行Ubuntu nfs服务器的测试.


       2.配置挂载目录和权限

  emacs /etc/exports

  我的配置如下:

  以下是代码片段:

  1. # /etc/exports: the access control list for filesystems which may be exported   
  2. #       to NFS clients.  See exports(5).   
  3. #   
  4. # Example for NFSv2 and NFSv3:   
  5. # /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)   
  6. #   
  7. # Example for NFSv4:   
  8. # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)   
  9. # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)   
  10. #   
  11. /home/gexueyuan/mini2440/rootfs *(rw,sync,no_root_squash)  
# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/gexueyuan/mini2440/rootfs *(rw,sync,no_root_squash)

       /home/gexueyuan/mini2440/rootfs 表示允许其他计算机访问的目录

       ' * '星号表示允许任何ip访问,此处位置可以设置允许访问该目录的客户端ip地址,例如,192.168.1.*就表示允许192.168.1.X的ip来进行访问

      rw:表示可读可写

      sync:同步写磁盘(async:资料会暂存于内存当中,而不是直接写入硬盘)

      no_root_squash:表示客户端root用户对该目录具有写权限


(可选

3. 更新 exports 文件

  只要你更改了/etc/exports, 你不可以通过 sudo exportfs -r 来更新 这个文件


4  重启NFS服务

        sudo /etc/init.d/nfs-kernel-server start   / stop  启动命令/停止命令

  sudo /etc/init.d/nfs-kernel-server restart 重启 nfs 服务

启动结果:

  1. [sudo] password for gexueyuan:  
  2.  * Stopping NFS kernel daemon                                            [ OK ]  
  3.  * Unexporting directories for NFS kernel daemon...                      [ OK ]  
  4.  * Exporting directories for NFS kernel daemon...                               exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/home/gexueyuan/mini2440/rootfs".  
  5.   Assuming default behaviour ('no_subtree_check').  
  6.   NOTE: this default has changed since nfs-utils version 1.0.x  
  7.   
  8.                                                                          [ OK ]  
  9.  * Starting NFS kernel daemon                                            [ OK ]   
[sudo] password for gexueyuan:
 * Stopping NFS kernel daemon                                            [ OK ]
 * Unexporting directories for NFS kernel daemon...                      [ OK ]
 * Exporting directories for NFS kernel daemon...                               exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/home/gexueyuan/mini2440/rootfs".
  Assuming default behaviour ('no_subtree_check').
  NOTE: this default has changed since nfs-utils version 1.0.x

                                                                         [ OK ]
 * Starting NFS kernel daemon                                            [ OK ] 


5 进行测试

  尝试一下挂载本地磁盘(我的 linux 系统 IP 为 192.168.1.230,将 /home/gexueyuan/mini2440/rootfs 挂载到/mnt/nfs)

  以下是代码片段:

  $ sudo mount (-t nfs) 192.168.1.230:/home/gexueyuan/mini2440/rootfs  /mnt/nfs


运行结果:




  运行 $ df 看看结果

  1. Filesystem           1K-blocks      Used Available Use% Mounted on  
  2. /dev/sda6             40207968  17311896  20853656  46% /  
  3. none                    248580       208    248372   1% /dev  
  4. none                    254196       324    253872   1% /dev/shm  
  5. none                    254196       368    253828   1% /var/run  
  6. none                    254196         0    254196   0% /var/lock  
  7. /dev/sda1               112039     61774     44480  59% /boot  
  8. 192.168.1.230:/home/gexueyuan/mini2440/rootfs  
  9.                       40208000  17311872  20853696  46% /mnt  
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda6             40207968  17311896  20853656  46% /
none                    248580       208    248372   1% /dev
none                    254196       324    253872   1% /dev/shm
none                    254196       368    253828   1% /var/run
none                    254196         0    254196   0% /var/lock
/dev/sda1               112039     61774     44480  59% /boot
192.168.1.230:/home/gexueyuan/mini2440/rootfs
                      40208000  17311872  20853696  46% /mnt

  $ sudo umount /mnt

### 配置两台 Ubuntu 服务器之间的 NFS 共享 #### 安装 NFS Server 和 Client 软件包 为了实现文件共享,需确保两台服务器均已安装必要的软件包。 对于提供共享资源的服务器(即服务器1),应安装 `nfs-kernel-server`: ```bash sudo apt-get update && sudo apt-get install nfs-kernel-server ``` 而对于访问这些资源共享的客户端机器(即服务器2),则只需安装 `nfs-common` 即可[^1]。 #### 编辑 `/etc/exports` 文件 在服务器1上编辑 `/etc/exports` 文件来定义要被共享出去的目录及其权限。假设目标是让位于 `/opt` 的整个文件夹可供另一台特定 IP 地址的计算机读写,则可以在该文件中加入如下行: ```plaintext /opt *(rw,sync,no_subtree_check) ``` 这里的星号代表允许任何主机连接;实际应用时建议替换为具体的IP地址或网络范围以增强安全性。参数解释如下: - `no_subtree_check`: 取消子树检查机制,提高性能。 完成修改后保存并关闭此文件。 #### 导出新配置并重启服务 为了让新的导出项生效,需要重新加载NFS服务: ```bash sudo exportfs -a sudo systemctl restart nfs-kernel-server ``` 此时可以通过命令 `showmount -e localhost` 来验证当前已成功发布的共享路径列表[^3]。 #### 在客户端挂载远程文件系统 转到作为客户的第二台Ubuntu服务器,在这里先创建一个本地挂载点用于映射远端位置: ```bash sudo mkdir -p /mnt/server1_opt ``` 接着通过 mount 命令将其与来自服务器1上的对应位置关联起来: ```bash sudo mount -t nfs SERVER1_IP:/opt /mnt/server1_opt/ ``` 其中 `SERVER1_IP` 应当替换成实际的第一台服务器公网或局域网内的固定IPv4地址。如果一切正常的话,现在就可以像操作本机存储那样自由地浏览以及管理那些跨设备的数据了[^2]。 最后一步是为了使这种链接关系能够在每次开机之后自动建立而不必手动重复上述过程,可在/etc/fstab里追加一行记录: ```plaintext SERVER1_IP:/opt /mnt/server1_opt nfs defaults,timeo=14,retrans=3,proto=tcp,port=2049,rsize=8192,wsize=8192,bg,intr,x-systemd.automount 0 0 ``` 这行条目指定了更多优化选项如超时时间、重试次数等,并启用了后台模式(bg),以便即使暂时无法联系到对方也能继续尝试直至成功为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值