天天看点

NFS

一. 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

NFS

继续阅读