NFS 网络共享文件系统

2018/05/03 Linux

简介

NFS网络文件系统(Network File System) 是由sun公司发布的分布式文件系统协议,它允许客户端上的用户像访问本地文件系统一样访问网络上的文件。

36.1、安装NFS服务

CentOS 6/7系统安装NFS服务,仅安装nfs-utils软件包即可;

yum -y install nfs-utils

36.2、常用NFS配置相关命令

exportfs:NFS服务的管理命令;
showmount:客户端的查看命令;

36.3、NFS配置文件

其配置文件为:

/etc/exports
/etc/exports.d/*

配置文件语法格式:

文件系统	客户端1(文件系统导出属性)	客户端2(文件系统导出属性)
 
# 文件系统:表示本地要共享给远程客户端访问的目录;

# 客户端定义格式:
	1.单个主机;例如:192.168.1.110;
	2.IP network:两种格式子网掩码;例如:192.168.1.0/24 或 192.168.1.0 255.255.255.0
	3.通配符方式:例如:*.enzhi.com

# 常用文件系统导出属性:
	rw:读写;这里的读写仅是nfs允许读写,最终用户能否写入还取决于目录的权限;
	ro:只读访问;
	sync:同步;
	async:异步,推荐使用异步方式;
	root_squash:压缩root用户权限;
	no_root_squash:不压缩root用户权限;
	all_squash:压缩所有用户权限;
	anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户,指定此用户的UID;
	anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户;

示例1:创建/data目录共享给本地192.168.1.0/24网络内的所有主机拥有读写权限;

[root@Bj-1-141 ~]# cat /etc/exports
/data   192.168.1.0/24(rw,all_squash)

36.4、NFS服务的启动与停止

36.4.1、CentOS6系统

启动顺序:先启动rpcbind,在启动nfs服务;

[root@bj-1-160-enzhi ~]# /etc/init.d/rpcbind start
正在启动 rpcbind:                                         [确定]
[root@bj-1-160-enzhi ~]# /etc/init.d/nfs start
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS mountd:                                          [确定]
启动 NFS 守护进程:                                        [确定]
正在启动 RPC idmapd:                                      [确定]

停止顺序:

[root@bj-1-160-enzhi ~]# /etc/init.d/nfs stop
关闭 NFS 守护进程:                                        [确定]
关闭 NFS mountd:                                          [确定]
关闭 NFS quotas:                                          [确定]
关闭 NFS 服务:                                            [确定]
Shutting down RPC idmapd:                                  [确定]
[root@bj-1-160-enzhi ~]# /etc/init.d/rpcbind stop
停止 rpcbind:                                             [确定]

36.4.2、CentOS7系统

centos7系统仅需要启动nfs.service就可以提供服务;

[root@Bj-1-141 ~]# systemctl start nfs.service
[root@Bj-1-141 ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since 四 2017-02-16 22:56:25 CST; 20s ago
  Process: 4787 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 4784 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 4782 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 4827 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 4824 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 4827 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

2月 16 22:56:25 Bj-1-141.enzhi.com systemd[1]: Starting NFS server and services...
2月 16 22:56:25 Bj-1-141.enzhi.com systemd[1]: Started NFS server and services.

36.5、exportfs命令

使用格式:

exportfs -ra:重新导出所有文件系统;
exportfs -ua:取消导出的所有文件系统;
exportfs -v:显示详细信息;

36.6、showmount命令

showmount命令通常在客户端执行;

使用格式:

showmount -e server_ip:探查指定主机所导出的nfs文件系统;

36.7、客户端挂载及开机自动挂载

挂在命令格式:

mount -t nfs NFS服务器IP:共享目录	本地挂载点目录

示例:挂载192.168.1.141:/data目录至本地/data/site/bbs目录上;

[root@bj-1-160-enzhi ~]# mount -t nfs 192.168.1.141:/web/html /data/site/bbs

配置客户端自动挂载

配置在/etc/fstab表中自动挂载时最好在选项中加上”_netdev”参数,这样客户端开机挂载时如果server端没有提供nfs服务客户端则不会在挂载;

192.168.1.141:/data		/web/html		nfs		defaults,_netdev	0 0

36.8、配置实战

要求:

1.通过nfs server导出/web/html,客户端以此目录为其httpd服务的某虚拟主机的根文档目录;并部署discuz做测试;

2、nfs server导出/mydata/data目录,客户端以此目录为其mariadb服务的数据目录,要求mariadb server要能启动成功,并能管理数据;

演示环境:

角色 IP地址 OS版本
NFS-server 192.168.1.141 CentOS 7.2.1511
NFS-client 192.168.1.160 CentOS release 6.8

36.7.1、配置nfs server

1、创建/web/html目录

[root@Bj-1-141 ~]# mkdir -pv /web/html
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/html"

2、配置导出/web/html目录作为共享目录,并配置压缩所有用户权限为nobody用户的权限,其UID为99;

/web/html   192.168.1.0/24(rw,no_root_squash,anonuid=99,anongid=99)

3、重新导出所有文件系统

[root@Bj-1-141 ~]# exportfs -ra

4、配置/web/html目录的文件系统权限;

[root@Bj-1-141 ~]# setfacl -m u:nobody:rwx /web/html/
您在 /var/spool/mail/root 中有新邮件
[root@Bj-1-141 ~]# getfacl /web/html/
getfacl: Removing leading '/' from absolute path names
# file: web/html/
# owner: root
# group: root
user::rwx
user:nobody:rwx
group::r-x
mask::rwx
other::r-x

36.7.2、配置客户端

1、安装LAMP环境

[root@bj-1-160-enzhi ~]# yum -y install httpd php php-mysql mysql-server

# 启动mysql和httpd服务
[root@bj-1-160-enzhi ~]# service httpd start
[root@bj-1-160-enzhi ~]# service mysqld start

2、配置httpd进程用户为nobody

[root@bj-1-160-enzhi ~]# vim /etc/httpd/conf/httpd.conf
User nobody
Group nobody

3、配置虚拟主机bbs.enzhi.com

[root@bj-1-160-enzhi ~]# cd /etc/httpd/conf.d/
[root@bj-1-160-enzhi conf.d]# vim vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
    ServerName bbs.enzhi.com
    DocumentRoot "/data/site/bbs"
	DirectoryIndex index.php index.html index.html.var
    <Directory "/data/site/bbs">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

4、创建站点根文件目录

[root@bj-1-160-enzhi conf.d]# mkdir -pv /data/site/bbs
mkdir: 已创建目录 "/data/site/bbs"

5、挂在nfs server端/web/html目录到本地/data/site/bbs目录

[root@bj-1-160-enzhi ~]# mount -t nfs 192.168.1.141:/web/html /data/site/bbs
[root@bj-1-160-enzhi ~]# mount |grep 192.168.1.141
192.168.1.141:/web/html on /data/site/bbs type nfs (rw,vers=4,addr=192.168.1.141,clientaddr=192.168.1.160)

6、启动httpd服务

[root@bj-1-160-enzhi ~]# httpd -t
Syntax OK
[root@bj-1-160-enzhi ~]# service httpd start

7、部署discuz论坛程序

[root@bj-1-160-enzhi ~]# cd /data/site/bbs/
[root@bj-1-160-enzhi bbs]# unzip Discuz_X3.3_SC_GBK.zip
[root@bj-1-160-enzhi bbs]# mv upload/  discuz
[root@bj-1-160-enzhi bbs]# chown -R nobody discuz/

8、创建bbs数据库

mysql> create database bbs default character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on bbs.* to 'bbs'@'localhost' identified by 'bbspass';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

9、浏览器安装discuz

访问:http://bbs.enzhi.com/discuz/install完成安装

discuz01

discuz02

discuz03

discuz04

Search

    Table of Contents