10. 文件传输与NFS网络文件系统

本章配套视频介绍:

../../_images/video.png

《21-文件传输协议和工具》

https://www.bilibili.com/video/BV1Es4y1T7fV/

本章节主要讲述如何将文件在PC主机以及板卡上进行文件的传输。

本章节内容依赖网络传输,需要我们配置板卡的网络环境,具体可查看下列章节配置板卡及电脑

《SSH登录》

本章着重介绍以下方法进行使用

  • MobaXterm

  • FileZilla

  • nfs

  • tftp

10.1. MobaXterm

该方法需要下载 MobaXterm 软件

未找到图片
  • 优点:可以轻松的在控制linux的同时,也能进行文件的传输

  • 缺点:只能传输/home/cat目录下的文件夹,无法正确传输链接文件,对于源码移植会有碍

10.2. FileZilla

安装完 FileZilla 后,打开 FileZilla

未找到图片
  • 优点:较为精细的目录架构,可以让文件传输更方便

  • 缺点:只能传输/home/cat目录下的文件夹,无法正确传输链接文件,对于源码移植会有碍

10.3. nfs网络文件系统

本章配套视频介绍:

../../_images/video.png

《22-NFS网络文件系统》

https://www.bilibili.com/video/BV1XM4y1v76k/

10.3.1. 搭建NFS环境

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

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

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

板卡的挂载目录:/mnt

10.3.1.1. 连接到局域网

10.3.1.1.1. 网络配置

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

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

未找到图片04|
10.3.1.1.2. 互ping测试

我们可以使用ifconfig命令来查看它们的ip地址和子网掩码

已知主机IP地址为:192.168.103.132

板卡的地址为:192.168.103.156

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

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

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

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

开发主机ping板卡

未找到图片05|

板卡ping主机

未找到图片06|

10.3.1.2. 在开发主机开启NFS服务

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

10.3.1.2.1. 安装NFS服务

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

1
2
#以下命令在主机上运行
sudo apt install nfs-kernel-server
10.3.1.2.2. 查看用户id

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

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

具体见下图。

未找到图片08|

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

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

10.3.1.2.3. 配置NFS

安装NFS服务后,会新增一个/etc/exports文件(即/etc目录下名字为exports的文件),NFS服务根 据它的配置来运行

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10.3.1.2.4. 创建共享目录

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

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

1
2
#以下命令在主机上运行
mkdir /home/zerok/workdir
10.3.1.2.5. 更新exports配置

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

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

该命令的参数说明如下:

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

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

  • -u:umount目录。

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

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

未找到图片09|
10.3.1.2.6. 查看NFS共享情况

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

1
2
#以下命令在主机上运行
showmount -e
未找到图片10|

10.3.1.3. 安装NFS客户端

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

执行安装NFS客户端命令:

1
sudo apt install nfs-common -y

查看NFS服务器共享目录

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

1
showmount -e 192.168.103.132

如下图:

未找到图片
10.3.1.3.1. 临时挂载NFS文件系统

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

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

1
2
#以下命令在板卡上运行
sudo mount -t nfs 192.168.103.132:/home/zerok/workdir /mnt

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

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

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

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

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

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

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

10.3.1.3.2. 测试NFS共享目录

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

未找到图片

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

未找到图片
10.3.1.3.3. 取消挂载

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

1
2
#以下命令在板卡上运行
sudo umount /mnt

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

  • 优点:可以传输带软链接的文件,像一个可移动硬盘一样,可扩展,易使用

  • 缺点:没有图形界面,只能在Linux-linux之间传输

10.4. tftp

该方法不用下载任何软件,只要使用文件资源管理器即可

打开文件夹,输入

1
2
3
4
5
#tcp连接,建议使用这个
tftp://192.168.103.156/

#udp连接
ftp://192.168.103.156/
未找到图片

然后输入用户名和密码

未找到图片

成功

未找到图片
  • 优点:系统自带直接

  • 缺点:只能传输/home/cat目录下的文件夹,无法正确传输链接文件,对于源码移植会有碍