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 vimsudo 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 表示此处配置 IP192.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
    
  • 查看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
  • 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服务的主要内容,如果未能解决你的问题,请参考以下文章

在 NFS 中强制刷新属性

Linux笔记:文件共享服务NFS快速入门

linux 下 NFS服务器配置

linux基础nfs服务和计划任务crond服务

SLES Suse Linux 11 SP4环境下NFS的搭建

Linux 环境搭建ubuntu下nfs安装与配置