NFS服务器搭建与autofs自动挂载


NFS服务器搭建与autofs自动挂载

一,服务器端配置

首先看NFS服务器的配置,NFS的配置还是很简单的只需修改一个文件/etc/exports。该文件的格式非常简单:

dir-to-export host-or-subnet-or-domain(options)

例如添加如下:

/etc 192.168.1.0/24(rw,sync)

这行的意思是,我想将/etc的目录共享出去,允许来自192.168.1.0/24网段的客户访问。选项为rw,sync。NFS支持很多可选参数,可以通过man exports获取详细信息。

二,保存退出,重启NFS服务

10 root@ip192-168-1-65-(Master)@16:28:31:~ => service nfs restart Shutting down NFS mountd: [ OK ] Shutting down NFS daemon: [ OK ] Shutting down NFS quotas: [ OK ] Shutting down NFS services: [ OK ] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]客户端配置

首先我们可以查看某个远程主机都共享了哪些服务:

showmount -e 192.168.1.65

结果如下:

[root@localhost ~]# showmount -e 192.168.1.65 Export list for 192.168.1.65:/etc 192.168.1.0/24

我们看到远程主机192.168.1.65/etc目录共享了出来。现在可以尝试挂载了,使用mount命令挂载:

mount-t nfs 192.168.1.65:/etc /mnt

挂载完后可以通过mount命令检查状态:

mount|grep 192.168.1.65

添加/etc/fstab:

192.168.1.65:/etc /mnt nfs defaults 0 0实现自动挂载

上边的内容基本实现了在两台Unix/Linux机器之前实现文件共享,但是我们发现每次使用时都需要手动输入mount命令挂载。可能你会说我们 已经写入/etc/fstab这样就可以每次开机自动挂载了啊。但是有时候有的资源只有在我们使用的时候我们才去挂载,那么在这种情况下我们又不想手动输 入mount命令怎么办呢?可以使用automount功能。

1,首先安装需要的软件包:

yum install autofs -y

2.首先编辑/etc/auto.master文件,该文件的格式如下:

/dir /path/to/config.file

3.例如我添加一行:

/mnt /etc/auto.mnt

表示关于/mnt目录下子目录的自动挂载配置要从/etc/auto.mnt文件读取,也就是说当你访问一个目录,如/mnt/etc时,系统会去/etc/auto.mnt文件查看有无自动挂载项相对应,如果有,则自动挂载,如果没有就回提示目录不存在。

4,接着在/etc/auto.mnt目录中添加如下行:

etc -fstype=nfs,rw,sync 192.168.1.65:/etc

这句话表示当需要访问/mnt/etc目录时,系统要自动从192.168.1.65:/etc挂载,参数为 -fstype=nfs,rw,sync。注意第一列只要写etc,而不要写/mnt/etc,这是因为/mnt这个目录已经在/etc /auto.master中配置过了。

5,现在重启autofs服务:

service autofs restart
6,接着可以测试自动挂载功能:

[root@localhost ~]# mount | grep 192.168.1.65 [root@localhost ~]# ls /mnt/etc acpi dhcp6c.conf inputrc Muttrc rc1.d skel adjtime DIR_COLORS iproute2 Muttrc.local rc2.d slrn.rc aliases DIR_COLORS.xterm isdn my.cnf rc3.d smartd.conf ....省略输出... at.deny exports ldap.conf nsswitch.conf rc.sysinit sudoers audisp fb.modes ld.so.cache ntp readahead.d sysconfig audit filesystems ld.so.conf ntp.conf reader.conf sysctl.conf [root@localhost ~]# mount | grep 192.168.1.65 192.168.1.65:/etc on /mnt/etc type nfs (rw,sync,sloppy,addr=192.168.1.65)

默认情况下,如果5分钟内没有对自动挂载的目录进行操作,autofs会自动断开挂载。这个超时时间可以在/etc/sysconfig/autofs里进行配置。

三,特殊情况:开了防火墙,如何配置iptables来让我的NFS正常工作呢?

首先我们来看看NFS的大致工作流程:
(1)客户端会向服务器端的RPC(port 111)发出NFS文件存取功能的询问请求。
(2)服务器端找到对应的已注册的NFS daemon端口后会回报给客户端。
(3)客户端了解正确的端口后,就可以直接与NFS守护进程来联机。

RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用 数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端 口,所以可以让NFS的启动更为容易。

从流程看出有以下端口需要在iptables中打开:

TCP/UDP 111 RPCTCP/UDP 2049 NFSDNFS启动时选择的动态端口

可以看出,问题就在这些动态端口,既然是动态的我们就无法在iptables的脚本中写死,因为每次都会变。解决这个问题的方法就是将那些动态选择的端口号固定下来。为了实现这个目的,我们可以编辑/etc/sysconfig/nfs,将以下行的注释取消:

RQUOTAD_PORT=875 LOCKD_TCPPORT=32803LOCKD_UDPPORT=32769MOUNTD_PORT=892

然后重启nfs服务:

service nfs restart

随后配置防火墙:

iptables -I RH-Firewall-1-INPUT -p tcp -m multiport --dports111,2049,32803,892,875-j ACCEPT
iptables -I RH-Firewall-1-INPUT -p udp -m multiport --dports111,2049,32769,892,875-j ACCEPT

现在就配置好了,你可以在防火墙环境中使用NFS了。

余生自由,以梦为马

翊尘-许

你可能感兴趣的:(Linux,编程,计算机)