之前曾今负责维护了学校的 IBM x3500 M2 塔式服务器,那是我第一次全权管理一台专业服务器,并且接触了磁盘阵列的管理,才发现 RAID 这东西远比我之前自己 DIY 组装机时所接触到的复杂许多,专业磁盘阵列卡果然不一般。当时我自底向上重新做了整个系统( Linux )的文件存储,包括 RAID 的配置,建立 LVM 以及 ext4 ,颇有些收获,尤其是意识到应该适当设置各层的“区块”的大小,互相匹配(“对齐”)以达到最佳性能,所以今天写下这么一篇笔记性质的东西来整理、分享。由于我不是专业运维,完全是自己查资料、瞎折腾,所以并不一定完全准确,希望读者能够不吝指正。
Thinkpad T430s运行Linux
我的旧电脑——惠普 Compaq Presario CQ35-105TX 在经历了四年多的风风雨雨后,终于寿终正寝了。上个月底,经过长时间的考虑,我最终放弃了 Macbook Pro ,入了一台仰慕已久的 Thinkpad ,型号是 T430s 2352A32 。 T430s 是 T430 的薄款,但又不是 T430u 超级本或 T430i 低配版,配置上与 T430 完全相同,但轻薄了许多,电池续航有一点削弱(不过它的4芯电池具有快速充电功能,半小时充80%电量,还是不错的)。 Thinkpad 是很有特点的笔记本,不同于惠普、神舟之类普通的消费本,有很多特有的硬件和功能,就算运行 Windows 也需要费一番功夫装上一大堆驱动。幸运的是,在 Thinkpad 上运行 Linux 的人还是挺多的,有许多热心人为内核驱动以及各种文档做贡献,比如 ThinkWiki 和 ArchWiki ,上面有非常丰富的资料。不过,这款 T430s 比较新,相关资料比较少,因此有必要在这里记下我的一些心得、经验。
E17 一周体验记
Enlightenment 17(准确的版本号其实是0.17.0)是一个很有特点的“东西”,说它是桌面环境,它比 GNOME 、 KDE 之类的 DE 要轻得多,甚至比 XFCE 和 LXDE 都要轻;说它是窗口管理器,它又有自己的一套 toolkit —— EFL ,包括了从底层图形库到窗口组件库乃至 dbus 库等全套桌面开发设施,而且还具有跨平台、轻量高效的特点(有一个基于它的智能手机项目 OpenMoko)。按照官方的说法, E17 是一个 Window Manager 和 Desktop Shell ,也能算是一个小型的 Desktop Environment 。 E17 的开发过程极其漫长,从上世纪 90 年代 E16 正式版推出后, E17 经过了十几年的开发,才从 alpha 到 beta 到今天的正式版,此间甚至有 0.16.999 这样的版本号。十年磨一剑,其精雕细琢的程度让 GNOME3 汗颜(想想 GNOME Shell 3.0 吧,我实在无法接受那是一个“正式版”)。
为什么会想到要尝试 E17 呢?虽然我曾今是一个爱折腾的人,但近来已然感受到无意义的折腾是浪费时间,所以投身 E17 是有着一些更为实际的原因的—— GNOME3 sucks and I don’t like KDE!我的旧电脑是很早以前的奔腾双核,跑 GNOME3 感觉颇为吃力,各种特效都有些卡顿,开机时间极长,而且 GNOME Shell 本身太难用,不得不装一堆插件,这一方面加剧了卡顿的情况(这些插件都是 JS + CSS 的),另一方面又带来了严重的不稳定性——尤其令我无法忍受的是每次 GNOME 升级都要 break 掉一堆插件……因而,趁着换电脑的时机,我想尝试一把这个被一些人吹上天的、极具个性的 E17 。然而经过一周的体验,我最终还是将它卸载,换成了 Cinnamon ( GNOME3 的 Linux Mint fork )。今天就让我讲讲这一周以来的感受以及放弃 E17 的原因。(由于卸载时过于仓促,没有留下截图, E17 的默认外观可以参看 TualatriX 的这篇文章及 E17 的官网风格。)
Linux 下 NVIDIA 显卡闭源驱动的一些优化
NVIDIA 对开源驱动开发的支持之差从 Linus Torvalds 那句著名的“Fuck NVIDIA”就可见一斑——几乎没有提供任何开发文档,开源驱动的开发基本要通过逆向工程进行。因而,想要获得较好的 3D 加速性能、 VDPAU 硬件解码功能、完整的多头显示支持等等,你必须使用 NVIDIA 闭源驱动。不过闭源驱动的一大问题就是文档匮乏、过时,一大堆神奇设置(不少还是隐藏的)让人摸不着头脑,其中一些项目的默认设置还有些问题,可能导致不小的性能损失。所以,在参考 NVIDIA Linux 驱动的官方文档和 ArchWiki 的基础上,我做了一些实验,摸索出了一些优化项,可以让你的桌面更加流畅(尤其是 GNOME Shell )。
浙江大学紫金港校区宿舍Linux上网详解
首先,这篇文章是一篇WHY-TO,面向所有Linux操作系统(或者说偏向gentoo、arch之类习惯自己折腾的系统),而不是HOW-TO。小白或者懒人想要快速解决问题的,请看cc98 Linux天地置顶贴:【HOWTO】ubuntu下如何上网(需要浙大内网访问)。
前言:
紫金港宿舍区上网主要有两种方式:一、连接内网后使用学校VPN访问外网(通过设置路由表可以实现内外网同时访问),而连接内网的方式又分为闪讯和201卡两种;二、使用闪讯或201卡直接连接外网(可以使用RVPN来实现内外网同时访问)。
闪讯这东西短期内在Linux下是没有能够正常使用的可能了。而201卡连接外网的资费又是一小时一元,实在承受不起。所以唯一可行的方案只剩下使用201连接内网后用VPN连接外网。其实VPN上外网性价比也是很高的,如果不追求网速的话,10元一月的教育网出口就够用了;就算有网速需求,50元一月的电信出口也并不算贵(闪讯4M包月也是48元)。
接下来我们就按照201卡、VPN、路由的顺序来详细介绍上网设置。
VPS选购记(下)
VPS选购记(上)
Linux系统时间杂谈
1. 时间准确重要么?
很多人都认为系统时间是个无关紧要的东西,大概准确就行了,就算差个半小时只要自己不误会也没问题。但是,这在当今与网络联系密切的现代操作系统上也许并不是那么一回事——尤其是Linux。
Linux最大的用途就是服务器了。作为一台服务器,时间准确是十分重要的,以防出现一些奇怪的情况——例如一台邮件服务器时间快了,别人收到的邮件也许就会是来自“未来”的了。相信运维们都很了解时间的重要性,我也不再赘述了。
不过也许很多人不知道的是,桌面系统时间不准确也会引发问题。我这几天在GNOME 3中就遇到了一个由时间引起的诡异问题:GNOME 3.2中引入了“在线账户”(GNOME Online Account),可以与在线账户同步文档、聊天、联系人等等,目前暂时仅支持Google。但几天前,我的在线账户突然间授权失效了,重新登陆也不行,总是获取token失败。查看Debug输出、日志等等,都没有发现什么有价值的线索。后来无意间我发现系统时间慢了半小时,调整之后再尝试登陆在线账户,竟然成功了。原来是由于系统时间偏差过大引起的。
其实类似的问题在很多“time-based”的token验证系统(简单说来就是根据当前时间产生token的系统)上都会发生,如果系统时间偏差过大将会导致验证失败。
禁用libata的acpi功能以解决Linux硬盘假死问题
这两天我把系统换成了Archlinux,在用livecd引导启动准备安装时就遇到了问题——启动过程极其漫长;而在安装软件包、高强度读写硬盘时,也出现了假死问题。
类似的问题在进行了系统升级后仍然存在,具体表现为:启动、编译软件、使用hdparm等高强度I/O时,系统假死,在/var/log/errors.log
中可以看到以下记录:
Jan 20 15:41:01 localhost kernel: [ 34.400019] ata1.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen Jan 20 15:41:01 localhost kernel: [ 34.400044] ata1.00: failed command: READ FPDMA QUEUED Jan 20 15:41:01 localhost kernel: [ 34.400064] ata1.00: cmd 60/08:00:a0:5e:38/00:00:3a:00:00/40 tag 0 ncq 4096 in Jan 20 15:41:01 localhost kernel: [ 34.400066] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout) Jan 20 15:41:01 localhost kernel: [ 34.400103] ata1.00: status: { DRDY }
(另外几次假死有的是WRITE FPDMA QUEUED。)
可以看到在假死的时候出现了ata frozen,ncq错误,无法完成读/写队列。上网查询,发现论坛、bug tracker、Q&A上有大量相关的信息,错误日志与此类似,可是大都没法彻底解决——归根究底是以上的日志信息太少,只说明了是ata错误,读取超时。通过其他多方面测试、尝试最终可以知道,这些大都是硬件软件配合问题造成的——对于某些控制器、驱动器,内核ata模块的acpi、ncq等功能无法正常工作,导致I/O错误。解决方法有的需要更换硬件,有的需要更新固件,还有的需要使用内核参数,禁用某些功能或是限制SATA速度。
其中数量比较多的一种就是libata的acpi节能功能有问题,导致硬盘供电不足。根据网络上的说法,在大容量硬盘上这个bug也更容易出现。我的这个硬盘就是新买的500GB 7200转,功率比较大,经过尝试,确实是这个bug导致的。
截止发文之时,没有找到相关补丁,只有一个简单直接的workaround:禁用libata的acpi功能。方法很简单,也没有太多副作用,只要添加内核参数(写入GRUB的启动参数即可):
libata.noacpi=1
PS1:不建议直接禁用全部的acpi功能(即使用 noacpi 参数),此将禁用所有的高级电源管理功能,可能导致休眠、挂起以及笔记本亮度调节失效等等副作用。
PS2:ACPI是Advanced Configuration and Power Interface(高级配置与电源接口)的缩写。而与之相似的APIC是Advanced Programmable Interrupt Controller(高级可编程中断控制器)的缩写,与扩充硬件中断有关,与引起Linux诸多问题的ACPI基本毫无关系,请不要混为一谈,随意禁用APIC。
Fedora中的kmod与akmod
Linux Kernel有一大特性就是模块化,通过kernel module(内核模块,Fedora中缩写作kmod)来扩展内核功能(cf. what is a kernel module?)。最常见的一类内核模块就是驱动程序(driver)。由于许可证或使用规模等原因,一些硬件的驱动无法进入kernel,只能通过内核模块的形式来加载使用。在Fedora中如果你启用了rpmfusion-nonfree源,你会看到大量kmod-打头的软件包,大多都是rpmfusion帮我们编译、打包好的各类私有驱动(比如nvidia、ati的显卡驱动,broadcom的网卡驱动等等)。但是,你也许会注意到,几乎每一个kmod-*软件包都有一个对应的akmod-*软件包,而很多“私有驱动安装教程”都是直接让你把两个都装上。那么,这两个到底有什么区别呢?