2009年4月1日星期三

笔记本选购不完全指南

    这几年来,贝壳接触了不少电脑,并且经常被人叫去选购各种电脑和配件。其中最为复杂的就是电脑配置,因为电脑配置具有很强的可换性,可以根据需求精确定 制。喜欢A的CPU加B的主板?完全没问题,买了组装就是。回顾贝壳玩电脑来14年的趋势,组装机逐步的在驱除品牌机。95年的时候品牌机还有很大优势, 而现在只有公司才会考虑进品牌机。最主要的原因也不是出于性价比,而是资产管理和经营者的回扣。作为个人来说,找个信任的人配个配置,去电脑商场比价,讲 价,组装,大多数人都可以做到。而在维护上,遍布各地的维修点,电脑基础维护知识的普及,也大大削弱了品牌电脑的价值。但也因为电脑配置的这种灵活性,使 得电脑选购组装上的普及完全不可能。一个电脑配置单要考虑无数的事情,实在不是非专业人士能够处理的。反倒是灵活性略差的笔记本选购可以由非专业人士搞 定。今天贝壳就讲一下笔记本电脑选购上的几个要点,最近需要下手购入的朋友们,注意了。
    首先一点,请先搞清楚你为什么要买笔记本,这有助于确定你要买什么笔记本。买电脑的理由有很多,工作学习娱乐都有可能。不过买笔记本的理由只有一个,移动 使用。如果你是因为地方太小,可以用小机箱加液晶和无线键盘。无论花费大多少,绝对比笔记本便宜。如果因为你有两个地方要用,可以买两台机器,配置同步, 也比笔记本便宜。如果要考虑不断电,那更简单了,一个UPS就可以解决问题。只有多个地方要用或者移动使用,才需要考虑笔记本。而对比买电脑的理由,一般 来说,娱乐是不需要移动使用的。因此我强烈的建议那些买笔记本的理由是打游戏的朋友,买个台式机。如果因为你懒,想在床上玩,请弄个无线键盘鼠标加上液晶 电视接口,或者干脆弄个桌子专门放你的液晶屏幕。无论是效果还是价格,都会比笔记本优秀很多。
    而后我们说一下移动学习的问题,一般来说,贝壳不怎么推荐移动学习。要录音,请用MP3。要打字,请回宿舍。要计算,更不用非在餐厅或者教室里。一般来 说,要使用电脑的范围应当不会大于你的宿舍,但是贝壳倒是经常看到一些特例。因此,具体情况请自己分析,想想你是否真的需要一台笔记本。
    另外还有一种就是混合应用,外出要学习,回来要炒股,父母打游戏,老婆买东西。这种混合型的应用是实际情况中最多的一种,通常具体情况很难分析,不过请把握上述的原则。只要不要带来带去的,请尽量考虑其他方案。
    最后一种就是商务应用,无论是出于保密的原因还是出于方便的原因,贝壳都推荐使用笔记本。
    按照上面的讲法,我们推荐使用笔记本的情况基本是三种,商务应用,混合应用,移动学习,还有少量的赶时髦分子。根据这几种原因,我们可以相应的确定你应当 买哪种品牌的电脑。通常而言,商务应用的主力就是Lenovo和Dell,几乎找不到其他机器。其最主要的原因就是这两种本本的商务气质。以Lenovo 为例,他的技术是收购IBM的,因此有很多非常有用的技术。包括指纹识别,硬盘防震,超长电池和增强型电源管理。这些技术有助于你在商务活动中避免为一些 意料外的事情耗费精神,例如窃取,数据丢失,没电(这是普通本在商务应用中最容易碰到的问题)。通常而言,商务本的定位价格有两类,一类是 8000-12000,定位基本就是对着Lenovo去了。另一类是4000-8000,基本就是Dell了。Dell的电脑价格便宜,服务也还不错。唯 一问题是总部设在厦门,一旦你发生需要返修级别的问题,需要回厦门处理。一次往返的时间和价格,有点配不上它商务本的定位。不过看在价格的份上,是否有吸 引力就是见仁见智的问题了。
    做商务的同志们需要留心一类本子,通常我们称之为廉价本。价格在2000-4000之间,一般由国内的一些厂家出品。这里并不是说崇洋媚外,而是这些本 中,有相当一部分的是“看上去很美”的本子。配置也不低,和Dell本子4000的机器比也不丢人,价格却非常平易近人。但是,本子却相当的容易出现各种 小毛病。原因在于,一般生产中往往会出现一些有很小瑕疵的成品,我们称为二线产品,或者叫下线货。以这些零件拼装的电脑,价格当然便宜,也当然容易出问 题。一般而言,一流厂商一旦定位为商务本,自然会关注质量问题。如果是下线货,照例是不会用的。一旦出现质量问题导致客户损失,这无疑是拆自己招牌。但是 所谓廉价本,就是针对“坏了也无所谓”的客户的,只是可以肯定,他们不会这么宣传。如果买这种本子,一切问题自行负责。
    如果是移动学习,贝壳反到会推荐廉价本。原因在于学生本身钱就不多,多资料损坏也不会太在乎(当然,关键资料还是自己备份起来的好),和厂家折腾几次更是 可以当作磨练。用一个方正或者神舟的入门本子,3000上下就可以挺个3-4年,直到你毕业。可能会坏个一两次,不过也没有什么太大关系。这想必对大多数 学生有相当吸引力吧?当然,如果你有钱,喜欢烧一个顶极的Mac来,那也是你自己的嗜好。
    还有两类本子,贝壳分别称为鸡肋本和专用本。例如Sony的一些游戏本,双核,独立显卡,17寸,2W上下。买这种本子,要带的话不如弄个台式机背着,不 带不如弄个台式机放着。整个一个鸡肋。还有Mac的一些高端本子,就是针对图像处理和视频处理去的。你要专业到这个份上,自然会知道这些机器。你要不知 道,就是不够专业。(好——无语的逻辑——)
    最后一类就是混合应用,这是非常多的一类,也是最难定义的一类。冲着什么本子去就看你的混合定位和要求最高的一个需求了。如果整个里面混合进一个高端商务 应用,恐怕就非冲着Dell或者Lenovo去了。如果全是看电影打游戏,弄个廉价本吧。如果要不间断的炒股,建议你弄两个本——我没在开玩笑。第二个本 可以考虑采用小型上网本(坚决不推荐某品牌),价格才2000-3000。本子超小,方便移动应用。
    另外就是自配件的估计,普通用户现在推荐160G硬盘,1G内存,准备好升级2G。高端用户建议250G硬盘,2G内存,准备好升级4G。上述估计适用于2009年上半年。

2009年3月25日星期三

夜飞临北京有感

    我不是第一次在夜间坐飞机,但,我是头一次在夜间坐飞机的时候在窗口俯瞰中国的大地。不得不说,我彻底被惊呆了。
    开始的一段时间,天上有云,黑漆漆的什么也看不见。但当飞过一段时间后,我在机舱里百无聊赖中随意向外一瞥,眼前却展现出一副瑰丽的景色。飞机不知道什么时候从云层中穿了出去,大地清晰可见。一条条的街道和街灯蜿蜒纵横,将黑色的大地切割成各种形状。有的地方灯光尤其密集,有的地方则疏散一些。远远望去,好似大地上的一块块斑纹。在一块一块的斑纹中,零星点缀着白色的灯光。虽然云层已经过去,但是下面仍有少量的薄雾笼罩在天上。薄雾散射灯光,仿佛在水面上倒映了天上的银河。我凝神细看,依稀可以看到一个街道上的街灯,映照在街道上的影像。这段道路前后都没有灯,不知道是坏了,还是根本就在山中。但是三两盏灯映照在道上,形成一个独立的,小小的天地。也许这是某个少年回家必经的道路,也许这是某个老人天天散步的场所。但是,无人知晓,我,这样一个天上客,在3000米以上的高空,偷窥着这个小小的世界。

2009年3月21日星期六

三月西湖游记

嘿嘿,跑来跑去做项目虽然辛苦,但是有一个好处,那就是有空的时候可以按照当地情况跑出去旅游。贝壳今天稍稍有空,出去西湖逛了一圈。
说到西湖,其实贝壳跑了无数次了。不过住的虽然近,但是岳庙和苏堤还都没去过。没去过苏堤和三潭映月,怎么能叫去过西湖呢?贝壳今天特意去了一次岳庙和苏堤。岳庙没什么好说的,只是门票稍稍有点不爽。25,说贵倒是不贵。不过我们来接受爱国主义教育还要自己买单,这个——倒置了吧?
苏堤就在岳庙的正门过去。贝壳刚上苏堤,就有人叫。今天真够凑巧,是贝壳在浙报的一个客户,今天也是陪人出来走走,正好碰到。杭州这个地方真的不大,今天就碰到了三个缘分。今天的风景果然应了某人的话,西湖美景三月天,春雨如酒柳如烟。按照此人说法,如果今天突然下雨,我就应该碰到一位姓白的女生借伞—— 问题是,我有伞阿。幸好今天没有下雨,否则就不是西湖美景,而是计算机产品的末日了。贝壳今天出门,就带了那台HPmini1017。不是多心哦,下面就用上了。
问题,苏堤中间有个醉什么亭,是醉什么呢?那个字很像是书字,贝壳没仔细看,差点还以为真的是醉书亭。后来有位老人就着话题讲起了古,这个字不是书字,而是春字。哦?贝壳掏出HPmini,架上蓝牙和GPRS,上网一查。这位老先生还非常有名(http://talkdream.blogbus.com /logs/3839413.html),在google上找"苏堤醉春亭",有至少两篇关于这位先生的blog。不过贝壳就着往下一看,差点笑喷出来。这个blog是06年写的,到现在已经有两年半了。这位老先生的讲话线索一点都没有变。浪漫的情人堤后面果然是关于矿泉水的问题,大家还是一如既往的一哄而散。贝壳凑上去,问问这位老先生的底细。他应当是住在西湖附近,以前经常跑到苏东坡纪念馆去看。后来扩建,原来的介绍内容全都变了。于是跑到苏堤上给人科普,顺便讨点矿泉水费。据说03年非典事发前还上过中央4套的节目。难怪他讲的都是苏堤,醉春亭,三潭映月呢。要跑上来一个阿炳,别说记得年代,就是阿炳的原名都未必记得。不过这位老先生毕竟是免费科普,矿泉水费也不是强要,也不是天天来。有缘的碰到没缘的拉到,碰到也算是个缘分吧。
贝壳在听完科普后,立刻上推,更新推,然后再上gtalk,散播八卦散播爱。(MSN上被我冷落的同学们,不是贝壳偏心,TMD只要用GPRS就打不开MSN)
而后,贝壳在花港观渔走了一圈,出门,发现——该死的杭州又堵车了。偏偏从苏堤南面到天目山路的所有车都会被堵,咋办呢?这个时候,贝壳就充分发挥了自己曾经被忽悠过所练出来的——地图通。查了一下google map,从龙井村过去不堵车。记得从龙井村过去是坐游三,到玉泉,玉泉坐15,到天目山回家。好,就这么决定了。
于是贝壳出了西湖,往西走。向着茫茫群山就走了进去...当然,走没多远就看到了游三车站(大家请记住,这里的度量衡是以贝壳的标准衡量的,一起走过路的同学应该深有体会,尤其是高中同学,要是您也学着走,脚抽筋贝壳恕不接待投诉)。一路上山色真好阿,路旁还有不少喝茶的茶亭,当然,价钱估计便宜不了。实话说,贝壳很想带某同学的朋友到这里,直接自己泡茶自己喝,估计也很爽吧。估计游三路是杭州所有线路中山色最好的线路,有兴趣游览的同学一定不要错过!
最后么,当然,贝壳回家了,于是有了这个blog,事情基本这样结束。
真的结束了么?第三个巧合呢?
贝壳的一个朋友和贝壳说,她的一个朋友是贝壳的blog读者!OMG,今天是什么日子?

2009年3月20日星期五

要死的磁盘挂载

follow了我推的人应该都看到了,从昨天到今天,贝壳都在狂找U盘挂不上去的原因。贝壳的两个本子,一个T61一个HPmini,明明都装的Debian testing,两边的配置都一样,怎么就是一个可以挂载U盘,一个就是无权限呢?
贝壳首先进行了包检测,是否少装了包,结果没有。然后再进行了配置对比,也没有发现差异。而后,贝壳祭出了绝技,strace和dbg的调试。一跑,贝壳傻眼了。一台机器是AMD64,一台是i386。CPU和内核完全不同,导致整个行为没有一点可对比性。难道无法挂载是因为CPU的问题?
在贝壳长达10多小时的排查后,贝壳无意中打开了HPmini的fstab文件,发现一个让人绝倒的事实。贝壳的HPmini是从u-live上面镜像过来的。因此继承了u-live上面LABEL=live-ntfs /的设置。而亲爱的gnome-mount是会启用这个文件的——
结果,这就是贝壳悲惨世界的原因——

2009年3月17日星期二

上网本,UMPC,手机的混血

贝壳最近又手痒想败家了。对象是上网本,UMPC,或者HTC G1。不过以上三者都不怎么完美,要能结合起来就非常有诱惑力了。要是价格低点那就更——
不说瞎想了,就说说上网本,UMPC,G1的概念和对应客户。以及贝壳为什么想要混合以上几个东西。
UMPC是指和电脑具有类似构架,但是更为小型的电脑设备。当然,官方有更严格的规定,例如最低分辨率,触摸屏等等。UMPC和上网本的区别主要就是官方的几个内部规定,满足就是UMPC,不满足则是上网本。但是对贝壳来说,不管这些,好用就好。贝壳希望的机器,具有7寸的触摸屏幕,对应的键盘。这样的话,贝壳可以用键盘来操作电脑(熟悉的人应该记得贝壳的快捷键使用和单手操作电脑的绝技吧),并且触摸屏可以剩下一个触摸板的空间。
但是,仅仅以上条件却不能让贝壳满意。为什么呢?首先是因为体积。现在的上网本经典大小是230x160x30,这么大的一个家伙,就算带出门也够当板砖用了。其次,这东西不支持SIM卡插槽,这造成了非常麻烦的问题(当然,支持恐怕是更麻烦的问题)。贝壳无法通过这个本来直接上网,打电话,管理电话。
其实,后者的特性主要是针对HTC G1去的。现在的手机基本已经相当的智能,但是却有两个先天的问题。一个是没有能让人用起来很爽的键盘!这样写起程序来非常费劲(旁:汗—— ..-_-||||,手机上还不忘编程,真TMD是程序员)。其次是构架不同于经典的x86构架,扩展和使用程序都非常不方便。
如果一个本子,有200x150x30的大小,0.8kg上下的重量,支持SIM卡插槽,支持触摸屏幕,使用SSD硬盘。还可以标准的安装debian,使用linux下的各种程序。那基本就是贝壳梦想中的本子。当然,如果价格能在3000以下更好....贝壳可以拿这个本子到处跑(虽然体积还是个问题),到处写程序看电影看小说都不成问题。还可以打手机(那可以直接从thunderbird中拨出阿~~),GPRS上网(TMD混蛋中国移动,现在 3G还没出来呢)。
当然,现在很多手机基本也可以实现上面的功能,除了一个标准尺寸的键盘外。但是可惜的是,这些手机的系统都不是标准的系统,一般用户是无法重写和定制的。如果按照刚刚的方案来定制,那么整个机器上跑的就是一个完整的系统,甚至可以跑一个XP起来。稍微定制一下就可以当手机专用系统用了。像贝壳这样的编程人员更可以方便的给手机编程,来扩展手机的功能。
还有更好的一个方案,就是将手机回归原始。使得整个手机除了电话和短信外,什么功能都没有。而后给手机指定一个标准接口,在需要进行复杂应用的时候,直接插在上网本的外面当外接设备使用。这样手机的屏幕和键盘都可以极度精简,体积小巧方便使用。接入电脑后,非常方便的可以浏览网页,观看电影等等。其实本质上就是一个强大的手机(当然,要用经典构架)外接一个大型(相对大型)的显示器和键盘系统。

2009年2月16日星期一

Remember The Milk

这是篇广告文。
不知道你有没有听说过GTD?我长话短说介绍一下,如果你每天都有成堆的事情要做,经常忘记做什么事情,每天都在焦虑是否有什么被忘记了。或者你经常被意外的事情打断,无法顺利工作,甚至忘记正在做什么,那么你真的需要好好看一下Get Things Done这本书。这本书的主旨在于推荐你一种生活方式,一种不需要焦虑是否忘记了什么的生活方式。他的步骤很简单,最少只需要纸和笔就可以进行(当然,贝壳推荐用电脑)。如果你需要做什么,用纸记录下来。做好一件事情,用笔划掉。每隔一段时间,回顾一下,什么事情还没做,什么事情拖沓了,哪些事情应该先做,哪些事情应该后做。简单来说,就是Todo List。
那么Remember The Milk(下面简称RTM)好在哪里,值得贝壳特意推荐呢?事实上,贝壳在GTD上换过不少工具。Mozilla Sunbird,太庞大,要用的时候老去开笔记本?gtodo,很小巧,问题大同小异。Rainlendar,很漂亮,显示还不错,Todo List就碰到了一样的问题,贝壳总不能天天开着笔记本走路吧(虽然实际情况差不多)。Google Calendar,倒是非常好,行事历丰富,支持短信提醒,同步选项众多。Outlook,Sunbird,Rainlendar,甚至可以直接同步到手机上(不知道的同学,请参考GooSync)。但是有个致命缺陷,无法将事件标记为完成。这样要表示完成就只有删除事件,导致无法回顾。因此,贝壳最终选择了RTM,配合Google Calendar使用。
贝壳已经将RTM设定为主页,这是贝壳的第二个主页,头一个是iGoogle,可惜做到后来太杂乱无章,废弃。每天贝壳空下来了,跑到RTM上,看看今天需要完成什么事情。如果有突发事件(例如你在写论文的时候突然需要找一些资料,有人突然说贝壳来一下),那么评估一下突发事件的状态。一般来说,如果突发事件没有上下依赖关系,没有回顾的必要,没有突发中的突发(这是最主要的),那么完全可以不用记录。否则你需要先记录突发事件,将他标记为最优先。如果不这么做,当再次发生突发事件的时候,你要么补充记录上一个的,要么就会忘记事情。一般来说,10分钟以内可以处理掉的事情是很少被再次打断的。当然,如果可行,贝壳推荐突发-延后的处理方式。就是说,当突发发生后,将突发要处理的目标记录下来(例如,12点前去客户那里一下),标记为最优先,然后接着处理当前的事务。这样一般只会中断1分钟的思考,不会造成记忆的混乱,你的工作可以顺利的继续下去,不会受到各种因素的干扰(当然,必须先处理例外,例如:贝壳来一下),也不需要担忧忘记事情。
如果在不能开机的状况下,例如路上,贝壳优先考虑使用RTM的mobile版本。如果不行,那只有记录在写字本里面,回去补充。而后,每天晚上,贝壳会翻看一下今天的记录,看看明天有什么需要做的事情,哪些优先,哪些可以推迟。如果有空,可以做什么计划好的事情。等等等等。那么同学们会问了,Google Calendar呢?
GC可以和RTM结合,从而看到RTM的事件列表(方法就自己gg吧,贝壳不废话了)。当然,这只是有限的结合,意义并不大。GC真正的意义在于方便的和手机同步,从而对固定议程,重复议程有很好的显示和提醒作用。例如记忆生日,提醒周报,记忆飞机等等。这个和RTM的GTD并不冲突和重复。

2009年2月11日星期三

磁盘对倒迁移

贝壳的本本坏了。
Acer的质量真不怎么的,只是正常使用而已,买来不到一个月就返修。费时费力不说,还差点因为IWT的问题无法修理而要付钱。结果刚刚过保半年,总共买了一年半后,坏了。
趁机问老板要了一台ThinkPad,虽说联想的做工不如IBM,不过依旧非常舒服,不愧是商务王者。但是,贝壳原来在笔记本上配置的复杂到死的系统,要是在新机器上一一重装的话,费力先不说,项目肯定是无法按期完工了。
贝壳修旧机器的时候,拆下了硬盘和电池。这里顺便提醒送修笔记本的同志们,记得拆下硬盘和电池。硬盘是你机要数据的所在,将来要恢复系统就全靠他了。而电池——到时候要是发现电量少了,这种东西谁都说不清楚。所以还是拆下来的好。那么,最低限度的,要从旧硬盘上读出数据,否则很多东西完全无法运作了。所以——贝壳找人借了一个移动硬盘盒。嘿嘿,这种东西可以将笔记本的SATA转换成USB使用,从而在新电脑上直接读取旧电脑数据。
为了不重装电脑,贝壳决定在新电脑上直接使用旧电脑的系统。将旧电脑的数据整个复制到新电脑上,就是俗称的磁盘对倒。下面是一个关键的问题,是重建文件系统,然后复制数据好呢?还是直接镜像整个系统?如果是复制数据,相对的数据清晰干净,但是容易发生一些莫名其妙的错误。如果是整个镜像,对了错一并带入新系统。贝壳在这里选择比较保守的方案,镜像整个磁盘。
首先贝壳从U盘启动(刚刚做了U live debian,冲着拯救去的系统,不知道是说幸运呢,还是乌鸦嘴呢),而后删除原有磁盘的所有分区,输入dd if=/dev/sdc of=/dev/sda,将整个磁盘复制到新电脑上。这里注意,贝壳没有设定区块大小,因此速度比较慢,正确的设定大小有助于加速复制。贝壳的数据是 120G(因此向公司申请的电脑最低是120G硬盘),复制速度是10M/s多一点,复制时间大约是3小时15分钟。从晚上9点一刻一直到晚上12点半。在完成复制后,直接重启,从硬盘启动Linux,成功!
在几乎没有任何干预的情况下,Linux就可以开机成功,不得不说这给了我很大信心。然后我去启动windows——不动。
贝壳被迫回到了Linux,仔细调试驱动,设法最快的弄出一个可用的系统。下面详细记录了ThinkPadT61上安装Debian的全过程,有兴趣的可以看看。至于六牙四皂和某猫小姐就可以跳过了。
首先贝壳调整了复制后的硬盘上的分区。由于分区表是按照120G的时候计算的,因此新硬盘上的分区使用不足。启动gparted调整大小后,sda6占用了全部新增空间,暴增到200G。而后贝壳开始查看pci设备和驱动。

# lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub [8086:2a00] (rev 0c)
00:02.0 VGA compatible controller [0300]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller [8086:2a02] (rev 0c)
00:02.1 Display controller [0380]: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller [8086:2a03] (rev 0c)
00:19.0 Ethernet controller [0200]: Intel Corporation 82566MM Gigabit Network Connection [8086:1049] (rev 03)
00:1a.0 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 [8086:2834] (rev 03)
00:1a.1 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 [8086:2835] (rev 03)
00:1a.7 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 [8086:283a] (rev 03)
00:1b.0 Audio device [0403]: Intel Corporation 82801H (ICH8 Family) HD Audio Controller [8086:284b] (rev 03)
00:1c.0 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 [8086:283f] (rev 03)
00:1c.1 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 [8086:2841] (rev 03)
00:1c.2 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 3 [8086:2843] (rev 03)
00:1c.3 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 4 [8086:2845] (rev 03)
00:1c.4 PCI bridge [0604]: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 [8086:2847] (rev 03)
00:1d.0 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 [8086:2830] (rev 03)
00:1d.1 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 [8086:2831] (rev 03)
00:1d.2 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 [8086:2832] (rev 03)
00:1d.7 USB Controller [0c03]: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 [8086:2836] (rev 03)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev f3)
00:1f.0 ISA bridge [0601]: Intel Corporation 82801HBM (ICH8M-E) LPC Interface Controller [8086:2811] (rev 03)
00:1f.1 IDE interface [0101]: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller [8086:2850] (rev 03)
00:1f.2 SATA controller [0106]: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller [8086:2829] (rev 03)
00:1f.3 SMBus [0c05]: Intel Corporation 82801H (ICH8 Family) SMBus Controller [8086:283e] (rev 03)
03:00.0 Network controller [0280]: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection [8086:4230] (rev 61)
15:00.0 CardBus bridge [0607]: Ricoh Co Ltd RL5c476 II [1180:0476] (rev b6)

下面我们可以看到,我们需要驱动的设备主要有有线网卡,无线网卡,声卡,显卡。下面我们针对这些设备一一查看。

# lspci -s 00:02 -v
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c) (prog-if 00 [VGA controller])
Subsystem: Lenovo T61
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at f8100000 (64-bit, non-prefetchable) [size=1M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
I/O ports at 1800 [size=8]
Capabilities: [90] Message Signalled Interrupts: Mask- 64bit- Queue=0/0 Enable-
Capabilities: [d0] Power Management version 3
Kernel modules: intelfb

00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
Subsystem: Lenovo T61
Flags: bus master, fast devsel, latency 0
Memory at f8200000 (64-bit, non-prefetchable) [size=1M]
Capabilities: [d0] Power Management version 3

# lspci -s 00:00 -v
00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)
Subsystem: Lenovo T61
Flags: bus master, fast devsel, latency 0
Capabilities: [e0] Vendor Specific Information
Kernel driver in use: agpgart-intel
Kernel modules: intel-agp

# lspci -s 00:1b -v
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)
Subsystem: Lenovo ThinkPad T61
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at fe020000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [130] Root Complex Link
Kernel driver in use: HDA Intel
Kernel modules: snd-hda-intel

# lspci -s 00:19 -v
00:19.0 Ethernet controller: Intel Corporation 82566MM Gigabit Network Connection (rev 03)
Subsystem: Lenovo ThinkPad T61
Flags: bus master, fast devsel, latency 0, IRQ 1272
Memory at fe000000 (32-bit, non-prefetchable) [size=128K]
Memory at fe025000 (32-bit, non-prefetchable) [size=4K]
I/O ports at 1840 [size=32]
Capabilities: [c8] Power Management version 2
Capabilities: [d0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable+
Kernel driver in use: e1000e
Kernel modules: e1000e

# lspci -s 03:00 -v
03:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)
Subsystem: Intel Corporation Device 1010
Flags: bus master, fast devsel, latency 0, IRQ 1273
Memory at df3fe000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [c8] Power Management version 3
Capabilities: [d0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable+
Capabilities: [e0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number e3-9e-03-ff-ff-e0-1d-00
Kernel driver in use: iwl4965
Kernel modules: iwl4965

仔细看看,其实显卡已经被默认驱动了,无法启动X是因为xorg,暂时不去理他。声卡驱动正常,有线和无线都正常。所以,贝壳首先接上了有线——果然,系统可以联网了。
而后,贝壳设置无线上网,但是——不起作用。经过仔细的查找,贝壳发现这么一件事情。虽然系统中有无线网卡驱动,但是还需要一个firmware来驱动网卡工作。这个包的名字叫做firmware-iwlwifi,安装后,系统就可以正确的使用无线了。
当然,其中还要修改一些系统配置,例如,贝壳原来的网络设备名称叫做ath0,现在叫做wlan1。首先是因为iwl驱动和madwifi的命名规则不一样。但是之所以叫做1,是因为udev的关系。打开/etc/udev/rules.d/70-persistent-net.rules,里面有很多网络设备的MAC和名称,删除后就重命名了。贝壳删除了记录,而后/etc/init.d/networking restart。系统成功的修改了名字。
下面是显卡和声卡,贝壳先搞显卡问题。打开/etc/X11/xorg.conf,删除其中指定的驱动名称,fglrx,换成intel。系统就可以成功的引导到X下面,而贝壳的系统DRI库高于7。0(testing),于是设定了以下两个项目。
Option "RenderAccel" "on"
Option "DRI" "true"
进入X后声音还是不对,贝壳运行了一次alsaconf,问题解决。
而后,贝壳仔细查找了系统驱动模块,发现kvm-intel和k8-temp没有正常加载。经过查找,k8-temp的替代模块叫做acpi- cpufreq,已经被自动识别和加载。使用cpuinfo可以看到系统经处于节能模式,速度800MHZ。而kvm-intel则是原来kvm-amd 的替代模块,用于加速kvm(qemu)的运行速度。这个软件经常被贝壳用来虚拟windows。经过贝壳的查找,是BIOS中关闭了虚拟化的关系。此时可以在系统中看到如下内容,但是虚拟化无法执行。

# grep vmx /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida

去BIOS中,打开虚拟化设置(默认关闭),重启,再试?没用!
原因是,这个选项修改后,必须彻底关机才能启用。仅仅重启是没有用的,奇怪吧?无论如何,关机,拔电源,接上,开机,系统可以正确的虚拟windows了,速度很快。
==,windows不是不能启动么?经过贝壳的实验,这次最奇怪的事情来了,windows可以在虚拟机上跑,但是无法在实际机器上跑——这还是个实际的windows,生产环境——
经过贝壳多次测试,还是如此。。。
下面贝壳说说一些细节问题。虽然系统正常的启动了,但是很多功能还是有问题。例如功能键不起效,亮度无法调节等等。下面一一说明怎么处理。
睡眠和待机的按钮一直起效,触摸板关闭需要添加以下一项。

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizScrollDelta" "0"
Option "SHMConfig" "true"
EndSection

注意最后一项SHMConfig,开启后可以用Fn+F7关闭触摸板。
而后安装hotkey-setup,很多功能键都可以了。剩下两个最主要的功能,音量和亮度。音量贝壳用自定义热键来调整了Win+Down->aumix -v-10,Win+Up->aumix -v+10。而亮度,贝壳自己做了一个小程序解决。

# cat /usr/local/bin/brightness
---------------------/usr/local/bin/brightness-----------------------
#!/bin/bash

LCD_DEVICE=/proc/acpi/video/VID1/LCD0/brightness

CURRENT=$(cat "$LCD_DEVICE" | grep current | sed "s/current: \(.*\)/\1/")
if [ -z $1 ]; then
echo $CURRENT
else
MOVE=$1
let 'TARGET=CURRENT+MOVE'
echo $TARGET > $LCD_DEVICE
fi
-------------------------------end------------------------------------

将这个文件赋予执行权限后,记得让用户可以sudo执行,否则普通用户是无权修改/proc/acpi/video/VID1/LCD0/brightness文件的。
在安装好这个文件后,可以试试看,brightness显示当前亮度。brightness +...增加亮度,brightness -...降低亮度。而后绑定Win+Left->brightness -10,Win+Right->brightness +10。现在就可以用快捷键来修改亮度了。
下面还有一个很容易被忽视的问题,电池充电管理和磁盘抗震,首先,安装hdapsd包,他会自动安装一个内核模块补充。而后将/etc/default/hdapsd中DISK修改为sda(多数都是sda吧?),运行以下指令加载模块。
modprobe tp_smapi
modprobe hdaps
/etc/init.d/hdapsd start
而后,我们可以如下调整电池开始充电电量
echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh
echo 90 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh
这样只有低于40的时候才会充电,充电到90停止。根据IBM的文档,将电池电量保持在30-85%有利于增加电池寿命。贝壳截止在90,是因为会减少电池充放次数,从而很好的保护电池。当然,开始的时候本本电池很好,所以一点电也可以顶很久,于是可以设定低点。后来电池糟糕了,就必须设定高百分比开始充,这样会加速电池损耗。因此电池的寿命是越糟糕消耗的越快的。
另外,磁盘抗震可以通过hdapsd和相应模块来驱动,但是需要下载内核源码,加入补丁才可以真正起效。贝壳不高兴打补丁,而且据说2.6.28内核就会加入这个补丁,因此——等新内核吧。
最后,大家可以加入一个比较好玩的功能,笔记本的指纹识别。首先从http://www.debian.org/distrib/packages搜索 thinkfinger,将libthinkfinger0,libpam-thinkfinger,thinkfinger-tools依次下载安装。而后就可以用tf-tool --acquire来收集指纹。一般来说,普通用户的收集总是失败,可以以root收集了放到普通用户目录中用,只需要运行tf-tool --acquire $USER/.thinkfinger.bir,而后chown就可以了。另外,要使用指纹验证登录机器还需要修改pam模块,修改如下。
将/etc/pam.d/common-auth文件的原本内容注释,修改为以下内容。
auth sufficient pam_thinkfinger.so
auth required pam_unix.so nullok_secure try_first_pass
另外,如果你使用的是xdm,进入系统后发现有些变量缺失的话,可以试试看如下修改(/etc/pam.d/xdm):
# $Id: xdm.pam 189 2005-06-11 00:04:27Z branden $

auth requisite pam_nologin.so
auth required pam_env.so
auth required pam_env.so envfile=/etc/default/locale
session required pam_limits.so

@include common-auth
@include common-account
@include common-session
@include common-password
掉换上下的顺序,事情就OK了。
经过上述的动作后,贝壳可以在新的笔记本上使用老系统的所有东西。除了windows无法在真实机器上启动之外——

参考资料:
[1].Installing Debian Etch Linux on Lenovo Thinkpad T61.http://ejahn.net/Members/eric/stories/t61_etch
[2].Installing Debian Lenny on a ThinkPad T61.http://www.thinkwiki.org/wiki/Installing_Debian_Lenny_on_a_ThinkPad_T61
[3].Etch_on_Thinkpad_T61.http://www.klabs.be/~fpiat/linux/debian/Etch_on_Thinkpad_T61.html
[4].Lenny_on_Thinkpad_T61.http://www.klabs.be/~fpiat/linux/debian/Lenny_on_Thinkpad_T61.html
[5].Linux on the Lenovo T61.http://pdis.rnw.nl/~hansl/linux/T61/T61.html
[6].Tp smapi.http://www.thinkwiki.org/wiki/Tp_smapi#Battery_charge_control_features
[7].debian etch 简要安装指南 2007-1-26.http://www.linuxsir.org/bbs/thread287473.html
[8].Debian/testing简要安装记录.http://hi.baidu.com/airpot/blog/item/7e72b0b4d05de3708bd4b2d9.html
[9].Debian 笔记本驱动安装.http://www.unifiedkernel.com/forum/viewtopic.php?f=5&t=10

2009年2月8日星期日

回京感想

昨天临时接到通知,贝壳周五(二月六日)要去北京出差。具体情况不多说了,不过——贝壳要回老家了。可一年半没回去了阿——
早上5点半从杭州的宿舍出来,赶7点半的飞机。打车走了快一个小时,杭州的机场确实也够远的。师傅紧赶慢赶总算给我提前40分钟赶到了机场,离停止办理手续只有10分钟。这点住北京就很有优势,出门10分钟就到机场。6点半起床,赶8点的飞机绰绰有余。飞机很顺利,事情很顺利,贝壳就不多废话了。唯一的插曲就是贝壳的linux不支持投影仪,搞了半天总算在老板的机器上成功演示。
别的不多说了,就说说北京的风景吧。多了一堆莫名其妙的建筑,其中多数是政府机关的办公楼。贝壳原来认得的地方全都不认得了,鼓楼,宣武门,东直门,也就长安街还保持了一点原来的风景——当然,不算那个巨蛋的话。东直门改的面目全非,斜街那里完全看不到了,建了一个什么汽车中心。西单图书大厦已经快7年没去了,门口那堆书的摆设还在,但是被围起来不能坐了。西单文化广场被修的光怪陆离,完全看不出原来的样子。灵镜胡同没去,不过想必也不复旧观。
贝壳干完事情,被放到了丽都。本来准备和几个高中同学聚聚,可无奈前天才刚刚接到通知。刘江陵同学和佟国美同学非常义气的回了消息,不过很遗憾的,都没赶上机会。李鸿国比较忙,就不说了。老猫直到贝壳快闪了才有反应,够迟钝的。贝壳最后无奈的决定,不去顺义了,直接去机场,第二天可是8点的飞机。丽都旁边贝壳只认得915,那是去顺义的。所以贝壳弄了部车去机场,走的是附路。
机场附路,算算可是有年头没走了。自从在牛栏山上学以后,京顺路通了,附路修路。贝壳就主要坐915去北京,很少走附路了。现在的附路路面都翻修过,比原来顺了很多。运河上的桥还是那个老样子,不过有一段因为要修轻轨,因此被重修了。到了机场,贝壳碰到了一件非常囧的事情,贝壳被锁在家门外了。算算都26的人了,居然还会碰到这种问题。家门口等家长回家,又不是小学生。不过无奈的,贝壳就碰到了这种事情。老妈去上海探亲,老爹上班。大老远的从上海来北京出一次差,居然被锁在了自己家门口。无奈,贝壳出门转一圈吧。
从家里出来,贝壳绕着机场走了一圈。发现机场多了很多小店,建筑也被翻修过了。想必是为了迎奥吧,机场这里是最敏感的地方。唯一没变的就是机场高速的收费站和贝壳的破窝。呆在小时候常爬的假山旁边,不出意外的发现当初奋斗(真的是奋斗,贝壳小时候很胖)很久才能爬上去的山顶差不多就是一伸手的距离。公园的松树还在,前面的大广场却没人跳舞了。工人文化俱乐部(原来唯一的作用就是放电影,我们过去常常在这里看)被改成了XX货真价实的俱乐部,上了金色的招牌,不过恐怕就和工人无关了。最大的变化是贝壳的小学,机场二小,永远的消失了,变成了94中机场分校。估计是机场这里去94中的太多了,干脆弄个分校过来,省得费力。家后面的一排树全推了,改成了通向三号航站楼的大道。
坐在家门口的公园旁边,贝壳感觉五味沉杂。这么多年在外面,始终觉得自己是个过客。没想到到了自己家,才发现家已经不再是从前的样子,自己还是过客。上次出差,呆了两个月。这次出差,呆24小时。贝壳始终来来去去,来了又走走了又来,到底哪里才能停下呢?

2009年1月19日星期一

24点计算原理和程序

最近开心上狂算24点,于是贝壳搞了一个24点计算程序,并且说明原理。
我们将24点问题一般化,变成一个搜索问题。假定从一个初始表开始,里面有一些原子。我们定义一个操作,结合。每次操作任意从中选择出两个(或者以上)原子,使用算符连接,成为一个新的原子。那么,一般来说,24点就是计算所有可能的路径,从初始表开始,持续进行结合,直到只剩下一个原子,并且对这个原子求值得24。
有人可能在算符优先级上想不开,其实不用考虑这个问题,每次求值的时候,按照求值顺序优先就可以。你想到的另外一种优先级可能,会在穷举的时候被列举出来算掉,不用担心遗漏。
同时,算子必须是两目以上算子,因为单目算子可以持续作用于同一个对象,因此原子表中的原子个数并不严格单调减少,造成无法肯定路径收敛于有限步骤上。并且,如果允许单目算子,那么我只需要求导和阶乘就可以对任何数字求24点。
((a')!+(b')!+(c')!+(d')!)!=24
因此,单目算符是没有意义的。
另外,注意算符分可交换和非可交换的。例如:a+b=b+a,但是a-b!=b-a。如果不注意这点,倒是不会漏算,但是会造成搜索空间增大,并且有重复结果。
以下是24点计算程序,python版本的。有兴趣的朋友可以用scheme重写,相信会更简洁有效。回头会用django封装一下,做成网页给大家玩玩。

#!/usr/bin/python
import sys

symbol_list = [
("%s+%s", True), ("%s-%s", False),
("%s*%s", True), ("%s/%s", False), ("%s**%s", False),
# ("min (%s,%s)", True), ("max (%s,%s)", True),
];

def diff_seq (length):
for i in range (0, length):
for j in range (i + 1, length):
yield (i, j);

def get_less_state (input_state):
for i, j in diff_seq (len (input_state)):
temp = input_state[:];
del temp[j];
del temp[i];
for s in symbol_list:
rslt = s[0] % (input_state[i], input_state[j]);
rslt = "(%s)" % rslt;
temp.append (rslt);
yield temp;
temp.remove (rslt);
if s[1]:
continue;
rslt = s[0] % (input_state[j], input_state[i]);
rslt = "(%s)" % rslt;
temp.append (rslt);
yield temp;
temp.remove (rslt);

def do_node (input_state, output):
for i in get_less_state (input_state):
if len (i) > 1:
do_node (i, output);
continue;
try:
rslt = eval (i[0]);
except:
continue;
if rslt == 24.0:
output.add (i[0].replace (".0", ""));

if __name__ == "__main__":
rslt = [];
for i in sys.argv[1:]:
rslt.append (float (i));
output = set ([]);
do_node (rslt, output);
for i in list (output):
print "%s=24" % i;

2009年1月11日星期日

论同时的双系统--准虚拟对双系统的进一步扩充

熟悉贝壳的人都知道,贝壳是个linux爱用者,不过因为工作关系,经常要使用windows。贝壳在自己的笔记本上使用了linux/windows混合双系统,并通过共用磁盘的方式共享数据,解决这个问题。但是长期的使用表明,这种解决方案存在几个巨大的瑕疵。首先是系统切换时间常,因此长期在一个系统中工作,而很少触及另外一个系统。其次是稳定性差,windows下一旦崩溃,进入linux后就需要检测数据盘,80G的数据慢慢扫描,感觉晕到死。那么是否有一种方案,能够同时使用两个工作级系统(注意,不是实验级,贝壳成功的在windows下的vmware里跑了一个oracle,这个可以说是实验级的典范。然而工作级系统的要求和实验级完全不同)。
从系统发展史的角度来说,我们可以预见,将来的系统将是脱离硬件的。首要的原因就是和硬件不相匹配的各个层级的计算能力需求。现在系统发展有两个极端,一个是虚拟机,试图将一个硬件整体分离,运行多个系统。另一个是高性能集群,试图将多个硬件合并,运行一个系统。从根本上说,这是因为高性价比的硬件集中在了一个性能区间,而实际的性能需求却是完全分离的,因此我们才会出现如此两类完全背离的需求。而现在有大量宝贵的人力浪费在了系统和硬件结合,系统稳定性问题上,这无疑是对将来发展的一个巨大瓶颈。虽然无法预知将来的技术发展会以何种方式解决这个问题,然而可以预见的是,解决硬件和性能的背离将是人类计算机发展史上一个重要的里程碑,解决这个问题的人必定会在计算机历史上留下重重的一笔。
同时,更进一步,贝壳揣测,将来的解决方案将是系统硬件调度/驱动和系统软件管理分离。一个软系统拥有一个用户表和一个硬件表,硬件表上写他可能有10个键盘,两个显示器,或者一堆其他设备。系统借助某个可信方案,管理了一系列虚拟抽象设备和真实设备形成的映射。作为系统层以上的软件,我们只要关心如何操作这个虚拟设备即可。而实际上,我们可以通过管理参数和对应关系实现各种需要。例如我们可以将多个机器的硬件管理核心加入一个系统,形成集群。或者我们可以在一个机器的硬件管理核心上加入多个系统,形成虚拟机。这个基本是分布系统的观点。如此一来,系统层软件就无法得知也无需得知自己是在到底运行在什么环境下。只是这个系统设计方案对高性能要求的子系统(主要是显卡)相当不利。
从揣测回到现实,为了实现一个工作级系统(幸好,还不是工业级),我们需要为系统制定一些评判标准,以判别各个方案的优劣。我们首先能想到的评判标准就是速度,一个慢吞吞的系统解决方案是没有任何实用价值的。当然,这个速度是有差异的,可能是linux快一些,windows慢一些,或者相反。我们假定实际的需要是windows快一些,因为linux可以通过定制进行加速。
我们的第二个评判标准就是稳定性,经常会崩溃的系统不比慢吞吞的系统好到哪里去,甚至会更加让人讨厌。虽然工作级系统并没有工业级那样高的要求,然而高负荷稳定,宕机平均频率低于3天/次还是要保证的。而后我们还希望两个系统可以做到数据互通,即两个系统间的数据尽可能的共享,至少要做到文件和邮件的共享。最后,我们希望解决方案简单易用,便于实施和维护。
而后,我们列出了一个原始方案,和以下几个改进解决方案,并给出优劣评价,谨供大家参考借鉴。同时我们在其中还补充了一些无法实际解决问题的虚拟化解决方案,并且说明无法使用的原因,供适合的人自行选用。
原始方案,windows+linux+数据分区。此种方案是最中规中矩的,性能最高的方案。具有对硬件最好的支持,最容易的维护。如果需要运行游戏(尤其是魔兽,WOW),这也是唯一可行的工作级方案。稳定性评价属于尚可,主要由于ntfs在linux的稳定性并不好,ext3在windows需要使用非官方驱动,和某些(就是avast)驱动不兼容。数据互通比较方便,通过数据分区可以轻松的共享文件和邮件。
windows虚拟方案,vmware+虚拟分区。这种方案是改进方案中唯一可以跑游戏的,因为虚拟机随时可以关上。性能上满足windows快 linux慢的要求,虚拟系统显示性能良好,也可以通过文件共享部分的解决数据共享问题(文件共享方便,邮件共享困难)。稳定性很好,基本没有什么不稳定的问题出现,操作和维护都不困难。然而之所以一开始这种方案就被排除在外,主要是因为这种方案无法让linux驱动实体硬件,无法通过机器启动。这样也许对一些跑起来玩玩的人或者是内核工程师/测试员比较有用,然而如果要在linux里面进行大量工作,编译程序,运行服务,这种方案就力有未逮。因此这个方案可以说是一个实验级方案,而非工作级。
windows虚拟方案,vmware+实体硬盘。速度一般,windows快linux慢,基本和上面一个方案一样,唯一的区别就是linux也可以被实际驱动。然而这也成了整个方案的最大败笔,因为linux的驱动灵活性不如windows,因此无法经受这种系统切换的动作。举例来说,真实的机器上,硬盘是sata的,作为sda识别和使用。而虚拟机上则是IDE的,被识别成了hda。于是启动环境一变,就需要修改大量配置来调和这个问题。又例如,在真实机器上,X使用fglrx驱动,而虚拟机下面要用mesa。如果我在/etc/xorg.conf中不指定驱动,那么真实机器的驱动也会变成 mesa,导致性能下降。如果指定驱动,又会导致虚拟机内X无法运行。诸如此类的问题林林总总,需要大量细节修正,因此维护复杂,稳定性差,不建议正式使用。在贝壳机器上更严重的,出现了虚拟机内和虚拟机外争抢数据分区的状况,这种情况下数据分区实质是被当做盘阵用了。使用非专用的磁盘作为底层共享存储,并在上面运行ext3系统,这是及其危险和愚蠢的。
linux虚拟方案,xen。速度超快,但是上来就在贝壳的机器上暴出几个问题,因而没有继续测试。首先是安装xen后x无法启动,出现fglrx驱动无法加载的状况。其次是xen要求使用虚拟盘启动,可贝壳经常需要跑到windows下面打游戏。因此在简单测试后被剔除出局。感觉这种方案的最大问题在于配置管理太过复杂,debian下面已经很轻松了,只需要安装对应内核,使用工具建立虚拟机,但是依旧感觉麻烦到一塌糊涂。相信这种方案在专业级服务器领域应当有不俗表现。
linux虚拟方案,openvz。这种方案压根就不适合贝壳的状况,因为这个虚拟方案要求宿主和客户必须是同一CPU同一系统(不要求同一linux发行)。主要用于希望将一个主机切分成多个独立的同构主机,以达到分离管理的目的(例如业务服务器和数据库服务器分离)。需要做大型网络管理/虚拟主机业务的人可能会对这个虚拟方案感兴趣。
linux虚拟方案,vmware。速度一般,linux快windows慢,视频效果不错。vmware毕竟是商业公司,视频驱动挺齐全的。但是内核驱动的编译麻烦到死,首先是要求编译器版本和主内核编译器版本一致,于是贝壳去搞了个gcc-4.1,然后连接了上去。下面又是内核头定义出现版本差异,搞到现在还没有搞定。谁能搞的定的给个参考,最好是debian上的解决方案。
linux虚拟方案,kvm。这个是贝壳目前使用的方案,基本比较理想。速度很快,和xen基本差不多,显示速度不如vmware(理论上说装好显卡驱动应该会好点,不过贝壳找不到CLDC5446的XP驱动,那是Win32和Win95时代的显卡)。linux快windows慢,但是还在可忍受范围内。稳定性很好,只要测试通过,运行中到目前为止没有死机(当然很多参数是加了之后开机即死机)。数据可以通过samba互通,邮件也同样可以互通。然而使用samba无疑复杂很多,而且性能并不太好。只是从稳定性上说,让linux自己去驱动ext3总比半吊子的windows驱动更好,同时也不会出现争抢的问题。易用性上还算可以,无论是内核编译还是系统使用都不太难,最大的麻烦就是网络配置。根据贝壳的测试,在真实机器上superpi运行100W 位需要45秒,虚拟机内需要54-60秒,尤其在换用kvm-72.2后反而更慢了(54下降到60,折合真实机器83.3%下降到75%)。
总体来说,贝壳更倾向于使用全开源的准-全虚拟解决方案kvm,主要因为他简便易行,对系统影响小,不改变现有系统。同时性能高,稳定性好。主要需要解决显卡效率问题。如果以上问题无法彻底解决,贝壳打算换用linux下的vmware,想办法搞定他的内核模块。