首页 > 代码库 > 客户端mount挂载优化(十)

客户端mount挂载优化(十)

★客户端mount挂载优化

在企业生产环境中,NFS客户端挂载的参数有noexecnosuidnodevnoatimersizewsizenodiratime等,

 

 一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suidexec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性,例如:很多木马修改站点文件都是由上传入口上传的程序存储目录,然后执行,因此在挂载时,用下面的命令是有必要的,

   普遍安全挂载参数:

  mount-t nfs -o nosuid,noexec,nodev,rw 192.168.1.121:/data/bbs /mnt

 

挂载的读写缓存

wsizersize写和读缓存

wsizersize的最大值

NFSV2  rsize=8192 wsize=8192

NFSV3  rsize=32768 wsize=32768

NFSV4  rsize=65536 wsize=65536

现在一般centos5.8以上的系统都己经增加了读写缓存,如需修改可以加以上参数

例如:

mount -t nfs -onoexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.1.121:/data/bbs /mnt

 

mount的一些常用挂载优化参数:

wsizersize写和读缓存

async  数据不同步写到磁盘,提高性参,但降低数据安全,不推荐使用

noatimenodiratime这两个选是说在读写磁盘时,不更新文件和目录的时间戳,而更新文件时间戳对于工作数据必要性不大,增加了磁盘IO的次数,拖慢系统性参,

defaults   这个缺省值包括rw,suid,dev,exec,auto,nouser,and async  cat /etc/fstab的结果默认大部人都是缺省值

noauto   不会自动挂载文件系统

noexec   不允许安装的直接执行任何二进制文件

ro        挂载一个只读文件系统

rw       挂载一个可写的文件系统

sync      把数据同步写入硬盘

nosuid    不允许设置用户标识或设置组标识符位

nodev     不解释字符或文件块特殊设备

 intr       表示可以中断

 

 

★企业生产环境中nfs性参优化挂载例子:

mount -t nfs -o noatime,nodiratime192.168.1.121:/data/bbs /mnt

mount -t nfs -onosuid,noexec,nodev,noatime,nodiratime,intr,rsize=65536,wsize=65536192.168.1.121:/data/bbs /mnt

mount.nfs: /mnt is busy or already mounted

 

如果是本地系统:

mount -odefaults,async,noatime,data=http://www.mamicode.com/writeback,barrier=0 /dev/sdb1 /mnt

data=http://www.mamicode.com/writeback,barrier=0 是日志文件系统的优化

 

提示:本地文件系统挂载如果加nodiratime会报错,

 

★查看挂载的参数

[root@Centos64-131-client ~]#  mount |grep ‘\<nfs\>‘
sunrpc on /var/lib/nfs/rpc_pipefs typerpc_pipefs (rw)
192.168.221.130:/data/r_shared on /data/b_rtype nfs (rw,vers=4,addr=192.168.221.130,clientaddr=192.168.221.131)
192.168.221.130:/data/w_shared on /data/b_wtype nfs (rw,noexec,nosuid,nodev,vers=4,addr=192.168.221.130,clientaddr=192.168.221.131)

 

★加优化参数和不加的数据写入测试

服务端环境:

[root@64server1bbs]# cat /etc/redhat-release
CentOSrelease 6.4 (Final)
[root@64server1bbs]# uname -r
6.32-358.el6.x86_64
[root@64server1 bbs]# cat /etc/exports
/data/bbs 192.168.1.129(rw,sync)

 

客户端:

   [root@64client /]# showmount -e 192.168.1.121
Export list for192.168.1.121:
/data/bbs 192.168.1.129

使用普通挂载:

       [root@64client /]# mount -t nfs 192.168.1.121:/data/bbs /mnt
[root@64client /]# df
Filesystem          1K-blocks      Used Available Use%Mounted on
/dev/sda3            18375548   1513220  15928904  9% /
tmpfs                  118188         0    118188  0% /dev/shm
/dev/sda1              198337     28568    159529 16% /boot
192.168.1.121:/data/bbs
                      18375552   1512576 15929568   9% /mnt

 


 测试单个文件写入速度:

[root@64client /]# time dd if=/dev/zero of=/mnt/dingjianfile bs=9kcount=2000
2000+0 records in
2000+0 records out
18432000 bytes (18 MB) copied, 0.710564 s, 25.9 MB/s
real    0m0.739s
user    0m0.003s
sys     0m0.102s


 

命令详解:
time                         用于计时(real实际耗时,user用户态耗时,sys系统态耗时)
dd                           用于复制,从if读出(input file),写到of(outputfile)
if=/dev/zero            不产生IO,因此可以用来测试纯写速度;

同理of=/dev/null不产生IO,可以用来测试纯读速度;
bs                           是每次读或写的大小,即一个块的大小;

count                     是读写块的数量,相乘就是读写数据量大小,数据量(count)越大越准确,多次测试取平均值。

 

 

  测试批量创建文件的写入速度
[root@64client/]# time for ((i=1;i<10000;i++));do /bin/cp /bin/touch /mnt/dingjian$i;done
real    2m45.471s
user    0m1.872s
sys     0m49.057s

 

 

    加优化参数挂载:

 [root@64client/]# mount -t nfs -o nosuid,noatime,nodiratime,noexec,nodev,intr,rsize=65536,wsize=65536192.168.1.121:/data/bbs /mnt

 

测试单个文件写入速度:

[root@64client mnt]# time dd if=/dev/zeroof=/mnt/dingjianfile bs=9k count=2000
2000+0 records in
2000+0 records out
18432000 bytes (18 MB) copied, 0.673286 s,27.4 MB/s
real   0m0.701s
user   0m0.000s
sys    0m0.051s


试批量文件写入速度

[root@64client mnt]# time for((i=1;i<10000;i++));do /bin/cp /bin/touch /mnt/dingjian$i;done
real   3m13.371s
user   0m1.759s
sys    0m48.442s

 

★加noexec的安全性测试

测试shell执行

[root@64client mnt]# echo ‘echo`pwd`‘>test.sh
[root@64client mnt]# sh test.sh              
/mnt
[root@64client mnt]# chmod 4755/mnt/test.sh
[root@64client mnt]# ls -l
total 4
-rwsr-xr-x. 1 nfsnobody nfsnobody 11 Feb 1606:55 test.sh
[root@64client mnt]# ./test.sh
-bash: ./test.sh: Permission denied

测试php

[root@c58-nfs-server ~]#cat /mnt/test.php
<?php
 $get_value02 = “this is oldboytraining”;
  echo$get_value02 . “\n\;
?>
[root@c58-nfs-server ~]#/application/php/bin/php/mnt/test.php
this is oldboytraining
[root@64clientmnt]# cp /bin/rm /mnt
[root@64client mnt]# /mnt/rm /
-bash: /mnt/rm: Permission denied


结论:

nosuid,noexec对于shell脚本,php脚本的执行也生效

注意:通过shtest.sh以及/application/php/bin/php /mnt/test.php是可以执行的程序的。

/mnt/test.php   /mnt/test.sh即使有执行权限也无法执行

对于二进制程序,如cat  生效

通过mount –o指定挂载参数和在/etc/fstab里指定挂载参数效果是一样的,

 

★网络文件系统和本地的文件系统并行果也是一样的。

[root@64client /]# vi /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Jan  9 18:07:20 2014
#
# Accessible filesystems, by reference, aremaintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8),mount(8) and/or blkid(8) for more info
#
UUID=02835af0-7725-42ec-90a4-b4cf397823c3/                       ext4    defaults        1 1
UUID=3350ecad-ac12-4807-966b-f187a32838d6/boot                   ext4    defaults        1 2
UUID=0ee03381-3521-477c-ac99-703a1a7dbc20swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs  defaults        0 0
proc                    /proc                   proc    defaults        0 0
192.168.1.121:/data/bbs  /mnt                   nfs   defaults,nosuid,noatime,nodiratime,noexec,nodev,intr,rsize=65536,wsize=65536     0 0

 

★查看当前客户端挂载的参数:

[root@64client ~]# grep mnt /proc/mounts
192.168.1.121:/data/bbs /mnt nfs4rw,nosuid,nodev,noexec,noatime,nodiratime,vers=4,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.129,minorversion=0,local_lock=none,addr=192.168.1.1210 0

time是一个计算命令,可以计算一个命令操作时间或者文件的写入时间等

 

showmount 参数

 -e  显示NFS服务器输出的目录列表

 -d  显示NFS服务器中提供共享的目录

 -a   ip:/dir格式显示NFS服务器的IP地址和可被挂载的目录

 

exportfsNFS服务端发布共享控制命令。
-r:表示重新刷新共享。
-a:表示将配置文件/etc/exports中的所有定义共享发布出去。
-v:显示确认共享设置。
-u:表示不发布共享。


本文出自 “Mr.Xiong`s 运维日志” 博客,请务必保留此出处http://mrxiong2017.blog.51cto.com/12559394/1932602

客户端mount挂载优化(十)