有些时候,我们会遇到一种比较尴尬的情况,就是我有两台VPS,其中一台可能内存很小,但是硬盘却比较大,比如128M或者256M配了100G或者更大的硬盘(显然serverhub的某plan就是这样),另一台相对来说内存会正常一点,然而硬盘却不大,比如512M 20G啥的,这种情况下,我们要怎么用呢?当是选择NFS咯,NFS就是网络文件系统,简单的来说就是远程挂载存储。你可以通过NFS来实现将一台机器上的目录挂载到另一台机器上。这样就能充分得利用资源。
一.服务端配置
所谓服务端,就是存储或者说被挂载的那部分
yum install nfs-utils rpcbind -y
请注意,在这个过程中会安装python-argparse,如果你的系统是Centos6且还升级了默认Python为2.7,那么可能你需要运行如下的命令额外为Python 2.7安装argparse,系统默认yum安装的是2.6的,可能会出点问题
pip install argparse
安装在这儿就OK了,下面是配置
首先当然是选择一个用于挂载的文件夹,可以是已有的,也可以新创建,建议创建前使用df -h查看是否本机的大部分存储空间是挂载到指定目录的,这样的话我们就需要在那个目录下创建用于挂载的文件夹
#如果我们的存储盘挂在/data 上,我们可以这么来 mkdir /data/nfsdata #修改NFS的配置文件 vi /etc/exports #加入如下内容,如果有多个目录的话就是多行 /data/nfsdata/ 客户端的IP(rw,no_root_squash,no_all_squash,sync) #启动服务 service rpcbind start service nfs start #使配置生效 exportfs -r #开机启动服务 chkconfig rpcbind on chkconfig nfs on
这样我们服务端就配置好了
另外解释下/etc/exports中的部分参数
举个栗子 /data/nfsdata/ 1.2.3.4(rw,no_root_squash,no_all_squash,sync) 第一部分就不用说了,第二部分前面的为客户端的地址,后面括号内的是它的权限 地址可以是一个网段,一个IP地址或者是一个域名,支持通配符 如:*可以授权所有的IP(不安全,除非你在局域网内) *.example.com这样也是可以的 1.2.3.0/24这样授权的就是整个/24 权限说明: rw:read-write,可读写; ro:read-only,只读; sync:文件同时写入硬盘和内存; async:文件暂存于内存,而不是直接写入内存; no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。 root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份; all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限; anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定; anongid:匿名用户的GID值。
二.客户端配置
客户端同样需要安装nfs-utils和rpcbind,所以参照上面的就行
然后我们依旧是找个文件夹,你需要放在哪就放在哪,当然建议是空的,不然可能会被叠掉
我们先运行如下命令查看服务端是否正常
showmount -e 服务端IP
如果提示rpc mount export: RPC: Unable to receive; errno = No route to host,那么,我们可能需要关闭服务端的防火墙或者开放端口
mount -t nfs 192.168.0.100:/data/nfsdata /data -o proto=tcp -o nolock #这儿的proto默认是udp,为了稳定也可以选择tcp,但是这样的话要保证服务端和客户端尽量近一点,延迟和丢包不能太蛋疼
取消挂载还是用umount,至于要查看挂载目录的使用信息(命令,用户,PID之类的),可以用如下命令
fuser -m -v /path/to/nfs/mount/point/
文章评论
请问NFS可以挂载不在局域网的某个硬盘吗?比如说你的两个VPS,一个在美国,一个在日本,那么两个可以相互挂载吗?