ZFS时代FreeBSD系统的数据冗余策略

2009-05-13 13:40:37来源:未知 阅读 ()

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

2008硬盘磨损年!
我相信很多人都遇到过
[url=javascript:;]硬盘[/url]
卡壳、掉链子的情况。当然,这篇文档的主旨不是告诉你怎么样可以绕过那些老爷子写的课本上说的金科玉律──重要的数据都应该有
[url=javascript:;]备份[/url]
──如果你的数据最终丢失了,那么我的问题是:你的备份呢?
但是,即使你有经常备份的习惯,有些数据还是会难免出现一些没有及时备份而导致丢失的情况。我的观点是,没有备份计划的数据都不是重要数据,不要等到数据丢失了再去后悔,但是我们显然应该采取各种各样的手段来阻止没有及时备份的那一小部分数据的丢失。
硬盘
大家一起默念:它很便宜!它会坏掉!
是的,实战经验会告诉你,它很便宜!它也会坏掉!不管这个硬盘是来自什么厂商,也不管它是SATA、SCSI、SAS或者是传统的ATA接口,它出现
故障
只是时间早晚的问题。
为了解决这个问题,人们提出了廉价磁盘冗余阵列(
[url=javascript:;]RAID[/url]
)的概念。例如,使用两块相同容量的磁盘组成 RAID-1 (MIRROR) 阵列,可以在其中任意一块出现问题时,从另一块中取出数据。而如果有至少3块硬盘,便可以组成 RAID-5 (注:还有其他RAID级别可以用3块硬盘组成冗余
[url=javascript:;]结构[/url]
),只损失 1/n 的容量(n为硬盘
数量
)来得到带冗余的存储,使得存储可靠性得以提高。
除了改善可靠性之外,RAID还可以用来改善读写性能。例如用多块硬盘组成 RAID-0 阵列,可以将读写性能提高 n 倍,等等。我们并不讨论这些RAID级别。
不幸会发生
和很多人已经想到的一样──不要高兴的太早......

[url=javascript:;]数据冗余[/url]
的 RAID 的一个基本假设是,磁盘是不骗人的,它有两种状态:好、坏,并且,主机(或RAID控制器)能够可靠地识别这种状态。
很不幸,这句话只对了一半。一块磁盘要么是好的、要么是坏的(这里,"坏的"的定义是读写时会发生任何错误),但是主机未必能够识别这种状态。
更为严重的是,有些时候主机甚至连读出来的数据是否是正确的这件事都不知道!当你发现自己的程序在其它机器上都很正常,但是在某台机器上总是神秘的崩溃的时候,你就要看看是不是那台机器的内存或者其他存储器出现问题了。
经历了大量痛苦的数据恢复工作之后,终于有人想出了一个主意:把数据的校验和放到别的地方,例如,引用这块数据的地方,并且将元数据保存多份。解决问题的方法有很多,一种是花更多的钱去买更好的硬件,而另一种,则是采用一些合理的技术手段来降低硬件发生问题时的影响──你不是不可靠吗?那么我检查你,确认你的数据是对的我才接受;你不是容易丢失数据吗?那我就多存几份,多到将真的丢失数据的概率降到可以接受的水平为止。
这种技巧是广大劳动人民在长期的科研实践中总结出来的,并且在历史上有着相当广泛的应用。例如,传统 BSD 系统中的伯克利快速文件系统(FFS,在现代
[url=javascript:;]FreeBSD[/url]
版本中称为 UFS)会保存大量的关键元数据──超级块和柱面组映射表的副本,而这些副本在布局的时候,被保证不会放在磁盘的相同盘面、柱面或扇区上,从而保证了磁盘在失去一个盘面、被划伤一个柱面,或者被子弹击穿时,仍然会有可用的超级块副本存在,从而能够恢复部分数据。
不过,简单地把所有数据保存多份有时是不需要的。首先,它会影响写入性能,并损害写

标签:

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

上一篇:让某个用户登陆就关机的办法

下一篇:FreeBSD Mount /proc File System Command