Menu Close

NFS服务器设置及客户端mount挂载

参考: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"