1. 环境说明

本文中的服务器环境如下:


Role

Hostname

OS

NFS 服务端

​centos-2​

CentOS 7.5

NFS 客户端

​abelsu7-ubuntu​

Ubuntu 18.04


注:为简略起见,以下命令均以​​root​​身份运行,省略​​sudo​

2. NFS 服务端

2.1 安装 nfs-utils

注:对应的 Apt 包为​​nfs-kernel-server​​和​​nfs-common​



> yum info nfs-utils

Available Packages
Name : nfs-utils
Arch : x86_64
Epoch : 1
Version : 1.3.0
Release : 0.65.el7
Size : 412 k
Repo : base/7/x86_64
Summary : NFS utilities and supporting clients and daemons for the kernel NFS server
URL : http://sourceforge.net/projects/nfs
License : MIT and GPLv2 and GPLv2+ and BSD
Description : The nfs-utils package provides a daemon for the kernel NFS server and
: related tools, which provides a much higher level of performance than the
: traditional Linux NFS server used by most users.
:
: This package also contains the showmount program. Showmount queries the
: mount daemon on a remote host for information about the NFS (Network File
: System) server on the remote host. For example, showmount can display the
: clients which are mounted on that host.
:
: This package also contains the mount.nfs and umount.nfs program.

> yum install nfs-utils
# rpcbind 作为依赖会自动安装



Bash


Copy


2.2 配置并启动服务

允许​​rpcbind.service​​、​​nfs.service​​开机自启:



# 允许服务开机自启
> systemctl enable rpcbind
> systemctl enable nfs



Bash


Copy


启动相关服务:



# 启动相关服务
> systemctl start rpcbind
> systemctl start nfs



Bash


Copy


防火墙允许服务通过:



# 防火墙允许服务通过
> firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs}
success

> firewall-cmd --reload
success



Bash


Copy


2.3 配置共享目录

例如需要共享的目录为​​/mnt/kvm/​​:



# 创建 /mnt/kvm 并修改权限
> cd /mnt
/mnt > mkdir kvm
/mnt > chmod 755 kvm

# 验证目录权限
/mnt > ls -l
total 0
drwxr-xr-x 2 root root 59 Oct 17 17:49 kvm



Bash


Copy


之后修改​​/etc/exports​​,将​​/mnt/kvm/​​添加进去:



> cat /etc/exports

# 1. 只允许 abelsu7-ubuntu 访问
/mnt/kvm/ abelsu7-ubuntu(rw,sync,no_root_squash,no_all_squash)

# 2. 根据 IP 地址范围限制访问
/mnt/kvm/ 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash)

# 3. 使用 * 表示访问不加限制
/mnt/kvm/ *(rw,sync,no_root_squash,no_all_squash)



Bash


Copy


关于​​/etc/exports​​中的参数含义:

  • ​/mnt/kvm/​​:需要共享的目录
  • ​192.168.0.0/24​​:客户端 IP 范围,​​*​​表示无限制
  • ​rw​​:权限设置,可读可写
  • ​sync​​:同步共享目录
  • ​no_root_squash​​:可以使用​​root​​授权
  • ​no_all_squash​​:可以使用普通用户授权

保存之后,重启​​nfs​​服务:



> systemctl restart nfs



Bash


Copy


2.4 查看共享目录列表

在​​centos-2​​本地查看:



> showmount -e localhost
Export list for localhost:
/mnt/kvm abelsu7-ubuntu



Bash


Copy


3. NFS 客户端

3.1 安装 nfs-utils



# CentOS/Fedora, etc.
> yum install nfs-utils

# Ubuntu/Debian, etc.
> apt install nfs-common



Bash


Copy


3.2 配置并启动服务

设置​​rpcbind​​服务开机启动:



> systemctl enable rpcbind



Bash


Copy


启动​​rpcbind​​:



> systemctl start rpcbind



Bash


Copy


客户端不需要打开防火墙,也不需要开启 NFS 服务

3.3 挂载共享目录

先查看服务端的共享目录:



> showmount -e centos-2
Export list for centos-2:
/mnt/kvm abelsu7-ubuntu



Bash


Copy


在客户端创建并挂载对应目录:



> mkdir -p /mnt/kvm
> mount -t nfs centos-2:/mnt/kvm /mnt/kvm



Bash


Copy


最后检查一下是否挂载成功:



> df -hT /mnt/kvm
Filesystem Type Size Used Avail Use% Mounted on
centos-2:/mnt/kvm nfs4 500G 119G 382G 24% /mnt/kvm

> mount | grep /mnt/kvm
centos-2:/mnt/kvm on /mnt/kvm type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=222.xxx.xxx.xxx,local_lock=none,addr=116.xxx.xxx.xxx)



Bash


Copy


3.4 配置自动挂载

在客户端编辑​​/etc/fstab​​:



# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>

# / was on /dev/sda8 during installation
UUID=26d36e85-367a-4200-87fb-0505c5837078 / ext4 errors=remount-ro 0 1

# /boot/efi was on /dev/sda1 during installation
UUID=000E-274F /boot/efi vfat umask=0077 0 1

# swap was on /dev/sda9 during installation
# UUID=ee4da9a3-0288-4f8e-a86e-ab8ac3faa6bc none swap sw 0 0

# For nfs
centos-2:/mnt/kvm /mnt/kvm nfs defaults 0 0



Bash


Copy


最后重新加载​​systemctl​​,即可实现重启后自动挂载:



> systemctl daemon-reload

> mount | grep /mnt/kvm
centos-2:/mnt/kvm on /mnt/kvm type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=222.xxx.xxx.xxx,local_lock=none,addr=116.xxx.xxx.xxx)



Bash


Copy


4. NFS 读写速度测试

待更新…



> time dd if=/dev/zero of=/mnt/kvm-lun/test-nfs-speed bs=8k count=1024
> time dd if=/mnt/kvm-lun/test-nfs-speed of=/dev/null bs=8k count=1024