第十节 挂载NFS 网络文件系统

这篇具有很好参考价值的文章主要介绍了第十节 挂载NFS 网络文件系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章节将介绍如何挂载NFS 网络文件系统,为后面的主机编译生成的ARM Linux 应用传输到开发板做准备。

网络文件系统简介

网络文件系统,常被称为NFS(Network File System),它是一种非常便捷的在服务器与客户端通过网络共享文件的方式,具体见下图。

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

开启了NFS 服务后,客户端访问服务器共享的文件时如同访问本地存储器(磁盘/SD 卡/NANDFLASH 等)上的文件一样,对于上层应用来说没有任何差别,在嵌入式开发时,我们常常利用这个特性在主机上共享文件,主要应用场景如下:

  • 在NFS 服务器上编译应用软件,客户端(开发板)通过NFS 访问并运行应用程序进行测试。

  • 把NFS 作为根文件系统来启动

使用NFS 的实验环境架构

在后面章节的实验中,我们常常通过NFS 给开发板共享开发主机编写的应用程序,在本节内容将介绍如何在开发板和开发主机之间共享目录。我们要构建的使用NFS 文件系统的实验环境架构如下图所示。

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

在这样的环境中,开发板与开发主机接入到同一个局域网中,然后开发主机提供NFS 服务,开发板通过NFS 与开发主机连接共享文件。开发主机生成的目标板应用程序放在NFS 的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。

在另一方面,开发主机与开发板通过串口连接,使用串口终端控制开发板。

搭建NFS 环境

接下来介绍如何利用NFS 搭建上述实验环境。主要包含连接网络、主机开启NFS 服务以及开发板挂载文件系统三个步骤。

我们的目标是使开发主机与开发板的以下目录映射起来:

开发主机共享目录:/home/embedfire/workdir

开发板的挂载目录:/mnt

连接到局域网络

连接到局域网

在本应用场景中开发主机和开发板需要通过网络互相访问,另外由于NFS 文件系统暴露到公网需要处理很多安全问题,为简化操作,我们把开发主机和开发板连接到局域网络,即都使用网线把它们连接到同一个交换机(路由器)上,如上图所示。

如果开发主机是安装在虚拟机上,注意要在VirtualBox 把虚拟机的网络配置改成“桥接网卡”模式,见下图,若修改了该配置,需要重启虚拟机才生效。

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

互ping 测试

连接好网络后在开发主机和开发板之间进行互ping 测试,以保证网络互通。ping 命令格式为:

ping [目标主机名或目标ip 地址]

这里以ping 主机名为例,见下图:

开发主机ping 开发板

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

开发板ping 主机

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

若测试成功,会返回ttl 域和时间,使用Ctrl+c 可退出命令。

在ping 命令的打印信息中,我们还可以了解到本示例中开发主机的IP 为192.168.100.4,开发板的IP 为192.168.100.3,我们也可以使用ifconfig 命令来查看它们的ip 地址和子网掩码,如下图:

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

在上图中开发板使用ifconfig 命令可查看到开发板有两个网卡,分别是其两个网络接口的信息,其中eth1 没有接网线,所以不能正常使用,而eth2 可看到其IP 地址为192.168.100.3,在开发主机的终端上可使用该IP 进行ping 测试。

注意:若在开发主机上使用ifconfig 提示找不到命令,请使用如下命令进行安装:

# 以下命令在主机上运行
sudo apt install net-tools

根据开发主机的ip 和子网掩码,我们可以判断开发主板处于192.168.100.* 的网段中,我们只要保证开发主机网络也在同一个局域网网段中,就能让它们通信。

若使用ifconfig 命令查看不到IP 地址,或IP 地址与开发主机的IP 不在同一个网段,请检查网络连接。

如果使用主机名无法ping 通,请直接用IP 地址进行ping 测试,见下图。

开发主机ping 开发板

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

开发板ping 开发主机

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

在开发主机开启NFS 服务

确认网络并了解局域网IP 地址信息后,可配置开发主机的NFS 服务,以下步骤说明均在开发主机上进行操作。

安装NFS 服务

Ubuntu 系统默认没有安装NFS 服务,需要使用如下命令安装NFS 服务端软件:

# 以下命令在主机上运行
sudo apt install nfs-kernel-server

查看用户id

在配置NFS 时需要使用到用户uid 和组gid,可使用id 命令查看,在开发主机上的终端输入如下命令:

# 以下命令在主机上运行
id

具体见下图。

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

上图使用id 命令用户id 和组id

从上图可知本开发主机的用户uid 和组gid 均为998,请使用该命令查看自己的开发主机相关id,在下面的配置文件中将会使用到。

配置NFS

安装NFS 服务后,会新增一个/etc/exports 文件(即/etc 目录下名字为exports 的文件),NFS 服务根据它的配置来运行,其默认内容可通过命令cat /etc/exports 查看,它默认包含了一些配置的范例,内容如所示。

列表1: 文件/etc/exports 的默认内容(/etc/exports 文件)

# /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)

详细的帮助说明可以使用命令man nfs 查看,此处直接以我们配置的范例进行讲解。

修改配置文件常常需要系统用户权限,所以通常使用sudo vim 或sudo gedit 来打开修改,要使用gedit 编辑器的话,把后面的vim 命令换成gedit 即可。

使用vim 打开/etc/exports 文件命令如下:

# 以下命令在主机上运行,可用gedit 替换vim
sudo vim /etc/exports

在/etc/exports 文件末尾添加如下语句并保存,注意如下语句写到/etc/exports 文件是在同一行。

# 把以下内容添加至/etc/exports 文件末尾,注意以下内容处于同一行
# 以下内容的IP 地址和uid,gid 需要根据自己的环境进行修改
/home/embedfire/workdir 192.168.0.0/24(rw,sync,all_squash,anonuid=998,anongid=998,no_subtree_check)

注意具体的配置需要根据自己的实验环境进行配置,请理解如下说明根据自己的实验环境进行修改:

  • /home/embedfire/workdir:要共享的开发主机目录,注意使用空格与后面的配置隔开。

  • 192.168.0.0/24: 配置谁可以访问, 其中的/24 是掩码, 此处表示24 个1, 即
    11111111.11111111.11111111.00000000,即掩码是255.255.255.0。结合前面192.168.0.0 表示此处配置IP 为192.168.0.* 的主机均可以访问该目录,即局域网上的所有主机。

  • 若局域网是其它网段,请参考此处的配置,不能直接用星号表示,如欲配置192.168.1.*的局域网下所有机器都可以访问,则配置为192.168.1.0/24。

  • 这个配置域也可以直接写可访问的主机名,如把“192.168.0.0/24”替换为开发板主机名“npi”,则仅该开发板能访问共享的目录。

  • rw: 表示客户机的权限,rw 表示可读写,具体的权限还受文件系统的rwx 及用户身份影响。

  • sync:资料同步写入到内存与硬盘中。

  • anonuid=998:将客户机上的用户映射成指定的本地用户ID 的用户,此处998 是开发主机embedfire用户的uid,此处请根据具体的主机用户uid 进行配置。

  • anongid=998:将客户机上的用户映射成属于指定的本地用户组ID,此处998 是开发主机embedfire用户组gid,此处请根据具体的主机用户组gid 进行配置。

  • no_subtree_check:不检查子目录权限,默认配置。

本配置中的anonuid 和anongid 把客户机的用户映射成本地uid/gid 为998 的用户,即开发主机的embedfire,那么当在开发板上使用与开发主机不同的用户访问NFS 共享目录时,都会具有embedfire 的权限,方便互相访问。如开发板上的root 用户创建文件,在开发主机上会被认为是embe dfire 创建的;在开发主机上仅embedfire 能读写的文件,在开发板上的root 或其它用户也能对该文件进行读写(被当成了embedfire)。当然这并不是一种安全的访问设置方式,不过这用在我们的开发中是非常方便的配置。

创建共享目录

为了确保共享的配置有效, 我们还需要创建共享的目录, 在本例子中共享的目录
为/home/embedfire/workdir。

本例子中创建的目录命令如下,请根据自己的实验环境设置要共享的目录:

# 以下命令在主机上运行
mkdir /home/embedfire/workdir

更新exports 配置

修改完/etc/exports 文件并保存后,可使用exportfs 命令更新配置:

# 以下命令在主机上运行
sudo exportfs -arv

该命令的参数说明如下:

  • -a:全部mount 或umount 文件/etc/exports 中的内容。

  • -r:重新mount 文件/etc/exports 中的共享内容。

  • -u:umount 目录。

  • -v:在exportfs 的时候,将详细的信息输出到屏幕上。

若配置正常,该命令执行后会列出共享的目录项,本示例的执行结果见下图。

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

查看NFS 共享情况

使用showmount –e 可查看当前NFS 服务器的加载情况,具体见下图。

# 以下命令在主机上运行
showmount -e

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

安装NFS 客户端

开发主机开启NFS 服务后,我们还需要在开发板安装NFS 客户端,来让开发板使用NFS 服务。

执行安装NFS 客户端命令:

sudo apt install nfs-common -y

查看NFS 服务器共享目录

在开发板上执行“showmount -e +“NFS 服务器IP””命令。注意在不同网络环境下,NFS 服务器IP 可能不一样,以实际情况为准。

showmount -e 192.168.0.219

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

临时挂载NFS 文件系统

使用mount 命令挂载NFS 服务器的共享目录到开发板/mnt 目录下:

注意: 需要把下面的192.168.0.219 设置为用户实际网络环境下的NFS 服务器IP

# 以下命令在开发板上运行
sudo mount -t nfs 192.168.0.219:/home/embedfire/workdir /mnt

以上命令使用的各个参数如下:

  • -t nfs:指定挂载的文件系统格式为nfs。

  • 192.168.0.219:指定NFS 服务器的IP 地址。

  • /home/embedfire/workdir:指定NFS 服务器的共享目录。

  • /mnt:本地挂载目录,即要把NFS 服务器的共享目录映射到开发板的/mnt 目录下。

若挂载成功,终端不会有输出,Linux 的哲学思想是“没有消息便是好消息”。

如下图:

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

使用这种方式挂载目录只是临时的,开发板在重启后需要重新挂载该NFS 目录才能访问。

测试NFS 共享目录

挂载成功后,在NFS 服务器的共享目录下,输入“sudo touch hello_world.txt”命令,则在共享目录下创建一个hello_world.txt 文件,如下图:

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

进入开发板的/mnt 目录下,可以查看到NFS 服务器的共享目录中的hello_world.txt 文件。如下图:

nfs挂载,Linux基础和应用开发,网络,服务器,linux,ubuntu

取消挂载

当客户机在网络上无法找到NFS 共享的目录时,如开发主机关机时,在NFS 的客户机的终端常常会输出一些提示,或在使用ls 命令查看共享目录会导致长时间等待,这时可以对目录使用umount 命令取消挂载,示例如下:

# 以下命令在开发板上运行
sudo umount /mnt

使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果在当前挂载的目录进行umount 操作,会提示“device is busy”。建议取消挂载时,先切换到家目录“~”,在进行umount 操作。


参考资料:Linux 基础与应用开发实战指南——基于STM32MP1 系列文章来源地址https://www.toymoban.com/news/detail-715817.html

到了这里,关于第十节 挂载NFS 网络文件系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux-NFS远程挂载

    NFS是一种基于TCP/IP 传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源 NAS存储: NFS服务的实现依赖于RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。 在Centos 7系统中,需要安装nfs-utils、 rpcbind 软

    2024年02月08日
    浏览(26)
  • [linux]mount与nfs挂载简介

    mount用于挂载设备: 挂载分区: mount /dev/sdb1 /data ; 文件夹间: mount --bind /ori /data ;data文件将被ori中遮盖。 mount用于挂载Linux系统下的分区或文件: mount [-fv] [-t vfstype] [-o options] device {mounted-dir} f:并不执行实际挂上的动作,而是模拟整个挂上的过程(常用于排错);一般与

    2024年02月03日
    浏览(36)
  • 服务器(linux)磁盘挂载nfs

    笔者项目中此前有这么个需求,需要支持文件进行预览,文件的存储位置都在后端服务器上,想要支持预览是比较困难的(若是在前端服务器上则比较方便),因为无法做到跨服务器之间的静态文件预览,然后解决这个问题的思路就设定在了将后端服务器的文件所在位置挂载

    2024年02月04日
    浏览(36)
  • Linux和Windows实现挂载NFS

    以下是标准的步骤来在Windows上挂载NFS共享: 启用NFS客户端 : 在Windows功能中,确保“Services for NFS”或“NFS 客户端”(名称可能根据Windows版本有所不同)已经被安装。 挂载NFS共享 : 使用 mount 命令来挂载共享。这是一个简化的命令结构: 所以,根据上面结构举出如下例子: 这

    2024年02月03日
    浏览(32)
  • Linux网络服务之NFS(文件共享服务)

    NFS(Network File System 网络文件服务),是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。 NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自

    2024年02月05日
    浏览(28)
  • 在linux中挂载NFS共享盘的方法

    在 Linux 中,你可以使用 mount 命令来挂载 NFS(Network File System)共享盘。以下是挂载 NFS 共享盘的一般步骤: 确保已经安装 NFS 客户端:首先,你需要确保在你的 Linux 系统上已经安装了 NFS 客户端工具。大多数 Linux 发行版都默认安装了这些工具,但是如果你的系统没有安装,你

    2024年02月09日
    浏览(29)
  • 内核实验(四):Qemu调试Linux内核,实现NFS挂载

    在文章《内核实验(三)……》中,通过挂载虚拟分区,解决了Host和虚拟机文件交换的问题,但依旧比较麻烦。为了提升效率,必须解决NFS挂载共享文件夹的问题。如能实现,则直接在虚拟机上挂载服务端的NFS目录,即可实时交换文件,大大提升效率! 关于Qemu虚拟机挂载

    2024年02月02日
    浏览(24)
  • CentOS - NFS实现共享文件夹及开机自动挂载功能

    1、NFS通过RPC远程控制调用实现文件共享功能 (原理) 2、由于NFS是两台或者多个服务器共享,必有一台是需要安装NFS服务的也称之为服务端,其余的服务器(客户端)只安装RPS远程调用就可以实现共享功能(认清谁是服务端,谁是客户端) 安装流程如下: 注意:这里需要检查

    2024年02月07日
    浏览(31)
  • NFS服务器简介、在Linux上搭建NFS服务器和客户端,Linux上使用auto(autofs)进行NFS客户端自动挂载和卸载详解

    目录 一.NFS服务器简介 1.含义简介: 2.工作原理简介: 3.RPC服务与NFS服务配合使用 二.NFS配置文件参数命令介绍 1.主配置文件/etc/exports 2.日志文件/var/lib/nfs/ 3.showmount命令 三.主配置文件/etc/exports挂载写法 1.配置nfs服务端和客户端 2.windows客户端挂载测试 3.权限介绍 (1)rw/ro,服

    2024年02月04日
    浏览(43)
  • NFS服务器简介、在Linux上搭建NFS服务器和客户端,使用autofs进行NFS客户端自动挂载和卸载详解

    目录 一.NFS服务器简介 1.含义简介: 2.工作原理简介: 3.RPC服务与NFS服务配合使用 二.NFS配置文件参数命令介绍 1.主配置文件/etc/exports 2.日志文件/var/lib/nfs/ 3.showmount命令 三.主配置文件/etc/exports挂载写法 1.配置nfs服务端和客户端 2.windows客户端挂载测试 3.权限介绍 (1)rw/ro,服

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包