首页 > 其他分享 >nfs挂载

nfs挂载

时间:2023-12-22 10:24:14浏览次数:36  
标签:文件 dev etc init nfs mynfs 挂载

 NFS(network file system)

NFS是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。

也就是说NFS服务端提供共享目录文件挂载在客户端某一个目录文件下,以供客户端去访问和使用

​编辑

思路:

在虚拟机下创建根文件系统,安装并开启NFS的服务端,提供根文件系统给外界访问,JZ2440在启动时配置相关参数,将虚拟机下的根文件系统挂载到JZ2440的根文件系统下,这样在JZ2440就可以直接使用虚拟机下的根文件系统去启动了

前提:

虚拟机安装了gcc和交叉编译工具arm-linux-gcc,arm-linux-gcc已加入环境变量,已添加make menuconfig用到的相关软件及一些32位的函数库,

库文件:

sudo apt install bison flex build-essential patch libncurses5-dev libncursesw5-dev libc6-i386 lib32stdc++6 lib32z1

 linux启动所需的文件有etc/inittab  ,   etc/init.d/rcS   ,  etc/fstab这三个文件

内核引导完成后会启动第一个进程init,所有进程的父进程,该进程的源码文件也是由Busybox工具生成的,initi进程会去读取etc/inittab文件的每一行语句作为行为指针,其中一行行为是去执行etcinit.d/rcS脚本文件,而rcS中有一行脚本命令(mount -a)是去挂载etc/fstab文件中指定的所有文件系统,至此,将三个文件都联系起来

创建nfs根文件

1.创建mynfs文件夹,进入mynfs,在下方创建目录

mkdir bin dev etc lib proc sbin sys usr mnt tmp var

 2. 在dev目录下创建两个基本的设备文件console(控制台)和null(黑洞文件)

sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3

 3. 在etc目录下创建fstab,init.d/rcS和inittab文件,并编辑好内容

3.1 fstab文件内容:

#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0

 3.2 inittab文件内容:

# /etc/inittab
# 系统启动阶段,执行rcS脚本
::sysinit:/etc/init.d/rcS
# sh进程结束,又会重启sh进程
console::askfirst:-/bin/sh
# ctrl+alt+del,重启reboot
::ctrlaltdel:/sbin/reboot
# 关机时候,卸载所有设备
::shutdown:/bin/umount -a -r
::shutdown:/

 3.3 init.d/rcS文件内容:

#!/bin/sh
#mount all filesystem defined in "fstab"
echo "#mount all…"
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

init.d/rcS文件需要加上“x”可执行属性.

chmod +x rcS

 4. 使用busybox创建bin目录下的命令和生成init进程。

4.1 解压busybox源码包,进入其目录,修改Makefile,指定ARCH和CROSS_COMPILE

vim Makefile

找到并修改这两个参数 

原来的代码:

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

 

修改后的代码:

ARCH ?= arm 

CROSS_COMPILE ?= arm-linux-

 通过厂家给定的默认文件改为默认配置文件,在用菜单配置界面修改busybox的默认配置

cp ../busybox1.22.1_config_ok ./.config

make menuconfig 

4.2 配置busybox,

确保Shells中选中ash,

Init utilities中选中init;

BusyBox         Settings/build         option,使用动态库,

BusyBox         Settings/installation         option/Don't use /usr,确定生成的文件不在use/usr下

miscellaneous utilities中,取消taskset, 

4.3 保存生成.config,重新编译和安装:

 编译Busybox

make -j16

-j表示多线程编译,会自动向下兼容 

安装Busybox中的工具到根文件系统 

make CONFIG_PREFIX=/home/a1/jz2440/rootfs/mynfs install

安装完毕后,在/home/a1/jz2440/rootfs/mynfs下会看到linuxrc文件,在/home/a1/jz2440/rootfs/mynfs/bin下会看到很多命令文件。 

5.  copy 必须的库文件到mynfs/lib中。

cd /home/a1/jz2440/crosstool/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib
cp *.so* /home/a1/jz2440/rootfs/mynfs/lib -d

-d or -a参数的意思是包括软链接文件也copy过来。 

6. 主机上安装和配置nfs服务

sudo apt-get install nfs-kernel-server

配置:
6.1 修改 /etc/portmap文件,把最后一行的options前加上“#”注释掉 (注:ubuntu16.04不需要)


6.2修改 /etc/exports文件,最后一行加上:

/home/a1/jz2440/rootfs/mynfs *(rw,sync,no_root_squash,no_subtree_check)

意思是 将/home/a1/jz2440/rootfs/mynfs目录下的所有内容共享出去

运行

sudo exportfs -r

更新一下。


6.3 运行NFS:

需要启动portmap、 nfs-kernel-server:

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

6.4 本机测试

将刚刚创建的根文件系统挂载到本机的/mnt/nfs目录下,先在/mnt目录下创建nfs目录(需要sudo权限)

sudo mkdir nfs

然后挂载

sudo mount 127.0.0.1:/home/a1/jz2440/rootfs/mynfs /mnt/nfs

 查看挂载的主机

showmount

查看当前的文件系统

df -h

客户端卸载从服务器上挂载在本地的目录文件

sudo umount /mnt/nfs

7. 开发板挂载nfs根文件系统

进入uboot,修改原来的本地根文件启动参数

"bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 mem=64M"

为nfs启动,然后保存参数

set bootargs root=/dev/nfs rw nfsroot=192.168.0.19:/home/a1/jz2440/rootfs/mynfs/ ip=192.168.0.17 init=/linuxrc mem=64M console=ttySAC0,115200
save  

如果NFS的服务端的版本较高(版本较高的ubuntu),则要使用V3版本的协议,例如20.04版本的ubuntu的nfs协议是v3版本,且默认TCP和UDP都是打开的,可以使用一下启动参数:

set bootargs root=/dev/nfs rw nfsroot=169.254.179.207:/home/zxz/jz2440/rootfs/mynfs,v3  ip=169.254.179.203 init=/linuxrc mem=64M console=ttySAC0,115200

 

而新版本22.04ubuntu的nfs协议默认只使用的tcp的协议,则要再加上tcp的传输模式 

set bootargs root=/dev/nfs rw nfsroot=169.254.179.207:/home/zxz/jz2440/rootfs/mynfs,tcp,v3  ip=169.254.179.203 init=/linuxrc mem=64M console=ttySAC0,115200

---------------------------------------------------------------------------------------------------------------------------------

 set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.30:/work/nfs_root/temp/fs_mini_mdev 

ip=192.168.1.20:192.168.1.30:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

/* 

 *nfsroot对应你pc机的IP和你解压的文件系统的路径,请酌情修改

 * ip指定你的开发板的IP、服务器的ip、网关、掩码,掩码后面应该是域名(可省略)

 * 再往后的,网卡eth0,不自动启动off

 */

标签:文件,dev,etc,init,nfs,mynfs,挂载
From: https://www.cnblogs.com/zxz-FINE/p/17920694.html

相关文章

  • 【Docker】关于挂载修改&迁移问题
    如果进行容器挂载迁移,新挂载的目录会导致之前容器内的数据丢失,接下来给大家整理思路之前是没有进行数据挂载的,也就是默认路径#先查看一下默认路径dockerinspect【容器名】#Mounts这里有详细的挂载信息,可以看到最开始的默认路径是home/lib/docker/volumes/b9588a26ea88d44f1......
  • NFS服务
    NFS服务和自动挂载搭建的流程1:安装nfs服务的包,创建共享文件2:编写服务的配置文件3:防火墙的放行4:客户端测试5:安装autofs包6:编写配置文件7:客户端测试 1:安装nfs服务的包默认是已经安装好了的,但是为了确保还是需要安装一下[root@controller/]#yum-yinstallnfs-utils......
  • linux 挂载数据盘
    输入命令fdisk-l查看硬盘,找到要挂载的数据盘,此处是/dev/vdb即红框内的image.png第一次使用数据盘,挂载之前用命令mkfs.xfs/dev/vdb格式化数据盘,此处用xfs格式,需要换其他文件系统格式的话(如ext4等),改成对应格式即可,如用ext4,则是mkfs.ext4/dev/vdb。格式化时请将盘符改成你服务器......
  • 普通非 root 用户挂载 USB 设备
    Root用户可以直接使用mount命令挂载硬盘(包括U盘),但是普通用户无法使用该命令。使用udisksctl挂载硬盘udisksctlmount-b/dev/sdx1#挂载udisksctlunmount-b/dev/sdx1#卸载udisksctlpower-off--block-device/dev/sdx1#断电udisksctl可能需要安装才能......
  • linux系统,磁盘、镜像、目录挂载和未挂载,查看命令
    查看系统中存在磁盘或镜像、设备lsblk 使用lsblk命令查看系统上的所有块设备信息:blkid blkid命令可以更详细的查看未挂载磁盘,不仅能查看大小,还可以看到其他更多的信息fdisk-lfdisk-l命令可以列出系统中未挂载的所有磁盘,执行该命令后会列出当前系统的所有磁盘,其中......
  • React useEffect 在组件挂载时运行了两次
    在使用useEffect这个hook时,发现useEffect会执行2次useEffect(()=>{console.log("执行useEffect");},[]);控制台输出:执行useEffect执行useEffect查看疑难解答官方文档,官方解释如下:在开发环境下,如果开启严格模式,React会在实际运行setup之前额外运行一次......
  • k8s基于NFS部署storageclass实现pv并标记为一个默认的StorageClass
    架构:一.搭建storageclass1、master和node节点安装nfs服务yum-yinstallnfs-utilsrpcbind2、启动nfs并设为开机自启:systemctlstartnfs&&systemctlenablenfssystemctlstartrpcbind&&systemctlenablerpcbind3、master节点创建共享挂载目录(客户端不需要创建共享目录......
  • Android9.0 vold初始化及外部存储器挂载浅析
    一、概况在Android中,当SD卡U盘等外部存储器插入系统之后,系统会自动挂载。Vold就是负责挂载的,vold的全称是volumedaemon。实际上是负责完成系统的CDROM,USB大容量存储,MMC卡等扩展存储的挂载任务自动完成的守护进程。它提供的主要特点是支持这些存储外设的热插拔。Vold框架图关......
  • docker-挂载数据卷实现不重启Nginx容器展示不同的网页内容
    dockerpullnignxdockervolumecreatetest_volumesdockerrun-d-p80:80-hnginx--namenginx--mounttype=bind,source=/var/lib/docker/volumes/test_volumes,destination=/var/nginx/htmlnginx#-hnginx是必须的,不然就要去更改容器里面的Nginx.conf配置项容器......
  • 服务器数据恢复-raid5多块磁盘掉线导致上层卷无法挂载,oracle数据库不可用的数据恢复案
    服务器数据恢复环境:一台服务器中有一组由24块FC硬盘组建的raid5磁盘阵列,linux操作系统+ext3文件系统,服务器上层部署有oracle数据库。服务器故障&检测:raid5阵列中有两块硬盘出现故障掉线,导致服务器上层卷无法挂载,oracle数据库无法正常使用。通过管理后台查看服务器中硬盘的状态,......