现在的位置: 首页 > 综合 > 正文

MyBookWorld历险记

2013年07月25日 ⁄ 综合 ⁄ 共 3678字 ⁄ 字号 评论关闭

家里的MyBookWorld小NAS系统,虽然CPU的频率只有区区100Mhz,但是由于采用的是开放的Linux系统,可定制性极强,所以自然而然的成了我的小玩具。我经常在上面装一些乱七八糟的东西,对它的功能进行压榨。比如,我给它装了gcc工具链,尝试在上面编译源代码——速度虽然慢如蜗牛,有时会莫名其妙地报出编译器BUG,但是好歹也算可以使用嘛。但是最近对它的一些改动差点出了大麻烦。下面我简单地把如何“折磨”这个小盒子的过程做个简要描述。

 

0. 前言

我用的固件版本是国内爱好者定制的一茶版,已经集成了不少功能。假设盒子的IP是192.168.0.1,可以用浏览器访问http://192.168.0.1/sw访问基本设置界面,轻松地进行设置。从里面可以看到,它集成了BT,电驴等功能,也都可以通过Web来轻松操作。我自己用它自带的Transmission下BT,使用起来很方便。网上关于一茶版的使用说明也比较多,这里就不多述了,本文主要讲我自己做的一些额外设置。

 

1. 动态域名绑定

为了能够在任何地方都可以访问到这个小NAS,我在家里的路由器上面做了端口映射,SSH和FTP访问都没有问题。由于是拨号上ADSL,每次拨号得到的IP都不一样,所以必须绑定一个动态域名才能够方便地访问NAS。由于动态域名需要经常更新,所以我在crontab里面加入了如下代码:

*/30 *    *   *     *   curl -su username:password 'http://members.3322.org/dyndns/update?system=dyndns&hostname=yourdomainname.3322.org&wildcard=on'

我是用的3322.org提供的动态域名。3322.org的一大好处是可以通过http接口更新动态域名信息,比起其他需要客户端的动态域名服务要方便很多。在注册好自己的域名并获取密码之后,通过上面的代码,定期通过命令行工具curl向3322.org发出请求即可。(需要自行把username,password,yourdomainname改成自己的用户名,密码和域名)。

 

2. 更新FTP Server

自带的FTP Server是vsftpd,这可能是使用最为广泛的一个FTP服务器了。但是我出门在外,通过FTP客户端连接NAS的时候,经常发生超时的现象,FTP很难正常使用。排除了网络不稳定的可能性之后,我决定更换一个FTP服务器。于是选取了同样广为使用的pure-ftpd。

通过SSH登录NAS,利用自带的轻量级包管理工具ipkg,让它自动安装pure-ftp:

ipkg install pure-ftpd

安装完毕之后,如果不更改默认端口,需要停掉以前的vsftpd服务。在/etc/inetd.conf把和vsftpd相关的一行用#注释掉,重启系统,输入以下命令即可简单地开启服务:

pure-ftpd &

更复杂的设置可以参看pure-ftpd的帮助。如果想让系统自动的启动的时候加载cure-ftpd,可以把它放在开机脚本里。我是把它放在/etc/init.d/post_network_start.sh中的。

 

安装了pure-ftpd之后,我用reboot重启系统,发现一直无法连上。回到家里面,发现NAS盒子上的LED指示灯也没有亮,就怀疑系统出问题了。彻底关闭了电源,再行启动,这次成功了。但是隐隐约约地觉得,我是不是把系统给改坏了呢?

 

3. 搭设WIKI服务器和家庭内部论坛

总想一种更便捷的方式来访问家里的资料,同时也想利用这个小NAS和家庭成员之间做一些协作操作,于是在上面搭建更多的基于Web的程序的想法就油然而生。MyBookWorld的Web服务器是lighttpd,这是一个轻量级的服务器,很适合在这种硬件配置不高的环境里运行,使用起来和Apache一样方便。MyBookWorld支持PHP,版本还不算很老(5.2.6),同时也支持MYSQL和Sqlite数据库,于是,大部分基于php的程序都可以在上面运行。有的Web程序的最新版对环境的要求比较苛刻(比如MediaWiki),我们可以用稍微老一点的版本。

我利用MediaWiki1.5.1在上面假设了一个WIKI程序,用来存放一些技术性的资料,和自己对自己的项目规划。下载了PhpBB,假设了一个内部论坛,可以和老婆在上面灌水。还自己写了一个小程序,用来管理硬盘上的照片。我尝试用PHP的GD函数库生成缩略图,谁知在这100Mhz很可能缺乏浮点运算和除法运算支持的CPU上,要用将近2分半钟,才能把大概一点几M的JPEG图片给生成一幅缩略图。那个慢啊……不过,至少是有这个功能的,嘻嘻,在这种硬件水平上面,也就知足了。不管怎么样,我可以在世界各地来访问它们,甚至可以用智能手机来访问!自动动手,丰衣足食,感觉不是一般的爽。

我在/etc/lighttpd/lighttpd.conf里已加了IP限制,目前就我和老婆能够访问。另外,默认的Web目录是/usr/www/lib,在上面增加自己的程序时,注意要修改文件权限,让www-data这个用户能够正常访问。

 

4. 系统的备份和复原

前段时间,闲着无聊,把MyBookWorld的系统分区做了备份。用fdisk -l查看系统,可以看到如下分区:

   Device Boot    Start       End    Blocks   Id  System

/dev/sda1               4         369     2939895   fd  Linux raid autodetect

/dev/sda2             370         382      104422+  fd  Linux raid autodetect

/dev/sda3             383         505      987997+  fd  Linux raid autodetect

/dev/sda4             506       91201    *********  fd  Linux raid autodetect 

硬盘被分成了4个分区。/dev/sda1用来存放操作系统,被mount到了/目录。/dev/sda2是交换分区。/dev/sda3被mount到了/var目录,用来存放运行时经常改变的数据,比如系统日志。/dev/sda4被mount到了/shares/internal,用来存放真正的用户数据,通过SAMBA把它给共享出去,其他计算机便可以访问它。/dev/sda2没有备份的必要,/dev/sda3理论上说不用备份问题也不大,/dev/sda4里面的数据是真正重要的用户数据,但是太大了,不能使用简单的备份方法。于是,我用dd,迅速地把整个/dev/sda1备份到共享分区当中:

dd if=/dev/sda1 of=/shares/internal/PUBLIC/back/sda1.img bs=1M

硬盘最开始是MBR,只有一个扇区大小,不属于任何分区,但是存放了分区表等重要信息,也有备份的必要:

dd if=/dev/sda of=/shares/internal/PUBLIC/back/mbr bs=512 count=1

 

上次更新了FTP服务器,出现了一次系统无法自动启动的情况;前天晚上,我更新了WIKI的数据库,输入reboot,发现又一次无法起来了。回到家里,关闭电源测试过多遍,仍然不行。于是,我通过USB转SATA,把NAS里的硬盘拆下来,接到笔记本上面,把硬盘mount起来,查看里面的log,在最近一段时间之内,没有发现任何记录。既然硬盘能在笔记本上使用,看来没有坏。难道是NAS里的其他硬件坏掉了?

这个小盒子没有串口,没有显示器,很难进行调试。从LED指示灯没有亮起来这个事实推测,系统没有执行到加载LED模块那个位置。Linux启动的时候,会加载很多很多模块,是不是系统卡在启动脚本的哪个地方了?于是,我在启动脚本里面加入了大量类似的代码:

echo markpos1 >>/etc/marklog

sync

然后再次开机。等过了几分钟,关机拆下硬盘,再次连到PC上,查看/etc/marklog这个文件是否生成,里面的记录是什么,希望从这个能够推测到启动脚本运行到什么地方了。事实让我失望,压根就没有生成/etc/marklog这个文件!

无助之余,我想到了以前对系统分区进行过备份,于是在笔记本里的Debian系统中,把它进行了还原(在这个系统中,硬盘被识别成/dev/sdb,用户共享分区被mount成/media/disk):

dd if=/media/disk/PUBLIC/back/sda1.img of=/dev/sdb1 bs=1M

还原之后,拆下硬盘,插回MyBookWorld,重新开机成功!LED指示灯再次亮起来,我又可以通过网络正常访问它。

虽然现在已经无法知道到底系统在哪里有问题了,但是这次历险的经历告诉我,常备份还是很有好处的。家用IT环境的可靠性并不是很高,也许以后带宽更高了,云备份是一个很好的选择。

抱歉!评论已关闭.