赞
踩
如果嫌弃麻烦,在文章最后有代码,可以直接拿去跑。
安装NFS服务
Ubuntu系统默认没有安装NFS服务,需要使用如下命令安装NFS服务端软件.
pikaqiu@ubuntu:~$ sudo apt install nfs-kernel-server
查看用户 id
在配置NFS时需要使用到用户uid和组gid,可使用id命令查看,在开发主机上的终端输入如下命令
pikaqiu@ubuntu:~$ id
uid=1000(pikaqiu) gid=1000(pikaqiu) groups=1000(pikaqiu)
配置NFS
安装NFS服务后,会新增一个 /etc/exports
文件(即 /etc
目录下名字为exports
的文件),NFS服务根 据它的配置来运行,其默认内容可通过命令cat /etc/exports
查看,它默认包含了一些配置 的范例,内容如所示。
pikaqiu@ubuntu:~$ cat /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
文件命令如下
pikaqiu@ubuntu:~$ sudo vim /etc/exports
在 /etc/exports
文件末尾添加如下语句并保存,注意如下语句写到 /etc/exports
文件是在同一行。
#把以下内容添加至/etc/exports文件末尾,注意以下内容处于同一行 #以下内容的IP地址和uid,gid需要根据自己的环境进行修
/home/pikaqiu/nfs_rootfs 192.168.0.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
注意具体的配置需要根据自己的实验环境进行配置,请理解如下说明根据自己的实验环境进行修改:
/home/pikaqiu/nfs_rootfs
:要共享的开发主机目录,注意使用空格与后面的配置隔开。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.0.0/24
替换为开 发板主机名 “rock
”,则仅该开发板能访问共享的目录。rw
表示可读写,具体的权限还受文件系统的 rwx
及用户身份影响。embedfire
用户的 uid
,此处请根据具体的主机用户 uid
进行配置。ID
,此处 1000 是开发主机 embedfire
用户组 gid
,此处请根据具体的主机用户组 gid
进行配置。创建共享目录
为了确保共享的配置有效,我们还需要创建共享的目录,在本例子中共享的目录为 /home/pikaqiu/nfs_rootfs
。
本例子中创建的目录命令如下,请根据自己的实验环境设置要共享的目录:
pikaqiu@ubuntu:~$ mkdir /home/pikaqiu/nfs_rootfs
更新 exports 配置
修改完 /etc/exports
文件并保存后,可使用 exportfs
命令更新配置:
sudo exportfs -arv
该命令的参数说明如下:
mount
或 umount
文件 /etc/exports
中的内容。mount
文件 /etc/exports
中的共享内容。umount
目录。exportfs
的时候,将详细的信息输出到屏幕上。若配置正常,该命令执行后会列出共享的目录项,本示例的执行结果见下图。
pikaqiu@ubuntu:~$ sudo exportfs -arv
exporting 192.168.0.0/24:/home/pikaqiu/nfs_rootfs
查看NFS共享情况
pikaqiu@ubuntu:~$ showmount -e
安装 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 文件系统
使用 mount
命令挂载 NFS
服务器的共享目录到开发板 /mnt
目录下:
注意:需要把下面的 192.168.0.219
设置为用户实际网络环境下的 NFS
服务器 IP
sudo mount -t nfs 192.168.0.219:/home/embedfire/workdir /mnt
以上命令使用的各个参数如下:
nfs
。192.168.0.219
:指定NFS服务器的 IP
地址。
/home/pikaqiu/nfs_rootfs
:指定 NFS
服务器的共享目录。/mnt
:本地挂载目录,即要把 NFS
服务器的共享目录映射到开发板的 /mnt
目录下。若挂载成功,终端不会有输出,Linux的哲学思想是“没有消息便是好消息”。
使用这种方式挂载目录只是临时的,开发板在重启后需要重新挂载该NFS目录才能访问。
通过 nfs
来传输文件. 把 /home/pikaqiu/nfs_rootfs
目录 挂载到 板子上的 /mnt
mount -t nfs -o nolock,vers=3 192.168.xxx.xxx:/home/pikaqiu/nfs_rootfs /mnt
主机安装NFS服务代码
#!/bin/bash # # NFS服务安装 # _UID="" _GID="" _FILE_NAME="/etc/exports" _DIR="nfs_rootfs" #设置共享的文件夹名字,默认是在 ~目录中创建 _PATH="" _IP="" nfs_install() { sudo apt update sudo apt -y install nfs_kernel-server } get_id() { _UID=$(id | awk '{print $1}' | cut -d '=' -f 2 | cut -d '(' -f 1) _GID=$(id | awk '{print $2}' | cut -d '=' -f 2 | cut -d '(' -f 1) echo "Get uid: $_UID" echo "Get gid: $_GID" } get_ip() { _IP=$(ifconfig | grep netmask | grep -v 127.0.0.1 | awk '{print $2}' | awk -F '.' '{print $1 "." $2 "." $3 ".0"}' | awk 'NR==1 {print $0}') echo "Get ip : $_IP" } nfs_config() { #nfs_install get_id get_ip if [ -f $_FILE_NAME ] then echo "exist" cd ~ _PATH=$(pwd)/$_DIR echo "路径 : $_PATH" echo "文件名: $_FILE_NAME" content="$_PATH $_IP/24(rw,sync,all_squash,anonuid=$_UID,anongid=$_GID,no_subtree_check)" echo "内容 : $content" row=$(awk 'END {print NR}' $_FILE_NAME) for (( i = 1; i <= $row; i++ )) do buf=$(awk "NR==$i {print \$0}" $_FILE_NAME) if [[ $buf != \#* ]] then sudo sed -i "$i c #$buf" $_FILE_NAME fi done sudo sed -i "\$a$content" $_FILE_NAME if [ ! -d $_PATH ] then echo "mkdir $_PATH" mkdir $_PATH fi sudo exportfs -arv | grep exporting if (( $? == 0 )) then echo "安装 NFS 服务 成功!" else echo "安装 NFS 服务 失败!" fi showmount -e else echo "安装 NFS 服务 失败!" fi } ###################################################################################### nfs_config
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。