有关FreeBSD的几点误区

2008-02-23 08:01:27来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

王波

虽然绝大多数人都知道FreeBSD的优势在于稳定性高,网络性能好,但对于FreeBSD其他
的一些技术特性,在认识上仍然存在着一些偏差。

1.FreeBSD不具备日志文件系统,因此不适合用作高要求的应用目的

首先需要指出的是,日志文件系统最早也是在BSD上开发的,称为LFS。在FreeBSD中本来
是支持它的,但后来由于版本升级的原因,它的代码由于缺乏维护而被暂时抛弃,至今
还可以在FreeBSD的源代码中可以找到LFS的一些遗迹。目前,LFS还存在于NetBSD中继续
开发,如果有特别的需求,它完全可以再回到FreeBSD系统中。
然而,FreeBSD开发者没有急于将LFS移植回FreeBSD是有道理的,因为FreeBSD系统中已
经增加了一些新的特性,足以提供LFS能提供的最重要的特性。为了解释FreeBSD的这些
特性的本质,我们需要讨论一下文件系统。
由于文件系统的读写性能对于整个系统的性能来讲,是一个非常重要的指标,因此系统
设计者就设法尽可能的提高文件系统的性能。这样,人们就设计了磁盘访问缓冲来达到
这个目的,这样,使用缓冲的读写方法就称为异步(async)访问方法,相应的不采用缓
冲的磁盘读写方法就称为同步(sync)访问方法。
显然,异步方法具有更高的读写性能,但是一旦发生故障的时候,由于有很多数据还保
存在缓冲区中,就导致这一部分数据丢失。然而,如果是简单的部分数据丢失倒还罢了
,但是某些重要的数据丢失,就导致整个文件系统遭到破坏。为什么会发生这样的情况
呢?
因为,在文件系统中,有两种不同的数据,一种为简单的文件内容数据,这些数据丢失
仅仅导致某个文件出现错误数据,不会影响其他文件的内容。另一种数据则比较重要,
例如文件系统本身的I节点或者目录数据,假如I节点的数据块出现错误,就会导致大量
文件丢失,甚至导致文件系统整个受到破坏。这些对文件系统完整性非常重要的数据被
称为元数据(metadata)。
对于普通的文件系统来讲,并不能在缓冲区中区分出普通数据和元数据,这样就会发生
普通数据的更新比它对应的元数据更新的时间要早,这样一旦发生故障,文件系统的破
坏是不可避免的。对于日志文件系统来讲,由于日志是顺序发生的,因而缓冲区向磁盘
写的顺序也是顺序的,这样,元数据的更新总是顺序的在数据更新之前被保存,这样就
使得即使发生故障,元数据也不会发生特别严重的错误,某些元数据的错误只能导致部
分文件丢失,而不会影响整个文件系统。
由于日志文件系统的这个顺序特性,使得系统不会因为故障出现严重的错误,而且在出
现错误时,还具备更短的文件系统修复时间(fsck),系统修复时间对于存储量非常大
的文件系统非常重要。这样一旦出现错误,系统重新启动并恢复提供服务的时间也很短
暂。
对于FreeBSD系统来讲,则沿着另一个类似的方式来解决这个问题。由于FreeBSD更关心
系统的稳定性、可靠性,FreeBSD系统并不推荐使用异步的方法来访问磁盘,但是这样磁
盘性能就比较差。为了解决这个问题,FreeBSD改善了文件系统,将普通数据和元数据分
开,这样就可以对普通数据进行缓冲,而对元数据不进行缓冲,这样的方法就可以大大
改善文件系统性能,并且对文件系统的安全性也没有太大的影响。
然而即使如此,文件系统的性能比起全部异步的方法还有一些差距,如何达到全部异步
访问的目的呢?FreeBSD研究者提出了softupdate的方法,softupdate的主要目的是将元
数据的改变按照它们之间的依赖关系,元数据对普通数据的依赖关系进行重新排序,保
证元数据的更新按照安全的数据顺序更新,这样即使出现故障,也如同日志文件系统类
似,只会出现最终改变的一些文件错误或丢失,而不会出现严重错误。
从这个本质角度出发,softupdate其实是和日志文件系统用来解决同一类问题的两种不
同方法,只不过日志文件系统是使用日志的方法来解决依赖关系的顺序问题,而softup
date则需要重新排序元数据,softupdate功能上非常类似于元数据日志文件系统。有了
softupdate,系统就可以全面支持异步的磁盘读写,提供更好的文件系统性能。
此外,FreeBSD目前还提供了诸如后台磁盘检查,就是说可以在后台执行磁盘检查,而不
影响前台执行磁盘访问,这样就使得系统出现故障时更短的时间恢复正常服务。目前Fr
eeBSD系统甚至可以提供包括快照(snapshot)在内的高级文件系统功能。
因此,虽然FreeBSD 下目前没有日志文件系统,但事实上已经提供了类似日志文件系统
的功能,因此完全可以满足不同的高端需求。

2. FreeBSD的磁盘读写性能差,不适合大量存储数据的情况

很多来自网上的文章都告诉读者,FreeBSD虽然在其他方面具备一定的优势,但磁盘读写
速度差,特别是在使用IDE磁盘的时候。
如果把这个观点放在FreeBSD 2.2.x之前,也许还有些道理,那个时候FreeBSD为了保证
文件系统的安全性,是使用同步的方法访问磁盘,显然要比linux等以异步的方法访问磁
盘要慢的多。但在FreeBSD 3.x之后,系统已经全面支持softupdate,那么性能的改善就
可想而知了。
当然,为了保证数据安全,FreeBSD缺省还关闭一些硬件的性能选项,例如IDE磁盘通常
有一个内部的缓冲区,具备在磁盘设备本身对数据进行缓冲的功能,原则上,这个功能
是非常危险的,因为它在磁盘内部实现,系统无法告诉它那些数据是元数据,不能缓冲
或者必须顺序写入等等,有些高端磁盘通常具备电池,保证磁盘内部的缓冲能在突然掉
电的情况下写回磁盘,但普通的磁盘显然没有这个能力。因此,FreeBSD实际上缺省是关
闭这样的功能的,并不推荐使用,但是,如果是追求性能的话,打开这些功能也是可以
的,只不过就要冒丢失数据的风险了。
很多FreeBSD用户还注意到,安装FreeBSD的时候,磁盘读写性能的确比较慢,尤其是在
安装Ports Collection部分的时候。这是因为目前FreeBSD的安装系统还没有立即支持s
oftupdate,没有充分发挥这个性能优势,对于Ports Collection这个包含大量小文件,
需要巨大数量的I节点元数据改变的磁盘访问需要,速度慢一些是正常的。未来的安装系
统将缺省支持softupdate,安装速度会得到改善。
安装系统的磁盘访问慢还有一个更深层次的原因,就是安装系统的打包方式与普通方式

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:BSD系统全家福

下一篇:FreeBSD开发环境解决方案