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起来。稍微定制一下就可以当手机专用系统用了。像贝壳这样的编程人员更可以方便的给手机编程,来扩展手机的功能。
还有更好的一个方案,就是将手机回归原始。使得整个手机除了电话和短信外,什么功能都没有。而后给手机指定一个标准接口,在需要进行复杂应用的时候,直接插在上网本的外面当外接设备使用。这样手机的屏幕和键盘都可以极度精简,体积小巧方便使用。接入电脑后,非常方便的可以浏览网页,观看电影等等。其实本质上就是一个强大的手机(当然,要用经典构架)外接一个大型(相对大型)的显示器和键盘系统。
不说瞎想了,就说说上网本,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月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
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年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,想办法搞定他的内核模块。
从系统发展史的角度来说,我们可以预见,将来的系统将是脱离硬件的。首要的原因就是和硬件不相匹配的各个层级的计算能力需求。现在系统发展有两个极端,一个是虚拟机,试图将一个硬件整体分离,运行多个系统。另一个是高性能集群,试图将多个硬件合并,运行一个系统。从根本上说,这是因为高性价比的硬件集中在了一个性能区间,而实际的性能需求却是完全分离的,因此我们才会出现如此两类完全背离的需求。而现在有大量宝贵的人力浪费在了系统和硬件结合,系统稳定性问题上,这无疑是对将来发展的一个巨大瓶颈。虽然无法预知将来的技术发展会以何种方式解决这个问题,然而可以预见的是,解决硬件和性能的背离将是人类计算机发展史上一个重要的里程碑,解决这个问题的人必定会在计算机历史上留下重重的一笔。
同时,更进一步,贝壳揣测,将来的解决方案将是系统硬件调度/驱动和系统软件管理分离。一个软系统拥有一个用户表和一个硬件表,硬件表上写他可能有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,想办法搞定他的内核模块。
订阅:
博文 (Atom)