禁用libata的acpi功能以解决Linux硬盘假死问题

No Comments

这两天我把系统换成了Archlinux,在用livecd引导启动准备安装时就遇到了问题——启动过程极其漫长;而在安装软件包、高强度读写硬盘时,也出现了假死问题。

类似的问题在进行了系统升级后仍然存在,具体表现为:启动、编译软件、使用hdparm等高强度I/O时,系统假死,在/var/log/errors.log中可以看到以下记录:

1
2
3
4
5
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的启动参数即可):

1
libata.noacpi=1

PS1:不建议直接禁用全部的acpi功能(即使用 noacpi 参数),此将禁用所有的高级电源管理功能,可能导致休眠、挂起以及笔记本亮度调节失效等等副作用。

PS2:ACPI是Advanced Configuration and Power Interface(高级配置与电源接口)的缩写。而与之相似的APIC是Advanced Programmable Interrupt Controller(高级可编程中断控制器)的缩写,与扩充硬件中断有关,与引起Linux诸多问题的ACPI基本毫无关系,请不要混为一谈,随意禁用APIC。

Fedora中的kmod与akmod

1 Comment

Linux Kernel有一大特性就是模块化,通过kernel module(内核模块,Fedora中缩写作kmod)来扩展内核功能(cf. what is a kernel module?)。最常见的一类内核模块就是驱动程序(driver)。由于许可证或使用规模等原因,一些硬件的驱动无法进入kernel,只能通过内核模块的形式来加载使用。在Fedora中如果你启用了rpmfusion-nonfree源,你会看到大量kmod-打头的软件包,大多都是rpmfusion帮我们编译、打包好的各类私有驱动(比如nvidia、ati的显卡驱动,broadcom的网卡驱动等等)。但是,你也许会注意到,几乎每一个kmod-*软件包都有一个对应的akmod-*软件包,而很多“私有驱动安装教程”都是直接让你把两个都装上。那么,这两个到底有什么区别呢?
More

Fedora 15下Adobe Air无法安装程序

7 Comments

UPDATE: ADOBE已经正式宣布停止更新AIR FOR LINUX(难怪之前对BUG汇报视而不见),看来之后LINUX用户就要和AIR说再见了,什么用AIR实现跨平台最终还是成为了一场梦,还是拥抱WEB吧。

上周冲着GNOME3装了Fedora 15 Lovelock,放弃了从接触LINUX以来就一直在使用的Ubuntu(准确的说,是删掉了Ubuntu 11.04,实在受不了Unity了)。从安装到后来的配置确实都让我不大不小地折腾了一番,这些等到以后有空的时候再细细说吧。今天我就想说说发现的一个BUG——Adobe Air在Fedora 15下无法使用,准确说是无法安装Air程序包。
More

在博客里启用社会化分享按钮

2 Comments

最近突然想起来,我的博客居然一直都没有放置社会化分享按钮,很不合社交网络化和网络社交化的潮流。于是决定在博客文章下方放置分享链接。本以为是个容易的事儿,去各个社交网站找一下分享按钮的代码放上去就是了,就像上次做那个快捷订阅侧边栏一样。可实际做起来才发现不是那么容易——社交网站实在是太多了!一个个手工去找实在麻烦。就想去弄一个插件来解决。

More

小修博客主题 – 以及暂别

No Comments

唔,其实本来是想换个主题的,但是最后懒得折腾,就作罢了。翻出在用的notepad主题的设计说明,看了一会以后决定弄一下header,加一个banner上去。

Windows已经被干掉了,自然也就没有了Photoshop。这次完全是用Gimp做出来的。图片素材来自很早以前蛋疼做的宣传画(摊手~鄙人设计水平也就这样了……)。

顺便也改了主题的CSS,一些小地方,大家应该注意不到……T.T只是为了看着更顺眼而已~

算上前两天整理的侧边栏,这次博客主题应该差不多折腾好了,会固定一阵子。

最后,明天就要去参加省选冬令营了,然后是省队选拔赛——决定我日后走向的比赛。因此这段时间肯定不会再更新博客了。至于比赛以后,如果成绩好就要更加努力准备二试,成绩不好估计就要和信息组say goodbye了——总之闲工夫是越来越少了。各位,后会有期吧!

P.S.其实这段时间挺颓废的,生病的时候尽在折腾东西了,本来也想写一些来记录的,现在也只好作罢。有机会再说吧~

在博客上放置饭否状态模块

No Comments

最近饭否用的越来越频繁,逐渐融入到饭否圈子里了。相比Twitter、人人,饭否成为我真正意义上的“微博”。于是就打算着把饭否放到我的博客上。首先想到的自然是和Twitter类似,找一个plugin装上就是了。可是去搜了一下发现只有一款很久未更新的fanfou-tools(上次更新是在饭否宕掉前,现在API都变了),只好作罢。

后来又想直接在首页上放一个RSS模块,订阅我的饭否timeline的RSS。这确实可行,而且也在我的博客上呆了10分钟。可是我突然想到——这RSS模块输出的是HTML代码,而我的饭否timeline更新极频繁,这样在我博客的缓存机制下,首页的RSS信息就严重滞后了……

这时在饭否首页右下角瞟到了 » 试试饭否插件 这个东西,果断点进去,(BSP页面随便选一个,比如blogger),发现了一段JS代码……这下解决了,直接贴进WP的文本widget里了事~

P.S. 代码里有一个count是定义显示数量的,可以自行修改。

纠结的Go Daddy域名续费过程

4 Comments

去年三月份,我买下了这个域名,正式开始使用独立博客。当时是在Go Daddy上用新用户优惠购买了这个.org域名一年。现在时间快到了,我就去续费(renew)了一下。不过这个续费过程可真是一波三折……

我打算续费三年,总共45刀,又去网络上搜罗了好久的promo code,最后找到一个任意订单满40刀减10刀的(算是很不错的优惠了)。35刀三年.org,比大部分域名商要便宜了(不过其实我也没多少选择余地,转换域名商挺麻烦的,要不就要另外交transfer fee,要不就是等到域名过期重新注册)。

More

Sunpinyin加速脚本 – 内存缓存词库

23 Comments

UPDATE2:感谢“据说要有”的建议,已修改脚本。

UPDATE1:脚本在异常退出(比如收到KILL信号,系统断电等)后再次运行时会有严重的BUG,导致用户词库丢失。现已修正,强烈推荐各位使用者更新。如果已经有过异常退出的用户,请退出脚本后至~/.sunpinyin/目录下检查(ls -l),若userdict为符号链接,请删除之,sunpinyin将重建新的用户词库。对因此造成的数据损失表示抱歉。

之前在一篇文章里,我提到了在Ubuntu下使用fcitx + sunpinyin配合hubertstar的大词库实现媲美搜狗的流畅输入,但是仍然有一个大问题——当词库过大的时候输入中会出现停顿现象,严重影响用户体验(因此我当时也只推荐使用small版词库)。

这是因为fcitx和sunpinyin的词库都是使用SQLITE,在输入时需要反复查询,由于词库的特殊性(前后两个查询的词经常离得很远),SQLITE的缓存机制很难起效,因而只能反复读硬盘,导致速度很慢。

不过,在大宝的启发下,我参考了Ubuntu中文论坛里hubertstar的帖子,以及大宝的博客,我写了一个供Ubuntu使用的sunpinyin加速脚本,效果非常不错,拿上来和大家分享。

More

解决PulseAudio的爆音问题 – 大幅提高Ubuntu音质

2 Comments

很早就发现Ubuntu下的音量调节范围比Windows要大得多,刚开始还以为是Linux的音频驱动更NB而窃喜,然而后来发现这并非是什么好事——音量条左端10%和右端20%几乎是废的,前者声音小得根本听不见,而后者则大得出现了爆音。有意义的音量条长度变短直接导致了音量调节非常困难,而且,就算是中间音量也经常出现爆音。

作为一个GEEK,遇到问题怎么能这样被难倒?必须得认真研究解决之!

本文中提到的Ubuntu均指10.04及以后版本。

More

Fcitx Sunpinyin – Ubuntu下享受输入的快感

13 Comments

在Ubuntu下的中文输入一直是一件很蛋疼的事情……原先使用多年的scim输入平台已经腐朽不堪,现在默认的ibus虽然是一个优秀的平台,但是缺乏优秀的输入法——常用的ibus pinyin的算法实在是令人无语,只好通过使用更大的词库(100MB+的搜狗词库)来弥补不足,不过效果也只是一般般,而且由于词库变大了许多,响应速度也变慢了。我后来知道了一个基于统计语言模型的优秀输入法——sunpinyin,于是尝试安装了ibus sunpinyin,果然组句能力非常强大,但词库实在是太小了,弄了一个大词库后发现性能又一次出现了大幅度的下降……

性能低下的主要原因,是因为他们都是运行于一个“输入平台”ibus之上的——越复杂的系统架构会带来越低下的性能,ibus是一个十分灵活的、能够安装各种语言的输入法的平台,十分臃肿,其性能很难好到哪里去。我们需要的,仅仅只是一个简单的——拼音输入法!其实早就有一般人想要这么干了,于是他们写了一个叫做fcitx的轻巧、纯粹的输入法。

我第一次接触fcitx还是v3时代,最大的感受就是——真的是太轻了,甚至连gtk都不依赖,而且只有一个用GBK编码的中文配置文件(蛋疼)……速度果然很快,算法也还行。不过在我试图导入大词库后,发现了一个致命的问题——fcitx会把整个词库读到内存里……最终,fcitx 3.x难用的配置方式、较差的稳定性、难看的界面以及表现平平的算法令我抛弃了它……

More

Older Entries

第 1 页,共 4 页1234