欢迎各位的光临,鄙人以好酒好菜招待~~!!^_^
深入理解Linux网络文件系统
作者:马路遥 来自:linuxmine
xQX]1]c0
.o$K;x;e |)f0 网络文件服务器(Network File System,简称 NFS)是 Linux 上最容易配置的服务之一。尽管它的规则简单,却有着丰富的内涵。本刊今年第 2 期曾经介绍了如何构建 Linux 上的NFS服务器。但 NFS 还有许多 Unix/ Linux 爱好者,甚至系统管理员应该注意的特别之处。本文旨在帮助读者更深入地了解 NFS。Linux宝库(X-dzw)a7f_
Z/] bT Do)Ih|SJ0 NFS Server 的配置
/]D}UC0
'V2Kaf4R$K]0 首先介绍一下 Server 端和 NFS 相关文件的含义:
5k`+B'lbHpr0 Linux宝库JwD;LW&[
◆ /etc/exports 是 NFS Server 最基本的配置文件之一,文件中列出了共享的文件系统和允许访问这些文件系统的主机。这个文件可以用通配符或网段,以及一组主机名的形式来表示客户机列表。它有很大的灵活性,一般由系统管理员配置。Linux宝库)BG6\4X|P`V
5f}8cwr$Ex'x:t&Q0 ◆ /proc/fs/nfs/exports 导出文件列表的内核视图,包括导出的参数。Linux宝库|QEJgvO
Fii*rEUQ0 ◆ /var/lib/nfs/etab 状态文件,其中列出了当前的高级列表。此文件包含了 /etc/exports 中相同格式的所有项目,同时包含了由 exportfs -i 手工导入的项目。
Y1GV e8DCPf0
4l"vB"w9X J0 ◆ /var/lib/nfs/rmtab 状态文件,列出了挂接导出文件的远程客户机清单。Linux宝库P{@nV%Q.q
Linux宝库)M&a;i)b&_8~y+y:V-S
◆ var/lib/nfs/xtab 状态文件,当前的低级导出清单。
6NJ$AL7n ^1UNL8k0
U9|9t s%P"? w0 例如,/etc/exports 有下列一行 /data *.flying.com.cn (rw),显然有多个主机可以匹配这个域。如果两个主机,如 mail.flying.com.cn 和 ftp.flying.com.cn 都请求访问该文件系统,则 /var/lib/nfs/xtab 文件包含了这个文件系统的两个基本相同的项目。Linux宝库 k4Q-d'`(G(n b;hp{
Linux宝库3d/`W&P"i0^U2iW
/etc/exports 是纯文本文件,空行和以 “#” 开头的行会被忽略,长行可以用斜杠 “/” 分解为多行。文件中列出了允许 NFS 客户机访问服务器的文件系统,定义了导出文件系统和访问权限。
W0d3| Q%s+}{0cb8\C^F0
*^&VK4U&^8r0 /etc/exports 文件中任意行的格式如下:Linux宝库c[:H_ jeRw
W\Eq*QE\U)An'w5]0 vol_name host_name1(option1,opeion2....) host_name2(option1,option2)Linux宝库a8]!j.g @I ?
U!~M p&Vp0
D5nKIXmG?0
h-k;[X)wnuh`o)G_t0
&L%S6H2dcmFB1]0 其中 vol_name(卷名)表示要导出的文件系统,除去卷名以外,其它参数都可以不写,不显示指出的参数都会采用缺省参数。host_name1 ( 主机名 ) 如果不写的话,则任何主机都可以请求该文件系统。主机名的定义非常灵活,既可以指定某台主机,也可以指定一组主机。可以用下列四种方法来描述:
2D&kyO"\^0
M"F.X-yl0 ◆ 单个主机 可以用短名及完全限定名,或者用IP地址,例如 student01、student01.flying.com.cn 或者 192.168.10.1 都是合法的主机名。
z L0ykNZy-p0 Linux宝库\Xy@ FZ ?(iGP5H yQ
◆ 网组 可以列出 /etc/netgroup 文件中或 NFS 网组映射中定义的整组主机。网组名以 “@” 开头,例如 @teacher 或 @students。Linux宝库y's)mjJiP
Linux宝库8`^nz%d^'pfz
◆ 通配符主机 用通配符可以列出一个域中的所有主机器,通配符可以使用 “*” 和 “?”、“*” 匹配 0 个或多个字符及 “?” 匹配一个字符,但通配符不能匹配主机名中的点号。*.flying.com.cn 可以匹配 ftp01.flying.com.cn,但不能匹配 backup.ftp01.flying.com.cn,而 *.*.flying.com.cn 就可以匹配 backup.ftp01.flying.com.cn。 ftp??.flying.com.cn可以匹配 ftp01.flying.com.cn 和 ftp02.flying.com.cn。Linux宝库+R(iCEb(f
Linux宝库5L0_L{%cc|1r+tx
◆ 主机网络 可以用主机网络的方式导出特定的子网或几个子网,用 192.168.10.0/255.255.255.0 的方式可以匹配从 192.168.10.1 到 192.168.10.255 所有主机。导出选项用逗号分隔,但不能包含空格,长度可以任意设定。多数选项都是布尔选项,值为 True 或 False,选项与性能或者安全性有关。当 /etc/exports 文件没有给出值时,系统会自动采用缺省值。选项的详细用法可以用 man exportfs 命令来获得。Linux宝库h s3k R4Z#`;p"q9IR
4a!w%j z:Z m0 更改 /etc/exports 文件后,可以用 exportfs 命令将文件的改变告诉服务器,也可以忽略 /etc/exports 文件,直接使用 exportfs 命令导出共享卷。exportfs 可以指定导出或非导出卷时影响的选项,可以影响一个卷或几个卷的选项,见表1。
\hFf hz"A0
H3zV[ BfO$d0 NFS 锁及远程配额监控程序Linux宝库 dmrK*z F1RL
,`{h9mBs0 在 Unix 中可以锁定文件,保证不会有两个用户同时写入文件的同一部分,以确保数据的一致。保证一致性的关键是内核要仲裁锁定和写入请求。
&Wf.r*l.J+gO R3rM_0 Linux宝库2|F8R M?4c:{N
而在 NFS/Samba 之类的分布式文件系统中,许多客户可能同时要求写入和锁定同一文件。此时,只有服务器本身能扮演仲裁的角色。Unix/ Linux 的方法是增加一个 RPC 协议处理锁操作,这就是 NFS 锁监控程序 (NLM, NFS Lock Manager)。通常不需要关心它的具体运行方式,将此服务打开即可。
A4H$Emc5l(p0
)@*MI ioH(v4H0 rpc.rquotad 监控程序实现 RQUOTA 协议,在 Linux 中 NFS 服务器总是执行配额,不管是否运行了 rpc.rquotad。
.c bG L!mA*cU:W#N0
cN.b7]M x4be7Q0 启动和关闭 NFS Server 的顺序
_{2S7p!U0 Linux宝库:QsxnN
1. 启动 NFS ServerLinux宝库?8ktphcG J
Linux宝库8V'}2I1AaWp
/etc/rc.d/init.d/portmap start /etc/rc.d/init.d/nfslock start /etc/rc.d/init.d/nfs start
9i2ko!P5t cY+Uh1pe0
]-Nk E]0
.F*i#q4Zj;D&]:`0 Linux宝库-K*A*Jp-H"d[
其实,读者可以根据 /etc/rc.d/rc3.d或 rc5.d 下的文件里,以 “S” 开头的带有 portmap、nfslock nfs 的文件中数字的大小来判断哪个服务应该优先启动。在笔者的机器上,它们分别是 S13portmap、S14nfslock 和 S60nfs,这几个数字清楚地表明了以上启动的顺序。Linux宝库RZ Y qVKY^
"M1BF:cDz5k0 2. 关闭 NFS Server 的顺序Linux宝库jXt&U9`#Yk3h:F
X k/I e-Q1Hn}0 /etc/rc.d/init.d/nfslock stop /etc/rc.d/init.d/nfs stop /etc/rc.d/init.d/portmap stopLinux宝库2H;|P#~!r5n&t,H v
W2ck8s!ouk9G0
3Y}^)dCtU0 Linux宝库:zr,o8x6WDI"{
如果在客户端取消挂接前关闭 NFS Server, 显而易见会发生错误,因此应该尽量避免。
joN5R[Y)?0 Linux宝库bp;sbnr
NFS Client 的配置
0\p3LF,h0
p1Af_AP{$X0 配置 NFS 客户机,可以通过配置 /etc/fstab 文件或运行 mount 命令来进行。
v}] OM$Kh0 Linux宝库{g:@$zw%]y.K
对于那些需要在启动时就挂接的文件系统而言,往往将其写入 /etc/fstab 文件中,其中要包括 NFS 服务器的主机名或 IP 地址、文件系统、挂接点、选项等。对于那些临时需要的 NFS 共享卷来说,则多数会使用 mount 命令将其手动挂接。这两种方法的参数使用基本上是一样的。下面就以 /etc/fstab 文件为例,说明挂接 NFS 卷时参数的使用。Linux宝库_#K8mXc X&xFJ^ gB
+u a4I {KU {@Y0 该文件中有关 NFS 卷的写法通常如下:
\/q)Zw;]w0 Linux宝库)S5y&u Vs@^'Gp5r
servername:/shareplace mountpoint nfs option01,option02,...optionXLinux宝库 Tc9n:E8~A

^#d4wc].t~[ch0 表 2 列出了用于所有文件系统的一般选项。Linux宝库c,Q~v!e2`b$i,cW
Zz)^ r*e"x"] e0 对于 NFS 文件系统,还有一些可以使用的独特选项,使用的时候可以和一般选项混合使用,顺序任意。表 3 列出了 NFS 客户机可用的部分挂接选项。Linux宝库 vTlz'e p w
Linux宝库 ACR)nrc/c.r
请注意,NFS 客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式 mount,虽然可以成功 mount 上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
U&e#dd:e[/PO%]0
T!v"Q }N+\8L0 NFS 性能优化和测试
TQh;q_5sz0
r iqX$y/U6@0 1. 同步或异步写入Linux宝库I(b4t_Bv/\,y
G2C\yY1c1MS3m&F1N0 了解了 NFS 配置的各种选项以后,再来看看各选项对性能及安全性的影响。Server 端同步写入 (sync) 能提供较好的稳定性,但会减慢磁盘的速度。在高负载的服务器上,应用程序会经常花费大量的时间等待写入完成。异步写入 (async) 是服务器不把数据立即写入磁盘,而先将其保存到内核内存 (缓冲区) 中,计划在后边的某个时刻写入,迅速向客户机返回写入成功的信息。这种方法大大地提高了性能,但却牺牲了可靠性,如果系统在将缓冲区中的内容写入磁盘之前崩溃,则数据会永远丢失。
D'p)Yu~\f]n0
G.NVWBZ:r_r[0 NFS 客户端也可以采用异步写入的方式,在客户端缓存用户进程写入的数据, Linux 的缺省方式如此。这种方法使得客户机的速度更快,当客户机崩溃时只丢失该客户端的数据。显而易见,客户端异步写入的风险比服务端异步写入的风险要小。鉴于 Linux 是个相当稳定的系统,为了得到比较好的 NFS 性能,值得采用客户端异步写入的办法。
5FZ Lr@wyB.b0 Linux宝库)y3u+uh~P
2. 选择 TCP 还是 UDPLinux宝库h$G q AD%RRs wLv;I
'\7Y~ \~w`+R0 早期,Sun 公司曾将 NFS v2 设计成为只使用 UDP 协议,主要原因是当时机器的内存、网络速度和 CPU 的影响,不得不选择对机器负担较轻的方式。而到了 NFS v3,Sun 公司选择了 TCP 协议作为缺省的传输方式。在 Linux 上,UDP 协议是缺省使用的协议。作为服务器而言,别无选择。但作为客户端,可以使用 TCP 协议和其它使用 TCP 的 Unix NFS 服务器互连。Linux宝库7bGA$Z)C4x G2S!v5k
Tu!n#~$GF)]y0 3. NFS性能测试
mHg`s0
p0x)?5~_ g0 通常使用测试硬盘读写速度的方法来测试 NFS 的读写速度,但要注意以下几点:
Kg!CAX;N+Q0
(QJXB]S:t0 ◆ 保证主机和网络工作正常,集线器、交换机、路由器等网络设备工作正常;Linux宝库D~yE)E7Q(T
5Wk R S~.|1L0 ◆ 分别在网络安静、普通和繁忙的时候进行测试,真实地了解实际状况和理想状况,以及最坏的状况;Linux宝库8@"M)y)b+gE4S!V(n
{Zb-oyCf0 ◆ 没有必要为提高少许的性能而花费更多的精力。
2J.T(m9@(n&h#dM0
ae"X.p[fV"`7V d0 基本测试可以用 ping 工具来检查网络状况,分别从服务器 ping 客户机,以及从客户机 ping 服务器。如果没有非对称路由的问题,这两种方法的结果应该相近。如果丢包率小于 5%,就会造成 NFS 的性能不良。Linux宝库u~W P|%ZF6a
Linux宝库{c~k{.H#N.a
测试程序用下面命令就可以完成:Linux宝库uc%R KeG!z+Qm
Zr)N|Ic N#c_8u0 time dd if=/dev/zero f=nfs.dat bs=4k count=4098
K7v;N7I*x JRDf0
M&A0|n)O`0 Linux宝库zBAX0l `^4_e
Linux宝库,q5S!N1k?o
这个命令意思是在 nfs.dat 文件里写 4098 个 4KB 的块,也就是一个 16MB 的文件,也可以根据需要改变命令的参数, 但要注意每次实验时使用不同的文件名,否则又会和缓冲有关。
Tp2p:l6qyx!E/s0
Rd"?S,F,m)?0 可能返回的结果如下:
|tk;[ I3L3w G0 Linux宝库H#p+TwH'hc/a+T0qG
4098+0 records in 4098+0 records out real 0m23.984s user 0m0.260s sys 0m4.080sLinux宝库6rxvr[\$]Za-]
Linux宝库(t7M%qF `B
Linux宝库n9a0~8gT1x^%U n
Linux宝库o!eaT'@ T%}%yD%z
这里主要关心
xQX]1]c0
.o$K;x;e |)f0 网络文件服务器(Network File System,简称 NFS)是 Linux 上最容易配置的服务之一。尽管它的规则简单,却有着丰富的内涵。本刊今年第 2 期曾经介绍了如何构建 Linux 上的NFS服务器。但 NFS 还有许多 Unix/ Linux 爱好者,甚至系统管理员应该注意的特别之处。本文旨在帮助读者更深入地了解 NFS。Linux宝库(X-dzw)a7f_
Z/] bT Do)Ih|SJ0 NFS Server 的配置
/]D}UC0
'V2Kaf4R$K]0 首先介绍一下 Server 端和 NFS 相关文件的含义:
5k`+B'lbHpr0 Linux宝库JwD;LW&[
◆ /etc/exports 是 NFS Server 最基本的配置文件之一,文件中列出了共享的文件系统和允许访问这些文件系统的主机。这个文件可以用通配符或网段,以及一组主机名的形式来表示客户机列表。它有很大的灵活性,一般由系统管理员配置。Linux宝库)BG6\4X|P`V
5f}8cwr$Ex'x:t&Q0 ◆ /proc/fs/nfs/exports 导出文件列表的内核视图,包括导出的参数。Linux宝库|QEJgvO
Fii*rEUQ0 ◆ /var/lib/nfs/etab 状态文件,其中列出了当前的高级列表。此文件包含了 /etc/exports 中相同格式的所有项目,同时包含了由 exportfs -i 手工导入的项目。
Y1GV e8DCPf0
4l"vB"w9X J0 ◆ /var/lib/nfs/rmtab 状态文件,列出了挂接导出文件的远程客户机清单。Linux宝库P{@nV%Q.q
Linux宝库)M&a;i)b&_8~y+y:V-S
◆ var/lib/nfs/xtab 状态文件,当前的低级导出清单。
6NJ$AL7n ^1UNL8k0
U9|9t s%P"? w0 例如,/etc/exports 有下列一行 /data *.flying.com.cn (rw),显然有多个主机可以匹配这个域。如果两个主机,如 mail.flying.com.cn 和 ftp.flying.com.cn 都请求访问该文件系统,则 /var/lib/nfs/xtab 文件包含了这个文件系统的两个基本相同的项目。Linux宝库 k4Q-d'`(G(n b;hp{
Linux宝库3d/`W&P"i0^U2iW
/etc/exports 是纯文本文件,空行和以 “#” 开头的行会被忽略,长行可以用斜杠 “/” 分解为多行。文件中列出了允许 NFS 客户机访问服务器的文件系统,定义了导出文件系统和访问权限。
W0d3| Q%s+}{0cb8\C^F0
*^&VK4U&^8r0 /etc/exports 文件中任意行的格式如下:Linux宝库c[:H_ jeRw
W\Eq*QE\U)An'w5]0 vol_name host_name1(option1,opeion2....) host_name2(option1,option2)Linux宝库a8]!j.g @I ?
U!~M p&Vp0
D5nKIXmG?0
h-k;[X)wnuh`o)G_t0
&L%S6H2dcmFB1]0 其中 vol_name(卷名)表示要导出的文件系统,除去卷名以外,其它参数都可以不写,不显示指出的参数都会采用缺省参数。host_name1 ( 主机名 ) 如果不写的话,则任何主机都可以请求该文件系统。主机名的定义非常灵活,既可以指定某台主机,也可以指定一组主机。可以用下列四种方法来描述:
2D&kyO"\^0
M"F.X-yl0 ◆ 单个主机 可以用短名及完全限定名,或者用IP地址,例如 student01、student01.flying.com.cn 或者 192.168.10.1 都是合法的主机名。
z L0ykNZy-p0 Linux宝库\Xy@ FZ ?(iGP5H yQ
◆ 网组 可以列出 /etc/netgroup 文件中或 NFS 网组映射中定义的整组主机。网组名以 “@” 开头,例如 @teacher 或 @students。Linux宝库y's)mjJiP
Linux宝库8`^nz%d^'pfz
◆ 通配符主机 用通配符可以列出一个域中的所有主机器,通配符可以使用 “*” 和 “?”、“*” 匹配 0 个或多个字符及 “?” 匹配一个字符,但通配符不能匹配主机名中的点号。*.flying.com.cn 可以匹配 ftp01.flying.com.cn,但不能匹配 backup.ftp01.flying.com.cn,而 *.*.flying.com.cn 就可以匹配 backup.ftp01.flying.com.cn。 ftp??.flying.com.cn可以匹配 ftp01.flying.com.cn 和 ftp02.flying.com.cn。Linux宝库+R(iCEb(f
Linux宝库5L0_L{%cc|1r+tx
◆ 主机网络 可以用主机网络的方式导出特定的子网或几个子网,用 192.168.10.0/255.255.255.0 的方式可以匹配从 192.168.10.1 到 192.168.10.255 所有主机。导出选项用逗号分隔,但不能包含空格,长度可以任意设定。多数选项都是布尔选项,值为 True 或 False,选项与性能或者安全性有关。当 /etc/exports 文件没有给出值时,系统会自动采用缺省值。选项的详细用法可以用 man exportfs 命令来获得。Linux宝库h s3k R4Z#`;p"q9IR
4a!w%j z:Z m0 更改 /etc/exports 文件后,可以用 exportfs 命令将文件的改变告诉服务器,也可以忽略 /etc/exports 文件,直接使用 exportfs 命令导出共享卷。exportfs 可以指定导出或非导出卷时影响的选项,可以影响一个卷或几个卷的选项,见表1。
\hFf hz"A0

H3zV[ BfO$d0 NFS 锁及远程配额监控程序Linux宝库 dmrK*z F1RL
,`{h9mBs0 在 Unix 中可以锁定文件,保证不会有两个用户同时写入文件的同一部分,以确保数据的一致。保证一致性的关键是内核要仲裁锁定和写入请求。
&Wf.r*l.J+gO R3rM_0 Linux宝库2|F8R M?4c:{N
而在 NFS/Samba 之类的分布式文件系统中,许多客户可能同时要求写入和锁定同一文件。此时,只有服务器本身能扮演仲裁的角色。Unix/ Linux 的方法是增加一个 RPC 协议处理锁操作,这就是 NFS 锁监控程序 (NLM, NFS Lock Manager)。通常不需要关心它的具体运行方式,将此服务打开即可。
A4H$Emc5l(p0
)@*MI ioH(v4H0 rpc.rquotad 监控程序实现 RQUOTA 协议,在 Linux 中 NFS 服务器总是执行配额,不管是否运行了 rpc.rquotad。
.c bG L!mA*cU:W#N0
cN.b7]M x4be7Q0 启动和关闭 NFS Server 的顺序
_{2S7p!U0 Linux宝库:QsxnN
1. 启动 NFS ServerLinux宝库?8ktphcG J
Linux宝库8V'}2I1AaWp
/etc/rc.d/init.d/portmap start /etc/rc.d/init.d/nfslock start /etc/rc.d/init.d/nfs start
9i2ko!P5t cY+Uh1pe0
]-Nk E]0
.F*i#q4Zj;D&]:`0 Linux宝库-K*A*Jp-H"d[
其实,读者可以根据 /etc/rc.d/rc3.d或 rc5.d 下的文件里,以 “S” 开头的带有 portmap、nfslock nfs 的文件中数字的大小来判断哪个服务应该优先启动。在笔者的机器上,它们分别是 S13portmap、S14nfslock 和 S60nfs,这几个数字清楚地表明了以上启动的顺序。Linux宝库RZ Y qVKY^
"M1BF:cDz5k0 2. 关闭 NFS Server 的顺序Linux宝库jXt&U9`#Yk3h:F
X k/I e-Q1Hn}0 /etc/rc.d/init.d/nfslock stop /etc/rc.d/init.d/nfs stop /etc/rc.d/init.d/portmap stopLinux宝库2H;|P#~!r5n&t,H v
W2ck8s!ouk9G0
3Y}^)dCtU0 Linux宝库:zr,o8x6WDI"{
如果在客户端取消挂接前关闭 NFS Server, 显而易见会发生错误,因此应该尽量避免。
joN5R[Y)?0 Linux宝库bp;sbnr
NFS Client 的配置
0\p3LF,h0
p1Af_AP{$X0 配置 NFS 客户机,可以通过配置 /etc/fstab 文件或运行 mount 命令来进行。
v}] OM$Kh0 Linux宝库{g:@$zw%]y.K
对于那些需要在启动时就挂接的文件系统而言,往往将其写入 /etc/fstab 文件中,其中要包括 NFS 服务器的主机名或 IP 地址、文件系统、挂接点、选项等。对于那些临时需要的 NFS 共享卷来说,则多数会使用 mount 命令将其手动挂接。这两种方法的参数使用基本上是一样的。下面就以 /etc/fstab 文件为例,说明挂接 NFS 卷时参数的使用。Linux宝库_#K8mXc X&xFJ^ gB
+u a4I {KU {@Y0 该文件中有关 NFS 卷的写法通常如下:
\/q)Zw;]w0 Linux宝库)S5y&u Vs@^'Gp5r
servername:/shareplace mountpoint nfs option01,option02,...optionXLinux宝库 Tc9n:E8~A

^#d4wc].t~[ch0 表 2 列出了用于所有文件系统的一般选项。Linux宝库c,Q~v!e2`b$i,cW
Zz)^ r*e"x"] e0 对于 NFS 文件系统,还有一些可以使用的独特选项,使用的时候可以和一般选项混合使用,顺序任意。表 3 列出了 NFS 客户机可用的部分挂接选项。Linux宝库 vTlz'e p w
Linux宝库 ACR)nrc/c.r请注意,NFS 客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式 mount,虽然可以成功 mount 上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
U&e#dd:e[/PO%]0
T!v"Q }N+\8L0 NFS 性能优化和测试
TQh;q_5sz0
r iqX$y/U6@0 1. 同步或异步写入Linux宝库I(b4t_Bv/\,y
G2C\yY1c1MS3m&F1N0 了解了 NFS 配置的各种选项以后,再来看看各选项对性能及安全性的影响。Server 端同步写入 (sync) 能提供较好的稳定性,但会减慢磁盘的速度。在高负载的服务器上,应用程序会经常花费大量的时间等待写入完成。异步写入 (async) 是服务器不把数据立即写入磁盘,而先将其保存到内核内存 (缓冲区) 中,计划在后边的某个时刻写入,迅速向客户机返回写入成功的信息。这种方法大大地提高了性能,但却牺牲了可靠性,如果系统在将缓冲区中的内容写入磁盘之前崩溃,则数据会永远丢失。
D'p)Yu~\f]n0
G.NVWBZ:r_r[0 NFS 客户端也可以采用异步写入的方式,在客户端缓存用户进程写入的数据, Linux 的缺省方式如此。这种方法使得客户机的速度更快,当客户机崩溃时只丢失该客户端的数据。显而易见,客户端异步写入的风险比服务端异步写入的风险要小。鉴于 Linux 是个相当稳定的系统,为了得到比较好的 NFS 性能,值得采用客户端异步写入的办法。
5FZ Lr@wyB.b0 Linux宝库)y3u+uh~P
2. 选择 TCP 还是 UDPLinux宝库h$G q AD%RRs wLv;I
'\7Y~ \~w`+R0 早期,Sun 公司曾将 NFS v2 设计成为只使用 UDP 协议,主要原因是当时机器的内存、网络速度和 CPU 的影响,不得不选择对机器负担较轻的方式。而到了 NFS v3,Sun 公司选择了 TCP 协议作为缺省的传输方式。在 Linux 上,UDP 协议是缺省使用的协议。作为服务器而言,别无选择。但作为客户端,可以使用 TCP 协议和其它使用 TCP 的 Unix NFS 服务器互连。Linux宝库7bGA$Z)C4x G2S!v5k
Tu!n#~$GF)]y0 3. NFS性能测试
mHg`s0
p0x)?5~_ g0 通常使用测试硬盘读写速度的方法来测试 NFS 的读写速度,但要注意以下几点:
Kg!CAX;N+Q0
(QJXB]S:t0 ◆ 保证主机和网络工作正常,集线器、交换机、路由器等网络设备工作正常;Linux宝库D~yE)E7Q(T
5Wk R S~.|1L0 ◆ 分别在网络安静、普通和繁忙的时候进行测试,真实地了解实际状况和理想状况,以及最坏的状况;Linux宝库8@"M)y)b+gE4S!V(n
{Zb-oyCf0 ◆ 没有必要为提高少许的性能而花费更多的精力。
2J.T(m9@(n&h#dM0
ae"X.p[fV"`7V d0 基本测试可以用 ping 工具来检查网络状况,分别从服务器 ping 客户机,以及从客户机 ping 服务器。如果没有非对称路由的问题,这两种方法的结果应该相近。如果丢包率小于 5%,就会造成 NFS 的性能不良。Linux宝库u~W P|%ZF6a
Linux宝库{c~k{.H#N.a
测试程序用下面命令就可以完成:Linux宝库uc%R KeG!z+Qm
Zr)N|Ic N#c_8u0 time dd if=/dev/zero f=nfs.dat bs=4k count=4098
K7v;N7I*x JRDf0
M&A0|n)O`0 Linux宝库zBAX0l `^4_e
Linux宝库,q5S!N1k?o
这个命令意思是在 nfs.dat 文件里写 4098 个 4KB 的块,也就是一个 16MB 的文件,也可以根据需要改变命令的参数, 但要注意每次实验时使用不同的文件名,否则又会和缓冲有关。
Tp2p:l6qyx!E/s0
Rd"?S,F,m)?0 可能返回的结果如下:
|tk;[ I3L3w G0 Linux宝库H#p+TwH'hc/a+T0qG
4098+0 records in 4098+0 records out real 0m23.984s user 0m0.260s sys 0m4.080sLinux宝库6rxvr[\$]Za-]
Linux宝库(t7M%qF `B
Linux宝库n9a0~8gT1x^%U n
Linux宝库o!eaT'@ T%}%yD%z
这里主要关心
TAG:
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | |||||||
我的存档
数据统计
- 访问量: 78164
- 日志数: 76
- 图片数: 88
- 文件数: 30
- 书签数: 20
- 建立时间: 2006-06-09
- 更新时间: 2008-06-30

