1. nfs 是什么
(略)http://vbird.dic.ksu.edu.tw/linux_server/linux_redhat9/0330nfs.php
2. 安装 nfs-kernel-server 和 rpcbind(替代portmap), 并启动rpcbind和nfs-kernel-server服务.
apt-get install nfs-common nfs-kernel-server
sudo apt-get install portmap
pi@raspberrypi ~ $ sudo service rpcbind start
[ ok ] Starting rpcbind daemon....
pi@raspberrypi ~ $ ps ax | grep rpcbind
4130 ? Ss 0:00 /sbin/rpcbind -w
4152 pts/0 S+ 0:00 grep --color=auto rpcbind
建立要分享及掛載的目錄
# mkdir /home/partimag
修改設定檔 /etc/exports
加入下面一列
# vim /etc/exports
/home/partimag 192.168.66.0/24(rw,sync,no_subtree_check)
啟動 NFS Server
# /etc/init.d/nfs-kernel-server start
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon [ OK ]
檢查是是有啟動成功
# showmount -e localhost
Export list for localhost:
/home/partimag 192.168.66.0/24
pi@raspberrypi ~ $ showmount -e localhost
Export list for localhost:
/home/pi/nfs_server *
pi@raspberrypi ~ $ sudo mount -t nfs 127.0.0.1:/home/pi/nfs_server /mnt -o nolock
pi@raspberrypi ~ $ cd /mnt/
pi@raspberrypi /mnt $ ls
pi@raspberrypi /mnt $ >nfs.txt
pi@raspberrypi /mnt $ ls
nfs.txt
pi@raspberrypi /mnt $ cd /home/pi/nfs_server/
pi@raspberrypi ~/nfs_server $ ls
nfs.txt
修改/etc/exports文件,在其中增加NFS服务器目录。 一个NFS服务器可以共享多个NFS目录,在/etc/exports文件中,每个目录的设置独占一行,编写格式如下:
NFS共享目录路径 客户机IP或者名称(参数1,参数2,...,参数n)
说明:
q NFS共享目录可以是主机的任何一个目录,为了方便使用,最好将权限设置为777。
q 客户机指的是可以访问共享目录的客户机的IP或者主机名,可以是指定的IP或者主机名。如果使用IP,可以使用通配符。假如指定IP为192.168.1.x的客户机可以访问,可以写成192.168.1.*,如果设置为*,则表示任何客户机都可以访问。
q 访问参数可以是一个,也可以是多个,用逗号分开。可能的参数和说明如 REF _Ref286733518 h 表 5.108D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003200380036003700330033003500310038000000 所列。
表 STYLEREF 1 s 5. SEQ 表 * ARABIC s 1 1 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_squash |
root用户具有根目录的完全管理访问权限 |
anonuid=xxx |
指定nfs服务器/etc/passwd文件中匿名用户的UID |
anongid=xxx |
指定nfs服务器/etc/passwd文件中匿名用户的GID |
假定NFS共享目录是/home/ky/nfs,允许所有客户机访问,/etc/exports文件可写为:
/home/ky/nfs *(rw,sync,no_subtree_check, no_root_squash)
如果NFS已经启动,修改了/etc/exports文件,执行如下命令,新的设置即可生效:
ky@ubuntu:~$ exportfs -ra
本地验证NFS服务器。将NFS服务器目录挂载到本机另外一个目录下,可以看到挂载点目录下可以看到NFS服务器目录中的文件。
ky@ubuntu:~$ ls /home/ky/nfs/
aaaa
ky@ubuntu:~$ sudo mount -t nfs 127.0.0.1:/home/ky/nfs /mnt
ke@ubuntu:~$ ls /mnt
aaaa
ky@ubuntu:~$ sudo umount /mnt/
用开发板验证NFS服务器是否可用。启动开发板,进入系统,配置好开发板的IP地址后,用mount命令挂载NFS服务器的NFS目录:
target# mount -t nfs 192.168.1.3:/home/ky/nfs /mnt -o nolock
target# ls /mnt
kingyee
target# umount /mnt/
挂载成功后,可以在开发板的/mnt目录下看到NFS服务器上的文件。
说明,使用开发板与虚拟机安装的客户系统进行NFS挂载,需要将虚拟网卡设置为Bridged模式,并建议使用静态IP地址。
如果在使用中需要增加新的NFS共享目录,直接修改/etc/exports文件即可。修改该文件后,可以不用重启NFS服务,用exportfs命令读取/etc/exports文件,重新共享输出。exportfs命令语法如下:
exportfs [-aruv]
选项说明:
-a:全部挂载(或卸载) /etc/exports的设置;
-r:重新挂载/etc/exports的设置;
-u:卸载某一个目录;
-v:在输出的时候,把共享目录显示出来。