当前位置:首页 » 编程软件 » 编译安装nfs

编译安装nfs

发布时间: 2022-10-06 14:35:16

⑴ 嵌入式ARM linux操作系统中如何构建交叉开发环境

这个问题相当专业了,之前我去周立功那边了解过的。

按照以下步骤进行安装:

1) 安装32位的兼容库和libncurses5-dev库

在安装交叉编译工具之前需要先安装32位的兼容库和libncurses5-dev库,安装32兼容库需要从ubuntu的源库中下载,所以需要在Linux主机系统联网的条件下,通过终端使用如下命令安装:

vmuser@Linux-host ~$sudo apt-get install ia32-libs

若Linux主机系统没有安装32位兼容库,在使用交叉编译工具的时候可能会出现错误:

-bash: ./arm-fsl-linux-gnueabi-gcc: 没有那个文件或目录

在终端中使用如下命令则可以安装libncurses5-dev库。

vmuser@Linux-host ~$sudo apt-get install libncurses5-dev

如果没有安装此库,在使用make menucofig时出现如下所示的错误:

*** Unableto find the ncurses libraries or the

*** required headerfiles.

*** 'makemenuconfig' requires the ncurses libraries.

***

Installncurses (ncurses-devel) and try again.

***

make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1

make: *** [menuconfig] 错误 2

2) 安装交叉编译工具链

将交叉编译工具“gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2”文件通过U盘的方式拷贝到Linux主机的“/tmp”目录下,然后执行如下命令进行解压安装交叉编译工具链:

vmuser@Linux-host ~$ cd /tmp

vmuser@Linux-host ~$ sudo tar -jxvfgcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/

vmuser@Linux-host /tmp$ # 输入vmuser用户的密码“vmuser”

执行完解压命令后,交叉编译工具链将被安装到“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0”目录下。交叉编译器的具体目录是“/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin”,为了方便使用,还需将该路径添加到PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下:

在终端中输入如下指令

vmuser@Linux-host ~$ sudo vi /etc/profile # 若提示输入密码,则输入“vmuser”

用vi编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin

文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效。

vmuser@Linux-host ~$source /etc/profile

在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux-gnueabi-前缀的命令,则基本可以确定交叉编译器安装正确,如下图所示。

⑵ 如何将服务器中文件夹或磁盘映射到多台个人电脑实现共享

映射网络驱动器时,每次重启电脑需要映射,让人不厌其烦,后来想到制作一个批处理文件,并设置开机启动,这样就解决了这一问题。
批处理文件命令:

Java代码

  • @echooff

  • netuseZ:\IPshareFile"password"/user:"ftpname"


  • 开机启动设置:


  • win+R跳出运行对话框;然后输入regedit调出注册表编辑器-依次展开HKEY_LOCAL_MACHINE-SOFTWARE-MICROSOFT-WINDOWS-CURRENTVERSION-RUN 在右面新建一个字符串值数据设置为该批处理文件的路径!关闭就OK!!

  • 详情如下:


  • 1. 利用批处理文件来自动映射



  • ① 首先制作自动映射网络驱动器批处理文件;



  • ② 利用Net Use命令,其基本格式如下:



  • NET USE



  • [devicename | *] [\computernamesharename[volume] [password | *]]



  • [/USER:[domainname]username]



  • [/USER:[dotted domain name]username]



  • [/USER:[username@dotted domain name]



  • [/SMARTCARD]



  • [/SAVECRED]



  • [[/DELETE] | [/PERSISTENT:{YES | NO}]]



  • 其中,devicename是映射的盘符,自己定义,比如Z:、Y:等,如果为*,则每次创建都选择一个盘符;computername为所要映射的计算机名称,用其IP地址也可以;sharename为共享的文件夹;password为连接所需密码;username是连接该计算机的用户名;SAVECRED是否保存用户名和密码;PERSISTENT是否永久连接,YES或NO,示例如下:



  • @echo off



  • net use z: \Serversharefile "" /user:"guest" /persistent:no



  • 即映射\Serversharefile到Z:盘,用户名为Guest,密码为空



  • ③ 制作步骤如下:



  • 首先定义一个txt文件,然后修改其扩展名为bat,比如NetMapping.bat;接着编辑这个批处理文件,写入如下命令:



  • @echo off



  • net use z: \Serversharefile "" /user:"guest" /persistent:no



  • 根据需要修改要连接的计算机名称,共享文件名,登陆用户名和密码,还有定义的盘符。



  • 再接着有几种执行方式,最简单的方式是将这个批处理文件放在“启动”项里,用户每次注销或重启计算机都会自动映射网络驱动器,但是如果Z:映射的已经存在,则不再创建。

⑶ Linux的VPS上如何使用NFS麻烦告诉我

解决方案 NFS有两种类型,一种是Kernel space NFS,一种是user space NFS。 Kernel Space的NFS依赖于内核中的CONFIG_NFSD=m参数。当编译内核的时候,需要将NFS支持编译进去。 通常,默认的Linux内核一般都支持Kernel Space,无须单独编译或者安装了。 只要安装操作系统上自带的NFS软件包,即可使用Kernel space方式的NFS。 出于安全方面的原因,vps内不能使用Kernel space NFS,只能使用user space NFS。 User Space的有点是无须任何内核级别的支持。当NFS出现问题的时候,只有NFS进程会卡出或者崩溃 但是内核以及整个Linux系统都不会出现问题。缺点是user-space NFS的速度稍稍慢于Kernel space NFS。 在vps内如果需要运行NFS,一个很好的选择是"The Linux User-Space NFS Server"。 这个程序由Olaf Kirc开发,很多Linux发行版都已经内置他的支持, 例如:Debian Sarge (NFS-user-server),OpenSUSE 10.0 (NFS-server) 其他的一些Linux发行版,需要单独下载rpm安装包并安装。 The Linux User-Space NFS Server提供了NFS v2协议的支持,还有一些其他组件如uNFS3提供了NFS v3的支持 也可以根据需求安装 注意:redhat as/es 系列Linux内置的rpm NFS-lib是Kernel space NFS,不是User Space NFS。 英文资料参考:

⑷ 在ubuntu14.04下安装最后重启nfs时出现这样的警告* Not starting: portmapper is not running

用下面的这个命令是可以编译通过的,但有俩个警告

arm-linux-g++ -o opencv_test.o test.c -I /usr/local/include/opencv -L /usr/local/lib -lopencv_core -lopencv_highgui -lpthread -lrt

运行上面的命令之前,要将 opencv2 这个目录复制到 opencv下,这俩个目录都在 /usr/local/include/ 下。

g++ `pkg-config opencv --cflags --libs opencv` -o DisplayImage DisplayImage.cpp -I /usr/local/include/opencv -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_gpu -lopencv_ts -lopencv_video -lopencv_objdetect -lopencv_ml -lpthread
我用这个OK的~

⑸ nfsv4 怎么配置

官网提供的可执行文件是基于64位Linux的:zynq_linux.tar.gz. 对于32位的系统,需要自己编译,解决方案如下: 1) 下载代码:git clone git://git.xilinx.com/qemu-xarm.git 2) 配置工程: cd qemu-xarm ./configure --target-list=arm-softmmu...

⑹ 配置NFS服务器的过程。

在讲NFS SERVER的运作之前先来看一些与NFS SERVER有关的东西:
RPC(Remote Procere Call)
NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议勇士用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT 的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
NFS需要启动的DAEMONS
pc.nfsd:主要复杂登陆权限检测等。
rpc.mountd:负责NFS的档案系统,当CLIENT端通过rpc.nfsd登陆SERVER后,对clinet存取server的文件进行一系列的管理
NFS SERVER在REDHAT LINUX平台下一共需要两个套件:nfs-utils和PORTMAP
nfs-utils:提供rpc.nfsd 及 rpc.mountd这两个NFS DAEMONS的套件
portmap:NFS其实可以被看作是一个RPC SERVER PROGRAM,而要启动一个RPC SERVER PROGRAM,都要做好PORT的对应工作,而且这样的任务就是由PORTMAP来完成的。通俗的说PortMap就是用来做PORT的mapping的。
一:服务器端的设定(以LINUX为例)
服务器端的设定都是在/etc/exports这个文件中进行设定的,设定格式如下:
欲分享出去的目录 主机名称1或者IP1(参数1,参数2) 主机名称2或者IP2(参数3,参数4)
上面这个格式表示,同一个目录分享给两个不同的主机,但提供给这两台主机的权限和参数是不同的,所以分别设定两个主机得到的权限。
可以设定的参数主要有以下这些:
rw:可读写的权限;
ro:只读的权限;
no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。
root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份;
all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。
anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。
anongid:同 anonuid ,但是变成 group ID 就是了!
sync:资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
insecure 允许从这台机器过来的非授权访问
例如可以编辑/etc/exports为:
/tmp*(rw,no_root_squash)
/home/public192.168.0.*(rw) *(ro)
/home/test192.168.0.100(rw)
/home/linux *.the9.com(rw,all_squash,anonuid=40,anongid=40)
设定好后可以使用以下命令启动NFS:
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
/etc/rc.d/init.d/nfs start
exportfs命令:
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v :在 export 的时候,将详细的信息输出到屏幕上。
具体例子:
[root @test root]# exportfs -rv
2、mount nfs目录的方法:
mount -t nfs hostname(orIP):/directory /mount/point
具体例子:
Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs
BSD: mount 192.168.0.1:/tmp /mnt/nfs
3、mount nfs的其它可选参数:
HARD mount和SOFT MOUNT:
HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT上。
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
对于到底是使用hard还是soft的问题,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
rsize和wsize:
文件传输尺寸设定:V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响
bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度)
fg:和bg正好相反,是默认的参数
nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER 3
mountport:设定mount的端口
port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定
timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。
intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
udp:使用udp作为nfs的传输协议(NFS V2只支持UDP)
tcp:使用tcp作为nfs的传输协议
namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255
acregmin=n:设定最小的在文件更新之前cache时间,默认是3
acregmax=n:设定最大的在文件更新之前cache时间,默认是60
acdirmin=n:设定最小的在目录更新之前cache时间,默认是30
acdirmax=n:设定最大的在目录更新之前cache时间,默认是60
actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。
retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes
noac:关闭cache机制。
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
4、/etc/fstab的设定方法
/etc/fstab的格式如下:
fs_specfs_filefs_typefs_optionsfs_mpfs_pass
fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于nfs这个参数一般设置为这样:192.168.0.1:/NFS
fs_file:本地的挂载点
fs_type:对于NFS来说这个字段只要设置成nfs就可以了
fs_options:挂载的参数,可以使用的参数可以参考上面的mount参数。
fs_mp-该选项被"mp"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0
fs_pass-该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0 。
5、与NFS有关的一些命令介绍
nfsstat:
查看NFS的运行状态,对于调整NFS的运行有很大帮助
rpcinfo:
查看rpc执行信息,可以用于检测rpc运行情况的工具。
四、NFS调优
调优的步骤:
1、测量当前网络、服务器和每个客户端的执行效率。
2、分析收集来的数据并画出图表。查找出特殊情况,例如很高的磁盘和CPU占用、已经高的磁盘使用时间
3、调整服务器
4、重复第一到第三步直到达到你渴望的性能
与NFS性能有关的问题有很多,通常可以要考虑的有以下这些选择:
WSIZE,RSIZE参数来优化NFS的执行效能
WSIZE、RSIZE对于NFS的效能有很大的影响。
wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小,这两个参数的合理设定与很多方面有关,不仅是软件方面也有硬件方面的因素会影响这两个参数的设定(例如LINUX KERNEL、网卡,交换机等等)。
下面这个命令可以测试NFS的执行效能,读和写的效能可以分别测试,分别找到合适的参数。对于要测试分散的大量的数据的读写可以通过编写脚本来进行测试。在每次测试的时候最好能重复的执行一次MOUNT和unmount。
time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
用于测试的WSIZE,RSIZE最好是1024的倍数,对于NFS V2来说8192是RSIZE和WSIZE的最大数值,如果使用的是NFS V3则可以尝试的最大数值是32768。
如果设置的值比较大的时候,应该最好在CLIENT上进入mount上的目录中,进行一些常规操作(LS,VI等等),看看有没有错误信息出现。有可能出现的典型问题有LS的时候文件不能完整的列出或者是出现错误信息,不同的操作系统有不同的最佳数值,所以对于不同的操作系统都要进行测试。
设定最佳的NFSD的COPY数目。
linux中的NFSD的COPY数目是在/etc/rc.d/init.d/nfs这个启动文件中设置的,默认是8个NFSD,对于这个参数的设置一般是要根据可能的CLIENT数目来进行设定的,和WSIZE、RSIZE一样也是要通过测试来找到最近的数值。
UDP and TCP
可以手动进行设置,也可以自动进行选择。
mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR
UDP有着传输速度快,非连接传输的便捷特性,但是UDP在传输上没有TCP来的稳定,当网络不稳定或者黑客入侵的时候很容易使NFS的 Performance 大幅降低甚至使网络瘫痪。所以对于不同情况的网络要有针对的选择传输协议。nfs over tcp比较稳定, nfs over udp速度较快。在机器较少网络状况较好的情况下使用UDP协议能带来较好的性能,当机器较多,网络情况复杂时推荐使用TCP协议(V2只支持UDP协议)。在局域网中使用UDP协议较好,因为局域网有比较稳定的网络保证,使用UDP可以带来更好的性能,在广域网中推荐使用TCP协议,TCP协议能让NFS在复杂的网络环境中保持最好的传输稳定性。可以参考这篇文章: http: //www.hp.com.tw/ssn/unix/0212/unix021204.asp
版本的选择
V3作为默认的选择(RED HAT 8默认使用V2,SOLARIS 8以上默认使用V3),可以通过vers= mount option来进行选择。
LINUX通过mount option的nfsvers=n进行选择。
五、NFS故障解决
1、NFSD没有启动起来
首先要确认 NFS 输出列表存在,否则 nfsd 不会启动。可用 exportfs 命令来检查,如果 exportfs 命令没有结果返回或返回不正确,则需要检查 /etc/exports 文件。
2、mountd 进程没有启动
mountd 进程是一个远程过程调用 (RPC) ,其作用是对客户端要求安装(mount)文件系统的申请作出响应。mountd进程通过查找 /etc/xtab文件来获知哪些文件系统可以被远程客户端使用。另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表。查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行:
100005 1 udp 1039 mountd
100005 1 tcp 1113 mountd
100005 2 udp 1039 mountd
100005 2 tcp 1113 mountd
100005 3 udp 1039 mountd
100005 3 tcp 1113 mountd
如果没有起来的话可以检查是否安装了PORTMAP组件。
rpm -qa|grep portmap
3、fs type nfs no supported by kernel
kernel不支持nfs文件系统,重新编译一下KERNEL就可以解决。
4、can't contact portmapper: RPC: Remote system error - Connection refused
出现这个错误信息是由于SEVER端的PORTMAP没有启动。
5、mount clntudp_create: RPC: Program not registered
NFS没有启动起来,可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。
6、mount: localhost:/home/test failed, reason given by server: Permission denied
这个提示是当client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。
7、被防火墙阻挡
这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。
六、NFS安全
NFS的不安全性主要体现于以下4个方面:
1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现
2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制
3、较早的NFS可以使未授权用户获得有效的文件句柄
4、在RPC远程调用中,一个SUID的程序就具有超级用户权限
加强NFS安全的方法:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。
4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
/etc/hosts.deny
portmap: ALL : deny
5、改变默认的NFS 端口
NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。
6、使用Kerberos V5作为登陆验证系统

⑺ NFS服务器一个目录的写入文件所有人变为root会怎么样

、NFS概述
NFS:Network file system,网络文件系统;
由sun公司1984年推出,用来在网络中的多台计算机间实现资源共享(包括象文件或cd-rom);
设计的目的是:实现在不同系统间交互使用,所以它的通信协议采用与主机和操作系统无关的技术;
NFS Server可以看作是File Server,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使
用NFS的远端文件就象是在使用本地文件一样;
NFS协议从诞生到现在有多个版本:NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010);

如何查看nfs当前的版本:
rpm -qi portmap
rpm -qi nfs-utils
NFS服务器的安装:
可以由多种安装方法:
----在安装linux系统时选择安装nfs服务对应的组件;(多数linux发行版本默认安装)
----安装nfs的rpm套件包(手动安装)
rpm -ivh rpm包
需要5个RPM包。
setup-*: 共享NFS目录在/etc/exports中定义 (linux默认都安装)
initscripts-*: 包括引导过程中装载网络目录的基本脚本 (linux默认都安装)
nfs-utils-*: 包括基本的NFS命令与监控程序
portmap-*: 支持安全NFS RPC服务的连接
quota-*: 网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的)
----也可以去下载nfs的源代码包,进行编译安装;

RPC(Remote Procere call)
NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这
些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC
服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS
是一个文件系统,而RPC是负责负责信息的传输。

nfs在系统中的后台守护进程:
nfs

nfs服务需要启动的其他进程:
rpc.nfsd:接收从远程系统发来的NFS请求,并将这些请求转化为本地文件系统请求;
rpc.mountd:执行被请求的文件系统的挂接和卸载操作;
rpc.portmapper:将远程请求映射到正确的NFS守护程序;
rpc.statd:在远程主机重启时,提供加锁服务;
rpc.quotaed:提供硬盘容量的管理能力,磁盘限额;
rpcinfo -p 可以查看所要的守护进程时候正常运行;
ps -ef | grep nfsd
ps -ef | grep mountd
ps -ef | grep protmap
现在我们来查看服务器上有关NFS服务器启动了哪些端口:
# lsof -i|grep rpc
portmap 1931 daemon 3u IPv4 4289 UDP *:sunrpc
portmap 1931 daemon 4u IPv4 4290 TCP *:sunrpc (LISTEN)
rpc.statd 3206 statd 3u IPv4 7081 UDP *:1029
rpc.statd 3206 statd 6u IPv4 7072 UDP *:838
rpc.statd 3206 statd 7u IPv4 7085 TCP *:1031 (LISTEN)
rpc.mount 3483 root 6u IPv4 7934 UDP *:691
rpc.mount 3483 root 7u IPv4 7937 TCP *:694 (LISTEN)
NFS服务的主配置文件:
/etc/exports:
格式:
[共享的目录] [主机名或IP(参数,参数)]
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]

第一列:欲共享出去的目录,也就是想共享到网络中的文件系统;
第二列:可访问主机
192.168.152.13 指定IP地址的主机
nfsclient.test.com 指定域名的主机
192.168.1.0/24 指定网段中的所有主机
*.test.com 指定域下的所有主机
* 所有主机
第三列:共享参数
下面是一些NFS共享的常用参数:
下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全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_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
例如可以编辑/etc/exports为:
/tmp*(rw,no_root_squash)
/home/public192.168.0.*(rw) *(ro)
/home/test192.168.0.100(rw)
/home/linux *.the9.com(rw,all_squash,anonuid=40,anongid=40)
相关的命令:
1、exportfs命令:
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命
令格式如下:
exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount目录
-v :在export的时候,将详细的信息输出到屏幕上。
具体例子:
# exportfs -au 卸载所有共享目录
# exportfs -rv 重新共享所有目录并输出详细信息
2、启动NFS
# service portmap start
# service nfs start
检查NFS的运行级别:
# chkconfig --list portmap
# chkconfig --list nfs
根据需要设置在相应的运行级别自动启动NFS:
# chkconfig --level 235 portmap on
# chkconfig --level 235 nfs on
nfsstat:
查看NFS的运行状态,对于调整NFS的运行有很大帮助
rpcinfo:
查看rpc执行信息,可以用于检测rpc运行情况的工具
另外,还需要查看系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了正确的NFS访问规则;
3、客户端操作和配置
1、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法
showmout
-a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
-e :显示指定的NFS SERVER上export出来的目录。
例如:
showmount -e 192.168.0.30
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.0.100
客户端运行以下命令MOUNT NFS文件系统
#mount -t nfs 192.168.70.50:/opt /mnt/disk1
2、mount nfs目录的方法:
mount -t nfs hostname(orIP):/directory /mount/point
具体例子:
Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
mount nfs的其它可选参数:
HARD mount和SOFT MOUNT:
HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT
上。
SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
rsize和wsize:
文件传输尺寸设定:wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响
bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设
定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度)
fg:和bg正好相反,是默认的参数
nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER 3
mountport:设定mount的端口
port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定
timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳
定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。
intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
udp:使用udp作为nfs的传输协议(NFS V2只支持UDP)
tcp:使用tcp作为nfs的传输协议
namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255
acregmin=n:设定最小的在文件更新之前cache时间,默认是3
acregmax=n:设定最大的在文件更新之前cache时间,默认是60
acdirmin=n:设定最小的在目录更新之前cache时间,默认是30
acdirmax=n:设定最大的在目录更新之前cache时间,默认是60
actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。
retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes
noac:关闭cache机制。
同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式
mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
3、/etc/fstab的设定方法
/etc/fstab的格式如下:
fs_specfs_filefs_typefs_optionsfs_mpfs_pass
fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于nfs这个参数一般设置为这样:192.168.0.1:/NFS
fs_file:本地的挂载点
fs_type:对于NFS来说这个字段只要设置成nfs就可以了
fs_options:挂载的参数,可以使用的参数可以参考上面的mount参数。
fs_mp-该选项被"mp"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0
fs_pass-该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应
该为2。若该文件系统无需在启动时扫描则设置该字段为0 。
4、可能出现的问题
rpc超时问题
在服务器上的hosts文件加上了客户机的ip地址解析。
5、NFS安全
NFS的不安全性主要体现于以下4个方面:
1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现
2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制
3、较早的NFS可以使未授权用户获得有效的文件句柄
4、在RPC远程调用中,一个SUID的程序就具有超级用户权限.
加强NFS安全的方法:
1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要
使用root_squash。
2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
如果我们的NFS服务器在防火墙后边,则需要在防火强策略中加入如下策略:
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。
4、使用 /etc/hosts.allow和/etc/hosts.deny 控制客户端的访问
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
/etc/hosts.deny
portmap: ALL : deny
5、改变默认的NFS 端口
NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。
6、使用Kerberos V5作为登陆验证系统

⑻ ubuntu跟ok6410板子网络不通怎么办

OK6410 与wmware中ubuntu10.04 通信

开发板:ok6410-A,linux3.0.1

宿主机:VMware Ubuntu 10.04

主要讲讲我配置时碰到的问题:

1、  一开始不知为什么开发板和宿主机一直ping 不通,很是纳闷,上网查了一下,说可能导致ping不通的原因有:

a)           开发板和宿主机不在同一网段

b)          防火墙没关

c)           开启了wifi

d)          不能使用dnw0.6,可以使用超级终端

 

于是将上述可能会导致ping不同的原因一一排除,还是ping不同。后无意之中查看了一样网络连接,发现自己装了两个虚拟机,wmware、virtualbox,想想wifi有影响,那么vmbox会不会也有影响呢,于是将virtualbox的网络禁用,再测试一下,ping通。

之后再换dnw0.6 测试一下,也OK。所以d)应该是不对的。

2、  关于宿主机安装nfs

只装了:apt-get install nfs-kernel-server,OK。

配置,打开:/etc/exports,我的原件是这样的:

 

修改后:(一开我以为前面都要加“#”,这样是不对的)

 

 
3、 开发板挂载

注意:这个是在ok6410上操作的。也就是在你超级终端或者dnw上运行,而超级终端(或者dnw)连接的是ok6410。

如果哪边没有配置好,输入:

mount –t nfs –o nolock 121.248.202.163:/armnfs /mnt

会有提示挂载失败,挂载成功则无提示。

 

挂载成功,直接进入/mnt,输入ls,显示:(什么也没有)

 

因为你还该文件夹下还没有文件。

此时,进入宿主机的“/armnfs”文件夹下创建一个hello.c的文件:

 

(其中gedit是一个文件编辑器,也就是创建了一个hello.c的文件,然后保存)

 

再查看开发板的/mnt文件夹下的内容:

 

 
好了,有了,这样就实现了将宿主机上的文件直接共享给了开发板,而不用在麻烦的使用SD等工具进行文件的传输了。

//*****************************************************************************

*以下是摘抄的,我的也主要是参考下面的来进行操作的,原文地址:

http://www.cnblogs.com/emouse/archive/2012/03/26/2418496.html

*****************************************************************************//

昨天拿到了OK6410的开发板,板子还是不错的,就是资料有点乱,今天通过SD卡和DNW烧写了光盘里给的3.0的Linux系统,晚上打算运行一个简单的交叉编译小程序。

我的开发环境:

开发板:OK6410,Linux 3.0.1

宿主机:VMware Ubuntu 11.10

先说一下NFS
      直接说我的个人理解,NFS就是网络文件系统,用NFS可以实现把宿主机的目录挂载到开发板上,这样用宿主机进行交叉编译时就不用用USB或者SD卡将编译好的文件拷贝到开发板上运行了,调试程序非常方便。常用的NFS有两种,一种是做NFS根文件系统,及Linux的根文件系统就是网络上的NFS,也就是说开发板的启动文件全部是通过NFS从宿主机读取的,没有网络系统都启动不起来,目前网上找了很多都是这一种。这一种需要在U-boot中设置好同事还需要在内核中进行相应的配置。

      第二种是将宿主机的某个目录映射到开发板的某个目录,这个操作是在linux系统中配置的,比较之下先用第二种,本文就介绍这一种。

IP设置
由于nfs是基于网络的,因此ip设置是首要的。首先是主机,虚拟机运行的linux要把网络改为桥接的方式。如图所示。

 

 
然后通过ifconfig查看地址。

开发板进入linux系统后连接网络通过ifconfig查看地址。如果不和主机在一网段内需要设置

ifconfig eth0 121.248.202.168 netmask 255.255.255.0 up

或者可以通过DHCP自动分配

超级终端里面输入:
udhcpc –i eth0 

 
命令,用来动态获取IP 地址,-i 参数用来指定网卡名称。
板子默认的配置适合连接路由使用,刚开始也纳闷是不是必须使用路由,实际上只要是一个网段内的都可以。

设置好之后互相ping一下。

开发板ping宿主机,如图所示。按ctrl+C结束,如图所示,表示ping通。

 

 
主机ping开发板也一样。

互相能够ping通是前提,这一步搞不通一是查看网络,是不是防火墙啥的,为了确定不是虚拟机的问题,可以用虚拟机ping同一网段其他电脑试试,来排除虚拟机的问题。

如果这个不同就看看板子的内核和网卡设置。

宿主机nfs配置
     ubuntu中默认是没有安装nfs的,安装非常简单,联网情况下运行

apt-get install nfs-kernel-server

如果安装不成功在试试安装nfs-common和portmap,我是装这一个就可以了。

接下来需要编辑一下配置文件:

修改/etc/exports,在末尾添加:/armnfs  *(rw,sync,no_root_squash)可以使用vi修改,vi怎么使用这里就不说了自己网络一下。

/armnfs 表示我需要设置的宿主机共享目录

* 和前面中间有个空格,*表示任意ip均可连接,同理可以设置成某一个ip段,如192.168.0.*

rw 表示可读可写

no_root_squash允许客户机享有主机root身份

保存后在根目录下对应新建armnfs文件夹

mkdir armnfs

修改目录权限

chmod 777 -R /armnfs

好了,启动nfs

service nfs-kernel-server start

开发板挂载
开发板上挂载nfs

mount –t nfs –o nolock 121.248.202.163:/armnfs /mnt

含义为宿主机IP:宿主机nfs目录 开发板挂载目录

挂载之后在宿主机上的目录下新建个文件看看是否在开发板中能够看到。

 

下面可以在宿主机上利用交叉编译工具链编译个小程序在板子上跑了。

⑼ 如何从NFS启动Linux及原理

首先我们要明确我们所指的程序,是放在有目录级结构的文件系统里,为了寻找到所需要操作系统来运行的程序,我们必须告诉它,文件在哪个文件系统。一 般来说,PC机的文件就存储在硬盘上;对于Live CD而言,文件系统就藏在光盘上面。也就是说,只要操作系统能找到并正确地认识了文件系统,就可以执行里面的程序了!
设置目标机器上的NFS启动
看完了第一节,明白启动的过程了吗? 简单地说,就是内核加载 ,内核找到一个文件系统 ,内 核执行文件系统里的一个程序 。无论是从NFS启动,还是从硬盘启动,都是上述过程。只是NFS启动,其文件系统是放在网络上的。只要我 们告诉内核,具体放在什么地方,在网络的另一端我们设置好共享,自然可以从NFS启动。
让内核识别NFS并可从NFS启动
编译内核
在内核源代码目录树下,配置内核:
$make menuconfig
依次进入 File Systems -> Network File System中选择 NFS client support 以及 Root file system on NFS。如果找不到Root file system on NFS 选项,要打开第一级菜单下的Networking support -> Networking options -> TCP/IP networking -> IP: kernel level autoconfiguration。如果NFS要使用DHCP,还得选上 IP: DHCP support。
保存配置并重新编译即可。
配置内核参数
进入ARM开发板的设置 linux_cmd_line的地方(mini2440则为开机按 s,输入linux_cmd_line,并带着引号输入参数),或者进入PC的GRUB,设置类似参数
root=/dev/nfs rw nfsroot=192.168.1.1:/linux ip=192.168.1.5:::255.255.255.0:linux::off
该配置为静态IP设置。各参数意义如下:
root=/dev/nfs :指定根文件系统为 /dev/nfs,即NFS 。这与/dev这个目录并没有什么关系,在此仅为一个名字。
rw :根文件系统挂载为可读写。还可以有 ro 即只读的选项。
nfsroot=192.168.1.1:/linux :指明挂载哪一个NFS上的哪一个目录。这里指的是挂载IP 为192.168.1.1的电脑上导出的/linux目录。
ip=192.168.1.5:::255.255.255.0:linux::off :设置本机的IP。此举是为了 连接刚才设置的IP。这里是一个静态的配置,配置的格式为 ip=本机的IP地址::网关地址:网络掩码:本机的主机名:网络接口名:off 。一般情况下网关、网络接口名都不需要设置。如果是DHCP获取IP,那很简单,直接 ip=dhcp 即可。
设置NFS服务器
Ubuntu下看链接:http://blog.mcuol.com/User/xiaoxiaopig/article/37324_1.htm
NFS服务器可以是任意操作系统,只要能提供NFS服务即可(WINDOWS可以使用 WSU —— Windows Services for Unix来实现,具体请参考接下来本站要发表的文章)。在这里以Fedora为例,希望别的发行版的用户触类旁通。
对于Fedora来说,有图形界面的工具进行设置,在管理-》服务器设置-》NFS中添加一个共享即可。
更通用的作法,就是修改 /etc/exports文件,之后再启动NFS服务器。
/etc/exports文件格式如下
导出的文件夹 导出的网段(对该导出的网段的选项)
所谓导出的网段就是只向哪个网段导出,保证安全性。一个例子为:
/linux 192.168.1.0/24(rw,sync,no_root_squash)
就是将 /linux 导出到网段为192.168.1.0,子网掩码为255.255.255.0 (即24)的网络。其中可用的选项为(翻译自man文档):
secure和insecure : secure选项下,所有连接的端口均小于1024。默认打开。
rw和ro : Read/Write和Read Only
async和sync async将使用异步数据存取,数据并非马上写入服务器的。sync则相反。使用async需要注意服务器不能随意不正常地关闭,否则可能导致数据丢失。
no_wdelay :不使用延迟写入。NFS服务器会将写入写入请求缓冲起来,可以提高性能。如果async已经打开那么该选项无效。
no_subtree_check :不进行子树检查(使用该选项易引起安全问题)
root_squash和no_root_squash、all_squash :root_squash选项使得客户端以root权限访问 文件系统时,转换为服务器端的匿名用户。这选项打开一定要设置好服务器的权限。
之后再重新启动NFS服务。Fedora下使用 /etc/init.d/nfs restart
使用 exports查看导出的文件。

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:335
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:943
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:739
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371