文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 测试

NFS是1984年SUN公司开发的一套网络文件系统。它能够让用户像在本机一样操作远程文件。本文用一个比较简单的方式来搭建NFS试验环境。

准备工作

我们需要先安装virtualBoxvagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test,运行以下命令:

virtual box host
1
2
3
4
mkdir test
cd test
vagrant init ubuntu/trusty64
vi Vagrantfile

里面应该有一句config.vm.box = "ubuntu/trusty64",在它的下面添加如下几行代码,相当于给它分配两台虚拟机,一台叫做server,它的IP是192.168.33.17;另外一台叫做client,它的IP是192.168.33.18。我们将会在server上启动nfs服务并共享一个目录,然后在client挂载并操作这个目录。

Vagrantfile
1
2
3
4
5
6
7
8
9
config.vm.define "server" do | host |
host.vm.hostname = "server"
host.vm.network "private_network", ip: "192.168.33.17"
end
config.vm.define "client" do | host |
host.vm.hostname = "client"
host.vm.network "private_network", ip: "192.168.33.18"
end

分别在两个终端运行以下命令启动并连接两台虚拟机。

virtual box host terminal 1
1
2
vagrant up
vagrant ssh server

virtual box host terminal 2
1
vagrant ssh client

搭建环境

启动nfs服务需要nfs-kernel-server这个包,让我们安装并启动:

server
1
2
3
sudo apt-get update
sudo apt-get install -y nfs-kernel-server
sudo service nfs-kernel-server start

服务启动完成后,会生成一个/etc/exports文件,里面就是nfs的配置。我们创建一个文件夹/tmp/nfs,把它配置成nfs的目录,然后重新启动nfs服务:

server
1
2
3
mkdir /tmp/nfs
sudo sh -c "echo '/tmp/nfs *(rw,no_subtree_check,no_root_squash)' >> /etc/exports"
sudo service nfs-kernel-server start

/etc/exports里写的那一行里,*代表允许所有的客户端访问。如果只想让192.168.33.18访问,把星号改为这个IP就好了。需要支持多个IP的话,用逗号分隔就行。括号里的rw表示允许读写。no_subtree_check表示在服务器端不检查此nfs文件夹的父目录权限。no_root_squash表示客户端root用户也被视为对此nfs文件夹有全部权限的服务端root用户,生产环境不建议使用,因为那样nfs上的文件就可能被随意篡改。想要了解更多的设置,请自行man exports

测试

这时候我们就可以去client挂载server的这个nfs目录了:

client
1
2
sudo mount -t nfs 192.168.33.17:/tmp/nfs /mnt
ls /mnt

往里面写一个文件:

client
1
2
echo "Hello World!" > /mnt/hw.txt
ll /mnt

然后去server端看一下,是不是已经被同步过来了:

server
1
ll /tmp/nfs

Server端也可以往nfs的文件夹里写文件:

server
1
echo "Hello NFS" > /tmp/nfs/hn.txt

照样可以同步到client端:

client
1
ll /mnt

无论server端还是client端,都可以通过下面这个命令来查看192.168.33.17上公开了哪些nfs文件夹:

server or client
1
showmount -e 192.168.33.17

再来一个nfs2文件夹:

server
1
2
mkdir /tmp/nfs2
sudo sh -c "echo '/tmp/nfs2 *(rw,no_subtree_check,no_root_squash)' >> /etc/exports"

这时候再showmount -e 192.168.33.17看一下,/tmp/nfs2并没有出现在列表中。因为nfs并不会去监视/etc/exports这个文件,所以这时候它还不知道我们改变了配置。虽然重新启动nfs服务可以解决这个问题,但是它会中断现存的nfs服务。建议使用以下命令:

server
1
sudo exportfs -ar # a代表所有的文件夹,r代表重新导出

这时候在再showmount -e 192.168.33.17看一下,/tmp/nfs2已经出来啦。加载一下:

client
1
2
3
sudo umount /mnt
sudo mount -t nfs 192.168.33.17:/tmp/nfs2 /mnt
ls /mnt

完全没问题。

文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 测试