一. nfs
1. nfs简介
nfs全称是network file system
nfs允许一个系统在网络上与他人共享目录和文件。通过使用nfs,用户和程序可以像访问本地文件一样访问远端系统上的文件。
假如有三台机器a, b, c,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到a, b, c. 但是使用nfs只需要放到a上,然后a共享给b和c即可。访问的时候,b和c是通过网络的方式去访问a上的那个目录的。
2. 安装、配置nfs服务
需要安装两个包(nfs-utils和rpcbind)
yum install -y nfs-utils 会同时安装上rpcbind
提供nfs服务的机器上 vim /etc/exports //内容如下:
/home/ 192.168.137.0/24(rw,sync,all_squash,anonuid=501,anongid=501)
共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个ip也可以是一个ip段)第三部分就是小括号里面的,为一些权限选项。它表示:共享的目录为/home,信任的主机为192.168.137.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。
启动顺序
/etc/init.d/rpcbind start #首先启动rpcbind用于启动注册端口,nfs客户端通过该服务确定连接通道
[root@localhost data]# netstat -antpl | grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* listen 1816/rpcbind
/etc/init.d/nfs start
showmount -e 192.168.1.116 #查看
3. nfs配置的一些选项说明
rw :读写;
ro :只读;
sync :同步模式,内存中数据时时写入磁盘;
async :不同步,把内存中数据定期写入磁盘中;
no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;
root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
all_squash:不管使用nfs的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用nfs的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。
4. 客户端上挂载nfs
客户端同样安装 yum install -y nfs-utils
查看服务器端都共享了哪些目录
showmount -e 192.168.137.10
在客户端上挂载服务端的nfs
mount -t nfs -onolock,nfsvers=3 192.168.137.10:/home/ /mnt/ #如果不加 -onolock,nfsvers=3 则在挂载目录下的文件属主和组都是nobody,如果指定nfsvers=3则显示root
df -h 查看挂载的情况
[root@slave mnt]# df -h
filesystem size used avail use% mounted on
192.168.1.116:/data/www/ 14g 2.1g 11g 17% /mnt
5. exportfs 命令的使用
-a :全部挂载或者卸载;
-r :重新挂载;
-u :卸载某一个目录;
-v :显示共享的目录
改变/etc/exports配置文件后,不用重启nfs服务直接用这个exportfs即可
exportfs -arv 使生效
在使用nfs时,常用一个选项就是 -o nolock
我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中 192.168.137.10:/tmp/ /test nfs nolock 0 0 然后 mount -a
故障错误
从出错日志可以看出,mount.nfs: access denied by server while mounting
i googled and found that since the port is over 1024 i needed to add the "insecure" option to the relevant line in /etc/exports on the server. once i did that (and ran exportfs -r), the mount -a on the client worked.
//如果端口号大于1024,则需要将 insecure 选项加入到配置文件(/etc/exports)相关选项中mount客户端才能正常工作:
查看 exports 手册中关于 secure 选项说明也发现确实如此
[root@lzgonline init.d]# man exports
secure,this option requires that requests originate on an internet port less than ipport_reserved (1024). this option is on by default. to turn it off, specify insecure.
//secure 选项要求mount客户端请求源端口小于1024(然而在使用 nat 网络地址转换时端口一般总是大于1024的),默认情况下是开启这个选项的,如果要禁止这个选项,则使用 insecure 标识
修改配置文件/etc/exports,加入 insecure 选项
/home/lzgonline/rootfs *(insecure,rw,async,no_root_squash)
保存退出
然后重启nfs服务:service nfs restart