nfs服务器的搭建和使用
更新记录
version | status | description | date | author |
---|---|---|---|---|
V1.0 | C | Create Document | 2019.1.11 | John Wan |
status:
C―― Create,
A—— Add,
M—— Modify,
D—— Delete。
注:内核版本 3.0.15,系统版本 Ubuntu 12.04.2 LTS
1、nfs介绍
1.1 nfs概念
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的不同的机器、不同的操作系统共享彼此的文件,共享资源。在NFS的应用中,可将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,这样本地NFS的客户端应用可以透明地读写位于远端NFS服务器上共享的文件,就像访问本地文件一样。
好处:
以下是NFS最显而易见的好处:
- 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
- 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
- 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
组成:
NFS体系至少有两个主要部分:一台NFS服务器和若干台客户机。
客户机通过网络远程访问存放在NFS服务器上的数据。
在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。
1.2 nfs工作原理
NFS服务器的挂载结构图:
如上图示:
在NFS服务器设置好一个共享目录/home/public,其他有权访问NFS服务器的NFS客户端就可将该目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。挂载好后客户端可在本地的挂载点看到服务端/home/public的所有数据,读、写、执行操作具体看服务器分配的权限。
可通过查看磁盘信息命令:“df –h”,查看挂载情况。
1.3 nfs通讯过程
图2:nfs通讯过程
NFS是通过网络来进行服务器端和客户端之间的数据传输,最初是由UDP协议实现的,主要用于局域网(LAN),丢包重传的概率很小。但是随着发展,NFS已经不只使用在局域网中,更广泛地使用在广域网(WAN)中,这种情况下,主要使用的协议为TCP,TCP可以使得文件的操作更快。
注:在迅为iTop4412的教程中,使用的NFS与参考资料中不相同,目前只是记录学迅为的过程。
2、搭建和测试 NFS 服务器
2.1 搭建NFS服务器
2.1.1 下载并安装NFS服务器
在确保联网的情况下,下载并安装 nfs-kernel-server
。
apt-get install nfs-kernel-server
2.1.2 修改NFS参数
在 /etc/exports
文件最后一行添加 /home/work/ *(rw,sync,no_root_squash)
,各参数含义:
/home/work | 要共享的目录 |
---|---|
* | 代表允许所有的网络段访问 |
rw | 可读写权限 |
sync | 资料同步写入内存和硬盘 |
no_root_squash: | 是Ubuntu nfs 客户端分享目录使用者的权限,如果客户端使用的是root 用户,那么对于该共享目录而言,该客户端就具有root 权限; |
其它参数:
ro:只读访问
async :nfs 在写入数据前可以相应请求
secure: nfs 通过以下的安全TCP/IP 端口发送
insecure: nfs 通过1024 以上的端口发送
wdelay:如果多个用户要写入NFS 目录,则归组(默认)
no_wdelay:如果多个用户要写入NFS 目录,则立即写入,当使用async 时,无需此设置
hide:在nfs 共享目录中不共享妻子目录
no_hide:共享nfs 目录的子目录
subtree_check:如果共享/usr/bin 之类的子目录时,强制nfs 检查父目录的权限(默认)
no_subtree_check:和上面相对,不检查父目录权限
all_squash:共享文件的UID 和GID 映射匿名用户anonymous,适合公用目录
no_all_squash:保留共享文件的UID 和GID(默认)
root_squash root:用户的所有请求映射成如anonymous 用户一样的权限(默认)
no_root_squash root:用户具有根目录的完全管理访问权限
anonuid=xxx:指定nfs 服务器/etc/passwd 文件中匿名用户多的UID
anongid=xxx:指定nfs 服务器/etc/passwd 文件中匿名用户的GID
2.1.3 重启portmap服务
$service portmap restart 或者 $/etc/init.d/portmap restart
2.1.4 重启 nfs 服务
$service nfs-kernel-server restart 或者 $/etc/init.d/nfs-kernel-server restart
2.1.5 portmap与nfs服务启动、停止、查看
启动NFS服务器,需要启动portmap和nfs两个服务,并且portmap一定要先于nfs启动;
停止NFS服务器,先停止NFS服务,再停止portmap服务(系统中无其他服务需要使用portmap时)。
启动:
$service portmap start 或者 $/etc/init.d/portmap start
$service nfs-kernel-server start 或者 $/etc/init.d/nfs-kernel-server start
查看:
$service portmap status
$service nfs-kernel-server status
停止:
$service portmap stop
$service nfs-kernel-server stop
2.1.6 portmap与nfs服务自动启动
为了下次在重新启动系统时,NFS服务能够自动运行,可以使用checkconfig命令来进行设置。
首先检查NFS和portmap服务启动时的运行等级,执行命令:
$chkconfig --list portmap
结果:portmap 0:关闭 1:关闭 2:关闭 3:启动 4:启动 5:启动 6:关闭
$chkconfig --list nfs
结果:nfs 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
即:portmap启动的运行等级为3,4,5,而nfs在任何运行等级中都不会执行。为了让nfs在系统运行级别为3,4,5时也能自动运行,可使用下面的命令进行设置:
$chkconfig --level 345 nfs on
2.2 测试NFS服务器
前面nfs服务已经配置完成,设置了 /home/minilinux
为共享目录。
挂载命令:"mount -t nfs localhost:/home/minilinux /mnt"
,localhost
指明本机。
卸载命令:"umount /home/minilinux /mnt"
。
查看:"df" 或 "df -h"
。
文件目录结构:
root@ubuntu:/# ls /home
minilinux topeet
root@ubuntu:/# ls /mnt
hgfs
root@ubuntu:/# ls /home/minilinux/
busybox-1.22.1 system system.img
root@ubuntu:/# ls /home/minilinux/system
bin dev etc lib linuxrc mnt proc sbin sys tmp usr var
2.2.1 将 /home/minilinux
挂载到 /mnt
目录下
root@ubuntu:/# mount -t nfs localhost:/home/minilinux/ /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281032 47519988 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home/minilinux/ 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
busybox-1.22.1 system system.img
root@ubuntu:/# cd /mnt
root@ubuntu:/mnt# ls
busybox-1.22.1 system system.img
root@ubuntu:/mnt# mkdir helloword
root@ubuntu:/mnt# ls
busybox-1.22.1 helloword system system.img
root@ubuntu:/mnt# ls /home/minilinux/
busybox-1.22.1 helloword system system.img
从上面可看到挂载成功之后,在 /mnt
可查看和操作 /home/minilinux
中的文件。
2.2.2 将 /home
挂载到 /mnt
目录下
root@ubuntu:/# mount -t nfs localhost:/home /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281036 47519984 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
minilinux
从上面可看到挂载成功之后,如果挂载的文件目录层级比指定的共享目录层级高,那么只能操作指定的共享目录。
2.2.3 将 /home/minilinux/system
挂载到 /mnt
目录下
root@ubuntu:/# mount -t nfs localhost:/home/minilinux/system /mnt
root@ubuntu:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 60894268 10281036 47519984 18% /
udev 1876528 4 1876524 1% /dev
tmpfs 754320 812 753508 1% /run
none 5120 0 5120 0% /run/lock
none 1885796 200 1885596 1% /run/shm
localhost:/home/minilinux/system 60894720 10281472 47520256 18% /mnt
root@ubuntu:/# ls /mnt
bin dev etc lib linuxrc mnt proc sbin sys tmp usr var
从上面可看到挂载成功之后,如果挂载的文件目录层级比指定的共享目录层级低,那么只能操作挂载的文件目录。
3、在线调试:NFS共享目录
通过 NFS 服务,可以实现在线调试文件系统或应用程序,开发板可直接访问PC上的文件,而不用烧写到开发板的额MMC中再执行。极大的提高了调试效率。
前面已经了解了如何在搭建NFS服务器,那么接下来需要配置好一个开启了nfs服务并能通过网络访问NFS服务器的内核,并将其编译烧录到开发板中,这样就能够在开发板上通过NFS服务直接访问PC上的文件。
3.1 配置内核
3.1.1 设备内核参数
将迅为的内核源码(iTop4412_Kernel_3.0_20170719.tar.gz)拷贝到Ubuntu中,并解压。
解压命令:"tar -xzvf 文件名"
在解压的文件中执行:"cp config_for_linux_scp_elite .config"
,根据买的板子型号进行选择,我的是精英板SCP封装。
执行:"make menuconfig"
命令,进行配置。
Networking support -->
Networking options ---> "
[*] IP: kernel level autoconfiguration
IP: kernel level autoconfiguration:内核启动时自动配置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 version 4
[*] NFS client support for NFSv4.1 (EXPERIMENTAL)
[*] Root file system on NFS
开启内核中NFS相关服务。
- 编译内核:执行
"make zImage"
,生成的镜像文件在"./arch/arm/boot"
中。
3.1.2 烧写内核
参考烧写内核章节
3.2 挂载 nfs 目录
首先查看板子的IP,需保证板子的IP与PC处于同一网段。
IP查看:"ifconfig"
,IP改写:"vi /etc/eth0-setting"
。修改之后要重新确认是否已经改过来,如果未改,重启网卡或重启开发板。
挂载目录:"mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt"
mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt
1.将NFS服务器的共享文件(192.168.1.103:/home/minilinux/system)挂载到 /mnt 上。
2."-o nolock" 参数:
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
解决方法:kill 文件锁(lockd)或者 mount -o nolock
[root@FORLINX6410]# mount -t nfs 192.168.0.1:/home/hellolinux/rootfs /mnt/nfs
svc: failed to register lockdv1 RPC service (errno 111).
mount: mounting 192.168.0.1:/home/hellolinux/rootfs on /mnt/nfs failed: Connection refused
查看挂载情况:"df"
。
至此,开发板可以直接访问PC的文件,那么之后在调试时,只要将编译好的文件放入共享的目录中,在开发板上就能够直接进行执行或加载,无需再执行下载到开发板上的操作了。
以上是手动挂载,如何实现自动挂载呢?
3.3 内核启动自动挂载nfs目录
通过修改 /etc/init.d/rcS
文件,使得内核启动时,自动运行我们的命令。
打开开发板的 /etc/init.d/rcS
文件,在文末添加
ifconfig eth0 192.168.1.230 up
mount -t nfs -o nolock 192.168.1.103:/home/minilinux/system /mnt
- 第一句是使开发板的IP固定,而不用每次都去ifconfig
- 第二句,也就是前面手动挂载的命令。放到该文件中,内核启动时,自动运行。
注意:可能出现在开发板上手动mount可以,但自动加载不行的情况,那么在添加mount命令之前添加了 "sleep 5" 这条命令,可能是系统启动时,有些网络服务还未稳定。
参考:
- TCP/IP协议学习之六(RPC原理以及NFS协议)
- NFS笔记(一)NFS服务器工作原理及详细配置
- 迅为iTop4412精英板—linux系统编程—视频10、11
- 迅为独立文档和程序源码汇总—关于nfs那几篇文档
- 关于在开发板中实现NFS自动挂载的问题
nfs服务器的搭建和使用的更多相关文章
- 自学linux——21. NFS服务器的搭建
NFS服务器的搭建 1.NFS的认识 NFS(Network File System即网络文件系统)服务最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享文件,可以将远程 Linu ...
- 4、nfs服务器的搭建
4.1.nfs服务介绍: samba服务器一般互联网企业不会使用 nfs服务的端口是不固定的,需要先启动rpc服务对nfs服务端口进行注册 4.2.安装nfs: rpm -qa nfs-utils r ...
- 4412开发板学习笔记-NFS服务器的搭建
转自iTOP-4412讨论群: http://www.topeetboard.com 先来介绍一下NFS: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件 ...
- Liunx下NFS服务器的搭建与配置
一.NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NF ...
- Linux下NFS服务器的搭建与配置
一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...
- Linux下NFS服务器的搭建与配置(转载)
一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...
- Linux下NFS服务器的搭建与配置(转)
一.NFS服务简介 NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的. 它最大的功能就是可以透过网络,让不同的机器.不同的操作系统.可以彼此分享个别 ...
- NFS服务器的搭建与使用,实现数据同步
NFS的基本架构,如下图所示: NFS服务是基本RPC协议的,所以安装NFS的前提要安装RPC协议,就像java语言一定要基于jdk一样! 下面的搭建centos-1作为服务端模拟A服务器,cento ...
- CentOS NFS服务器的搭建与配置
1.查看系统是否已安装NFS [root@bogon ~]# rpm -qa | grep nfs [root@bogon ~]# rpm -qa | grep rpcbind 2.安装NFS [ro ...
随机推荐
- vsCode安装todo插件
使用过IDEA或者WebStrom的阿媛应该都知道他们都有一个TODO功能,方便我们跟踪注释,或者说是我们在项目代码里面所做的标记:但是如果你现在在使用vsCode,你会发现,没有TODO功能,幸好, ...
- python之scrapy的debug、shell、settings、pipelines
1.debug了解 2.scrapy shell了解 Scrapy shell是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath表达式 使用方法: scrap ...
- 【转】APIJSON,让接口见鬼去吧!
我: APIJSON,让接口和文档见鬼去吧! https://github.com/TommyLemon/APIJSON 服务端: 什么鬼? 客户端: APIJSON是啥? 我: APIJSON是一种 ...
- 利用Oracle定时任务重置序列
业务需求是:二元化编号规则:RYH+年月+001(开始),按月计算,每月1号重置为001 数据库中已有序列和函数如下: 解决方法:采用Oracle定时任务,每月1号重置该序列从1开始增长,SQL如下: ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- Tensorflow 保存模型 & 在java中调用
本节涉及: 保存TensorFlow 的模型供其他语言使用 java中调用模型并进行预测计算 一.保存TensorFlow 的模型供其他语言使用 如果用户选择“y” ,则执行下面的步骤: 判断程序执行 ...
- 【VS开发】关于在CFormView中实现CListCtrl控件的注意事项
[VS开发]关于在CFormView中实现CListCtrl控件的注意事项 标签(空格分隔): [VS开发] 今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框 ...
- 请求头出现Provisional headers are shown
provisional headers are shown 知多少:https://juejin.im/post/5c00980751882518805add83 请求头出现Provisional h ...
- day29 元类及异常处理
元类及异常处理 元类 什么是元类 在python中,一切皆对象,对象是由类产生的,那么类是不是对象呢? 举例: class A: pass print(type(A)) # <class 'ty ...
- 手写Indexof
String.prototype.indexO = function(st){ // console.log(this.length); let str = this; var j = 0; let ...