如今这个信息化高度发达的年代,信息爆炸,数据资源越来越多。五年前,20G的硬盘还显得非常充裕;而如今,没有100G到200G,是无法存下家庭中所有数据资源的了。对于我们家来说,几年间添置了数码摄像机和数码照相机,加之几次旅行和游玩,家中的两块160G大硬盘已然无法满足存储所有信息的需求。
总是刻盘、刻盘、再刻盘,并不是最好的解决方案,因为一来找起数据来非常不方面;二来读取速度也非常慢,还要担心光盘质量和保存的问题;三来光盘刻一次基本上不再修改了,非常不灵活。加上对于视频编辑的时候对于大容量数据存储、高速度数据访问的要求,我们家在半年前添置了一块1TB的SATA大硬盘(1TB=1000GB)。
不过买完了这块大硬盘,对我和我父亲来讲,并不是终极的解决方法。买之前我们就曾经参考了有关信息,得知这1TB的大硬盘并不是十分稳定,有损坏的可能。但为了利用其大容量高速度的特点,我们还是将家里最重要的RAW格式相片和原始格式的视频文件统统放入了大硬盘之中,而它也良好地运行了近半年。
不过我却一直没有放心,因为重要的数据都放在这个1TB的硬盘里,没有备份,更无法备份(数据量太大了)。就在一个月前,让我们提心吊胆的事情发生了:大硬盘突然无法读出数据了!更加无法识别出来。
对于我来说,心情还比较镇定,根据自己的了解,数据肯定是丢不了的,但可能需要拿到中关村去修;但我父亲就非常着急了,那么多重要的数据,很多都是他的心血,特别是对于相片和视频的编辑。不过还好,最后硬盘在我父亲的几次试验下,终于恢复了正常。
但我不能再让数据这么暴露在没有保护的情况之下了。一直在考虑什么时候整个家庭服务器中心,然后做个RAID-0的镜像来保证数据安全。正好有一天,我突然看到原来Sun公司的同事Yong?sun也想弄个数据中心(他是因为苹果的Time Capsule坏了),于是和他约好了一起去中关村买个文件服务器。
参考了网上的资料,发现现在电脑的发展很快,和父亲商量后,决定买个更好的新电脑作为桌面机,然后将现有的电脑淘汰下来做服务器。将新电脑配置好以后,又找来了一块20G的IDE硬盘,来安装OpenSolaris操作系统。随后,去村里淘了一块新的希捷1TB的SATA硬盘,准备好和老的组成mirror镜像,来保证数据的安全。
旧的电脑配置还算不错,至少内存是2G的,足够OpenSolaris和ZFS折腾的了,呵呵~ 首先在旧电脑上安装了Open?So?la?ris,然后按照自己积累的经验配置好了Open?So?la?ris,在XManager和SecureCRT的帮助下,我可以脱离显示器开始我的OpenSolaris之旅了,呵呵。
后来就拔掉了所有设备,什么鼠标啊键盘啊显示器接口啊的,就剩下了一个电源和一条网线。虽然就这俩东西,但足以保证旧电脑和它的Open?So?la?ris正常地运行,我也能够很好地使用了。
然后我首先完成了对于Open?So?la?ris中Samba服务器的配置。没有这玩意,让老爸敲命令行访问数据,那岂不是太为难他了?还是得配置网络硬盘。关于Samba的配置,可以参考我原来写过的博客,当然也可以在网上搜索搜索,一大堆。
然后就是配置我们的ZFS了。我家就两块1TB硬盘,而且很多资料还存在第一块中,所以不能马上就做镜像。我首先作了一个普通的池,先将新的硬盘挂接进去:
# zpool create family c9d1
# zfs create family/share
# zfs create family/paul
其中第一句话的意思是建立一个存储池,叫做family,并将c9d1这块硬盘挂上去。后面就是在这个family的存储池中建立了两个子文件夹,分别存储共享和我自己的文件。之所以建立子文件夹,是针对不同类型的文件不同分析,ZFS给我们提供了很多功能,如文件压缩的功能。所以我针对family/paul/archive这个目录进行了compression,也就是压缩,这样可以把自己存档的一些资料压缩处理。不去使用zip、rar这样的压缩,可以很快地打开某一文件,这多好啊。
然后建立好了池,就通过网络,将原来第一块硬盘上的数据复制到这块新建的ZFS文件系统中。天啊,才发现一共260G的数据,太庞大了…… 以11MB/s的速度复制过去,速度还算说得过去,不过一个晚上就这么过去了,大约用了5、6个小时。
复制完了以后,我就把第一块大硬盘从硬盘盒中拆下来,装进旧电脑中。打开旧电脑和OpenSolaris,不出意外地发现了这块硬盘,编号是c9d0。接下来我们就要开始镜像了:
# zpool attach family c9d1 c9d0
# zpool status
通过第一行代码,我们就可以将c9d0这块硬盘附加到c9d1上,使得这两块硬盘成为镜像关系。第二行就可以看看目前所处的状态:
pool: family
state: ONLINE
scrub: none reque?sted
con?fig:
NAME STATE READ WRITE CKSUM
family ONLINE 0 0 0
mir?ror ONLINE 0 0 0
c9d1 ONLINE 0 0 0
c9d0 ONLINE 0 0 0
errors: No known data errors
然后又大约用了2–3个小时吧(半夜了,让它自己同步的),同步完成了!至此,我们便拥有了一个带有镜像功能、安全稳定的家庭数据中心了。
使用了有几天了,我也开始玩上更多的花样了。首先便是刚才提到的,建立了一个archive目录,存放存档文件:
# zfs create family/paul/archive
# zfs set compression=on family/paul/archive
# zfs get comp?re?ss?ra?tio family/paul/archive
NAME PROPERTY VALUE SOURCE
family/paul/archive comp?re?ss?ra?tio 1.14x –
第一行是我建立的文件系统路径,而第二行就是让这个子文件夹带上压缩功能。我们可以通过地三行的命令来看压缩率。现在是1:1.14,还凑合了吧,总比没有强啊。
另外,我也写了个小程序,每隔一段时间让OpenSolaris服务器自动地提交以下自己的IP到网络上,以适应小区宽带包月没有固定IP的问题。这样,只要我的服务器开着,我便可以在家外任何一个有网络的地方访问到家中的资源,非常有意思。
在对于自动运行的讨论过程中,我们可以使用写OpenSolaris的SMF服务的方法来实现。不过我选择了比较简单的方法,仅仅写了个shell脚本,并使用crontab来定期执行它。
除此之外,我还希望丰富家中数据中心的功能,希望能把打印机也挂上去,大家就可以分享打印机了。不过现在驱动还是有点问题,正在学习和配置中。
总之,使用了OpenSolaris的ZFS功能,我们用一些家中淘汰下来的设备,也可以组成一个非常不错的家庭数据中心了。有了它,我们就可以快速方便地访问数据,同时不必担心数据的安全性问题了。
最后,我已经想好了今后如果1TB也不够用的时候怎么扩容了。由于旧电脑的主板支持4个SATA接口,那么我就可以再加一块硬盘,不过这次不用买两个硬盘了,使用RAID-Z技术,就可以用3块硬盘来达到2TB的存储量,同时又保证了数据的一致性和速度。非常不错!如果有这样的一天,我配置好了再来写博,呵呵。