Linux NFS服务
Posted 皮卡丘吉尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux NFS服务相关的知识,希望对你有一定的参考价值。
一: NFS服务安装
1: 主机相关操作
如果嫌弃麻烦,在文章最后有代码,可以直接拿去跑。
-
安装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: 表示客户机的权限,
rw
表示可读写,具体的权限还受文件系统的rwx
及用户身份影响。 - sync:资料同步写入到内存与硬盘中。
- anonuid=1000:将客户机上的用户映射成指定的本地用户ID的用户,此处 1000 是开 发主机
embedfire
用户的uid
,此处请根据具体的主机用户uid
进行配置。 - anongid=1000: 将客户机上的用户映射成属于指定的本地用户 组
ID
,此处 1000 是开发主机embedfire
用户组gid
,此处请根据具体的主机用户组gid
进行配置。 - no_subtree_check:不检查子目录权限,默认配置。
-
创建共享目录
为了确保共享的配置有效,我们还需要创建共享的目录,在本例子中共享的目录为
/home/pikaqiu/nfs_rootfs
。本例子中创建的目录命令如下,请根据自己的实验环境设置要共享的目录:
pikaqiu@ubuntu:~$ mkdir /home/pikaqiu/nfs_rootfs
-
更新 exports 配置
修改完
/etc/exports
文件并保存后,可使用exportfs
命令更新配置:sudo exportfs -arv
该命令的参数说明如下:
- -a:全部
mount
或umount
文件/etc/exports
中的内容。 - -r:重新
mount
文件/etc/exports
中的共享内容。 - -u:
umount
目录。 - -v:在
exportfs
的时候,将详细的信息输出到屏幕上。
若配置正常,该命令执行后会列出共享的目录项,本示例的执行结果见下图。
pikaqiu@ubuntu:~$ sudo exportfs -arv exporting 192.168.0.0/24:/home/pikaqiu/nfs_rootfs
- -a:全部
-
查看NFS共享情况
pikaqiu@ubuntu:~$ showmount -e
2: 开发板相关操作
-
安装 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
以上命令使用的各个参数如下:
- -t nfs:指定挂载的文件系统格式为
nfs
。
- -t 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
以上是关于Linux NFS服务的主要内容,如果未能解决你的问题,请参考以下文章