2020-03-05 NFS客户端挂载深入讲解

1. NFS客户端挂载命令

客户端挂载的命令格式

2. NFS客户端挂载命令参数说明

在NFS服务器端可以通过cat /var/lib/nfs/etab查看NFS服务器端配置参数的细节。在NFS客户端可以通过cat /proc/mounts查看mount的挂载参数细节。

2.1 mount挂载参数说明

通过如下命令在NFS客户端测试挂载获取的默认挂载参数:

[root@web01 ~]# grep mnt /proc/mounts 
192.168.9.6:/data /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.9.7,local_lock=none,addr=192.168.9.6 0 0

以下是NFS Client mount挂载参数说明。

NFS Client mount挂载参数1
NFS Client mount挂载参数2
NFS Client mount挂载参数3
NFS Client mount挂载参数4

以下是mount -o参数对应的选项列表。

mount -o参数对应的选项

2.2 man mount后的-o参数说明

下面是mount命令的-o选项后面可以接的参数,注意有些选项只有出现在/etc/fstab里才有效,下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2、ext3、fat、vfat和ufs等文件系统。

  • async:涉及文件系统I/O的操作都是异步处理,即不会同步写入磁盘,此参数会提高性能,但会降低数据安全性。一般情况下,生产环境不推荐使用。除非是在对性能要求很高,对数据可靠性不要求的场合。*
  • sync:该参数和async相反。有I/O操作时都会同步处理I/O,即把数据同步写入硬盘。此参数会牺牲一点I/O性能,但是,换来的是断电后数据的安全性。
  • atime:在每一次数据访问时,会同步更新访问文件的inode时间戳,是默认选项。
  • ro:以只读的方式挂载一个文件系统。
  • rw:以可写的方式挂载一个文件系统。*
  • auto:能够被自动挂载通过-a选项。
  • noauto:不会自动挂载文件系统。
  • defaults:这是fstab第4列挂载参数的默认值,包括rw、suid、dev、exec、auto、nouser、async,默认情况下大部分参数都是默认值。
  • exec:允许文件系统执行二进制文件,取消这个参数,可以提升系统安全性。
  • noexec:在挂载的文件系统中不允许直接执行任何二进制的程序,注意,仅对二进制程序有效,即时设置了noexec、shell,php程序还是可以执行的。*
  • noatime:访问文件时不更新文件的inode时间戳,高并发环境下推荐显式应用该选项,可以提高系统I/O性能。*
  • nodiratime:不更新文件系统上的directory inode时间戳,高并发环境下推荐显式应用该选项,可以提高系统I/O性能。*
  • nosuid:不允许特殊权限suid和sgid位生效,以提升安全性。*
  • suid:允许suid和sgid位生效。
  • nouser:禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项。
  • remount:尝试重新挂载一个已经挂载了的文件系统,通常被用来改变一个文件系统的挂载标志,使得一个只读文件系统变得可写,这个动作不会改变设备或者挂载点。当系统故障进入single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,此时该命令就派上用场了。具体命令为:mount -o remount,rw /,表示将根文件系统重新挂载使其可写。single或rescue模式修复系统时这个命令十分重要。*
  • dirsync:目录更新时间同步写入磁盘。

其中,标有*的为性能优化重要选项,一般情况下,安全参数和性能参数是对立的,即越安全,性能越差。

3. NFS客户端挂载优化

在企业生产环境中,NFS客户端挂载有没有必须加的参数,比如,加noexec、nosuid、nodev、bg、soft、rsize、wsize等参数,有的书上说建议加,rsize、wsize这两个是缓存参数,是否也建议加呢?
这个问题属于mount挂载优化问题(有些参数也适合其他文件系统),一般来说要适当加挂载参数,但是,最好先做好测试,用数据来说话,才能更好地确定倒地是挂载还是不挂载。

3.1 有关系统安全挂载参数选项

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

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

通过mount -o指定挂载参数和在/etc/fstab里指定挂载参数的效果是一样的。
网络文件系统和本地的文件系统效果也是一样的。

3.2 挂载性能优化参数选项

下面介绍几个在企业生产环境下NFS性能优化挂载的例子。
1)禁止更新目录及文件时间戳挂载,命令如下:

mount -t nfs -o noatime,nodiratime 192.168.9.6:/data /mnt

2)安全加优化的挂载方式如下:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.9.6:/data /mnt

3)默认的挂载方式如下:

mount -t nfs 192.168.9.6:/data /mnt

如果是本地文件系统,使用如下命令优化挂载:

image.png

根据前面的测试我们知道,默认情况下,NFS Server共享目录的参数默认配置为wsize和rsize,它们设定了NFS Server和NFS Client之间往来数据块的大小。
wsize和rsize的大小最好是1024的倍数,对于NFSv2来说,8192是rsize和wsize的最大倍数,如果使用的是NFSv3,则可以尝试设置32768,如果是NFSv4可以设置到65536或更大。
如果在客户端挂载时使用了这两个参数,可以让客户端在读取和写入数据时一次性读写更多的数据包,这样可以提升访问性能和效率。
除此之外,还有noatime、nodiratime性能优化选项,这两个选项是说在读写磁盘的时候,不更新文件和目录的时间戳(不更新文件系统中文件对应inode信息),这样就可以减少和磁盘系统的交互,提升读取和写入磁盘的效率,因为磁盘是机械的,每次读写都会消耗磁盘I/O,而更新文件时间戳对于工作数据必要性不大,最大的问题是增加了访问磁盘I/O的次数,以致拖慢系统性能。

以下是NFS网络文件系统优化挂载的参数建议。
在CentOS7服务器端和客户端环境下,可使用如下命令参数:

mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 192.168.9.6:/data /mnt

经过实际测试,CentOS7默认的挂载参数性能还是不错的。

mount -t nfs 192.168.9.6:/data /mnt

注意:非性能的参数越多,速度可能会越慢。根据具体的业务需要以及实际测试效果选择挂载参数。

3.3 NFS内核优化建议

  • /proc/sys/net/core/rmem_default:该文件指定了接收套接字缓冲区大小的默认值(以字节为单位),默认设置:124928。
  • /proc/sys/net/core/rmem_max:该文件指定了接收套接字缓冲区大小的最大值(以字节为单位),默认设置:124928。
  • /proc/sys/net/core/wmem_max:该文件指定了发送套接字缓冲区大小的最大值(以字节为单位),默认设置:124928。

上述文件对应的具体内核优化命令如下:

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p

3.4 企业生产场景下NFS共享存储优化小结

1)硬件:SAS/SSD硬盘,购买多个,硬件RAID,制作RAID5或RAID10.网卡吞吐量要大,至少千兆(多块Bond)。
2)NFS服务器端指定特定UID/GID配置:

/data 192.168.9.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

3)NFS客户端挂载优化配置命令如下:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 192.168.9.6:/data/ /mnt

4)对NFS服务的所有服务器内核进行优化时,执行如下命令:

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

执行sysctl -p生效。
5)如果卸载的时候提示“umount:/mnt:device is busy”,需要退出挂载目录再进行卸载,如果是NFS Server宕机了,则需要强制卸载,可执行umount -lf /mnt。
6)大型网站NFS网络文件系统的替代软件为分布式文件系统MooseFS、GlusterFS、FastDFS等。
7)阿里云对应的存储服务NAS服务、还有OSS对象存储。

4. NFS客户端自启动挂载

配置客户端mount挂载命令使挂载开机自动执行,这里有如下两种方法:
第一种方法,将挂载命令放在/etc/rc.local里。
把挂载的命令放入/etc/rc.local中,以实现开机自动挂载。命令如下:

[root@web01 ~]# chmod +x /etc/rc.local
[root@web01 ~]# echo "#mount by oldboy" >> /etc/rc.local
[root@web01 ~]# echo "/bin/mount -t nfs 192.168.9.6:/data /mnt" >> /etc/rc.local
[root@web01 ~]# tail -2 /etc/rc.local
#mount by oldboy
/bin/mount -t nfs 192.168.9.6:/data /mnt

缺点:可能偶尔开机挂载不上,工作中除了开机自启动配置,还要对是否挂载进行监控。
第二种方法,将挂载命令放在/etc/fstab里。
其实这个配置有一个误区,如下图所示,理论上开机启动过程中,fstab会优先于网络被Linux系统加载。网络没启动时执行fstab会导致连不上NFS服务器端,无法实现开机挂载。而且,即使是本地的文件系统,也要注意fstab中最后两列要设置00。否则有可能导致无法启动服务器的问题。
因此,NFS网络文件系统最好不要放到fstab里实现开机挂载。

开机启动时fstab优先网卡启动图

但是,如果在开机自启动服务里设置并启动了NetFS服务(CentOS6),放入fstab里也是可以开机挂载的,如下图所示。

开机启动网卡启动后NFS被挂载图

CentOS7环境下要实现NFS在fstab里实现开机自动化挂载,需要启动一个服务为remote-fs.target,前面的系统优化把该服务优化掉了,需要重新启动起来,下面是NFS在fstab里实现开机自动化挂载配置。

[root@web01 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sun Feb 16 13:54:19 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=b96ce81a-662b-490c-a8db-f807893a32ca /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
192.168.9.6:/data   /data           nfs defaults,soft   0 0
#192.168.9.6:/data       /data                   nfs     defaults,intr   0 0
[root@web01 ~]# systemctl start remote-fs.target
[root@web01 ~]# systemctl enable remote-fs.target
Created symlink from /etc/systemd/system/multi-user.target.wants/remote-fs.target to /usr/lib/systemd/system/remote-fs.target.

经过以上操作后,开机即可实现自动挂载。

5. NFS服务端宕机后给NFS客户端带来的问题

多台客户机挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其是NFS服务器端出问题后,所有NFS客户端都处于挂掉的状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)。
NFS服务器宕机后,在客户端访问挂载点会处于挂掉状态,甚至早期系统执行Ctrl+C都无法退出,CentOS7客户端还可能无法重启,这个问题的解决方法有以下几种:
1)在cat /proc/mounts找到挂载点,然后执行umount -lf /data方式卸载即可。
2)在mount挂载时增加soft或者intr,不让客户端持续呼叫NFS服务器。
3)如果是fstab里实现的挂载即可在第4列defaults后面增加soft或者intr。

[root@web01 ~]# tail -2 /etc/fstab 
192.168.9.6:/data   /data           nfs defaults,soft   0 0
#192.168.9.6:/data       /data                   nfs     defaults,intr   0 0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容