参考:https://blog.csdn.net/kevinhg/article/details/5967432
Linux NFS服务器的安装与配置:https://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html
1. NFS服务器的设定
NFS服务器的设定可以通过/etc/exports这个文件进行,设定格式如下:
分享目录 | 主机名称或者IP(参数1,参数2)----------------------------------------------------------------------------------------- |
---|---|
/arm2410s | 所有用户访问:*(rw,sync,no_root_squash) 特定用户访问:172.25.254.0/24(sync) 172.25.254.226(sync,rw) (允许所有172.25.254网段的用户访问目录,允许172.25.254.226主机进行读写操作。) |
可以设定的参数主要有以下这些:
参数 | 说明--------------------------------------------------------------------------- |
---|---|
rw | 可读写的权限 |
ro | 只读的权限 |
no_root_squash | 登入到NFS主机的用户如果是root,该用户即拥有root权限 |
root_squash | 登入NFS主机的用户如果是root,该用户权限将被限定为匿名使用者nobody |
all_squash | 不管登陆NFS主机的用户是何权限都会被重新设定为匿名使用者nobody |
anonuid | 将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。 |
anongid | 同anonuid,但是变成group ID就是了! |
sync | 资料同步写入存储器中。 |
async | 资料会先暂时存放在内存中,不会直接写入硬盘。 |
insecure | 允许从这台机器过来的非授权访问。 |
例如可以编辑/etc/exports为:
/tmp *(rw,no_root_squash)
/home/public 192.168.0.*(rw) *(ro)
/home/test 192.168.0.100(rw)
/home/linux *.the9.com(rw,all_squash,anonuid=40,anongid=40)
设定好后可以使用以下命令启动NFS:
systemctl start portmap (在REDHAT中PORTMAP是默认启动的)
systemctl start nfs
如果提示Failed to start portmap.service: Unit not found.
,则需要手动安装如下服务:
yum install -y nfs-utils rpcbind
systemctl restart rpcbind.service
systemctl restart nfs.service
systemctl enable rpcbind.service
systemctl enable nfs.service
exportfs命令
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv]
- -a :全部mount或者unmount /etc/exports中的内容
- -r :重新mount /etc/exports中分享出来的目录
- -u :umount 目录
- -v :在 export 的时候,将详细的信息输出到屏幕上。
具体例子:
[root @test root]# exportfs -rv (全部重新export一次!)
exporting 192.168.0.100:/home/test
exporting 192.168.0.*:/home/public
exporting *.the9.com:/home/linux
exporting *:/home/public
exporting *:/tmp
reexporting 192.168.0.100:/home/test to kernel
具体例子:
[root @test root]#exportfs -au (全部都卸载了)
[root @test root]# vi /etc/exports
/home/soft 192.168.2.11(rw)
[root@localhost init.d]# nfs start
-bash: nfs: command not found
[root@localhost init.d]# ./nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ]
2. 启动nfs服务
~]# systemctl start nfs
~]# systemctl enable nfs
~]# systemctl start rpcbind
~]# systemctl enable rpcbind
3. 服务端防火墙的配置
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
4. NFS客户端的操作
4.1. showmount的用法
showmout
- -a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
- -e :显示指定的NFS SERVER上export出来的目录。
例如:
showmount -e 192.168.0.30
Export list for localhost:
/tmp *
/home/linux *.linux.org
/home/public (everyone)
/home/test 192.168.0.100
4.2. mount nfs目录
mount -t nfs hostname(orIP):/directory /mount/point
具体例子:
Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
~]# showmount -e 192.168.0.169
Export list for 192.168.0.169:
/home/opt/RHEL4U5 192.168.0.0/255.255.252.0
You have new mail in /var/spool/mail/root
mount -t nfs 192.168.0.169:/home/opt/RHEL4U5 /mnt/soft
4.3. 将NFS路径加入到/etc/fstab
中
vim /etc/fstab
# 增加如下内容
192.168.0.169:/home/opt/RHEL4U5 /mnt/soft nfs defaults 0 0
5. 测试NFS性能
5.1. 写入速度
写入一个10GB大小的文件
~]# time dd if=/dev/zero of=/OraRemoteBak/test/10g bs=8k count=1024000
1024000+0 records in
1024000+0 records out
8388608000 bytes (8.4 GB) copied, 709.468 s, 11.8 MB/s <------- # NFS的写入速度,备份1T的数据至少需要:24小时
real 11m49.523s
user 0m0.107s
sys 0m4.418s
~]# time dd if=/dev/zero of=/OraBak/10g bs=8k count=1024000
1024000+0 records in
1024000+0 records out
8388608000 bytes (8.4 GB) copied, 3.18091 s, 2.6 GB/s <------- # 本地磁盘写入速度,备份1T的数据需要:7分钟
real 0m3.182s
user 0m0.117s
sys 0m3.065s
5.2. 读出速度
~]# time dd if=/OraRemoteBak/test/10g of=/dev/null bs=16k
512000+0 records in
512000+0 records out
8388608000 bytes (8.4 GB) copied, 71.9507 s, 117 MB/s <------- # NFS读出速度,读取1T的数据至少需要:2.5个小时
real 1m11.953s
user 0m0.066s
sys 0m3.052s
~]# time dd if=/OraBak/10g of=/dev/null bs=8k
1024000+0 records in
1024000+0 records out
8388608000 bytes (8.4 GB) copied, 1.66043 s, 5.1 GB/s <------- # 本地磁盘读出速度,读取1T的数据需要:4分钟
real 0m1.662s
user 0m0.081s
sys 0m1.580s
5.3. 其他
使用dd命令进行读取数据时第一次是从磁盘上读取的,第二次执行相同的读命令时,它会从内存缓存中读取的,使用下面的命令可清除内存缓存,生产环境不要去执行。
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"