Linux学习笔记7

发布于:2024-06-04 ⋅ 阅读:(70) ⋅ 点赞:(0)

NFS网络文件系统

在Linux笔记一里我说过NFS和根文件系统的关系(即“NFS可以通过网络将文件系统中的数据提供给远程计算机使用,当一个计算机通过NFS挂载远程文件系统时,实际上是在网络上请求远程服务器提供文件系统的数据”),总之我们可以理解成NFS 允许多台计算机通过网络同时访问和共享相同的文件和目录,就好像它们在本地计算机上一样,只需要通过文件路径即可访问远程文件系统中的文件。它的最大功能就是可以通过网络让不同的机器,不通的操作系统彼此共享文件

选择ubuntu做主机搭建NFS服务器(服务器端)

确保虚拟机可以正常上网之后用apt指令去下载安装Ubuntu NFS软件包,即“apt-get install nfs-kernel-server”

之后配置/etc/exports,在/etc/export 文件的最后一行添加:/home/topeet/linux/ *(rw,sync,no_root_squash)

注释:文件 /etc/exports 是用来定义 NFS 服务器上共享的文件系统和相关参数的文件。在这个文件中,管理员可以指定哪些目录将被共享给哪些客户端,以及共享的权限和其他选项

这行配置的含义是允许任何客户端以读写read-write的方式访问 /home/topeet/linux/ 目录(即共享目录),并且使用同步(sync)模式进行数据同步,同时禁用了 root 用户权限的转换(no_root_squash),如果客户端是root,则这个共享目录就有root权限

接下来重启portmap 服务,输入/etc/init.d/portmap restart 命令,重启nfs 服务,输入“/etc/init.d/nfs-kernel-server restart”命令。

注释:portmap 服务是 RPC(远程过程调用)的端口映射程序。远程过程调用(RPC)是一种计算机通信协议,它允许一个程序在另一个计算机上执行代码并返回结果,端口被用来标识不同的网络应用,通俗易懂地说:portmap 服务就像是一个“导航员”,它知道每个RPC程序对应的端口号,就像知道每个房子的地址一样

之后有

测试NFS 服务器

完成前面的搭建工作之后,就可以在虚拟机Ubuntu 本机上验证一下,把/home/minilinux/system 挂载到/mnt 目录下,需要输入“mount -t nfs localhost:/home/minilinux/system /mnt”命令

注释:通过使用命令mount -t nfs localhost:/home/minilinux/system /mnt,实际上是在通过NFS协议将远程服务器上的/home/minilinux/system目录映射(即挂载)到本地的/mnt目录下。

这样做之后,本地的/mnt目录就会显示出远程服务器上/home/minilinux/system目录中的内容,就好像这些文件和目录是本地的一样。实际上,这些数据是通过网络来访问的,而不是存储在本地

执行完上面的命令,可以使用df 命令查看是否挂载成功,成功则说明Ubuntu nfs 服务器端搭建成功了

把linux 最小文件系统放到虚拟机Ubuntu 的/home/minilinux/system 目录下,实现nfs 文件系统需要修改linux 最小文件系统的etc/init.d/ifconfig-eth0 文件,使用vi 命令修改,修改为:if grep -q nfs /proc/mounts,修改完成后保存并退出。【这一步是为了共享这个文件系统给其他计算机或虚拟机进行访问

配置内核

输入cp config_for_linux_xxx_xxx .config 命令生成支持linux 最小文件系统的内核配置文件

然后输入make menuconfig 命令进入linux 配置界面,选中“Networking support”中“Networking options”选项,在Networking options 配置界面,选中“IP: kernel level autoconfiguration”,

注释:make menuconfig 是一个命令行工具,用于配置Linux内核。“IP: kernel level autoconfiguration”: 这个选项用于启用内核级别的IP地址自动配置,允许系统自动获取IP地址和相关网络配置信息。

之后选择“File systems”选项中“Network File Systems”选项,选中“NFS client support”,“NFS client support for NFS version 3”,“NFS client support for the NFSv3 ACL protocol extension”,“NFS client support for NFS version4”,“NFS client support for NFSv4.1”,“Root file system on NFS”,

注释:

  1. 在“File systems”选项中“Network File Systems”选项,选中“NFS client support”: 这些选项用于启用NFS客户端支持,允许Linux内核作为NFS客户端与其他NFS服务器进行通信。

  2. “NFS client support for NFS version 3”, “NFS client support for the NFSv3 ACL protocol extension”, “NFS client support for NFS version4”, “NFS client support for NFSv4.1”, “Root file system on NFS”: 这些选项用于启用不同版本的NFS客户端支持和根文件系统在NFS上的挂载,这样可以实现在Linux系统中使用NFS共享的文件系统。

返回到make menuconfig 的初始配置界面,初始配置界面选中“Boot options”,按回车进入Boot options 配置界面,然后在Default kernel command 里面输入

“root=/dev/nfs rw nfsroot=192.168.1.103:/home/topeet/linux/app/system
ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off
rootfstype=ext4 init=/linuxrc console=ttySAC2,115200",如下图。

注释:在初始配置界面中选中并进入 "Boot options" 配置界面时,能够设置一些与系统引导过程相关的选项,比如默认的内核启动命令、引导加载程序(boot loader)的设置等

  1. root=/dev/nfs:指定根文件系统为网络文件系统(NFS)。
  2. rw:以读写模式挂载根文件系统。
  3. nfsroot=192.168.1.103:/home/topeet/linux/app/system:指定 NFS 根文件系统的服务器地址和共享路径。
  4. ip=192.168.1.230:192.168.1.103:192.168.1.1:255.255.255.0:iTOP:eth0:off:设置 IP 地址、网关、子网掩码、主机名、网络接口和关闭零拷贝等网络参数。
  5. rootfstype=ext4:指定根文件系统的文件系统类型为 ext4。
  6. init=/linuxrc:指定系统初始化进程为 /linuxrc。【在传统的 Linux 系统中,初始化进程是由 init 程序启动的,它负责启动和管理系统上的各种进程,在一些特殊情况下,可能希望使用不同的初始化进程来代替默认的 init 进程。这时可以在引导时通过设置内核启动参数,告诉内核使用不同的初始化进程,将内核启动参数中的 init 参数设置为 /linuxrc,这样在启动时系统会使用 /linuxrc 程序作为初始化进程来运行】
  7. console=ttySAC2,115200:设置系统控制台输出到串口设备 ttySAC2,波特率为 115200

至此,linux 内核的配置就完成了,之后输入make命令编译内核就行,将新搞好的内核烧录进开发板就可以运行NFS文件系统了

以NFS 方式调试应用

已知我们刚刚指定NFS的/home/minilinux/system目录所以我们可以将可执行文件放在这个目录下的bin目录里,之后开启虚拟机,使用“ls /bin/”,找到刚刚放的可执行文件,在串口输入命令运行。