在安装了CentOS6.2之后,遇到了传说中的
kernel:do_IRQ: 3.189 No irq handler for vector (irq -1)
错误。其中3.189不一定,可能是0.189, 1.89, 2.189 …。这里,189是IRQ中断号,而前面的数字,我推测,应该是CPU号。
在网上查了无数资料,大多数人给出的答案是修改boot文件参数,加上pci=nomsi,noaer就可以了。可是我试过之后,发现还是会出现这个错误。一但出错之后,可能的情况是两个,1,死机数秒后恢复正常。2,自动关机。
为些,大力google research。得出以下的可能的原因:
a) 硬件故障
b) 硬件驱动不正确。它可能注册了无法响应的IRQ号。
c) 硬件驱动有bug,在响应共用的IRQ号的过程中不通畅。
d) 不良的APIC (programmable interrupt controller)将PCI设备中断号指向了错误的IRQ号。
提出的诊断办法有:
lspci -v
查看出错的中断号来自于什么硬件
cat /proc/interrupts
查看注册了的中断号,注意这个注册的中断号可能被许多硬件设备共用。
如果上面都没有查出什么问题的话,最有可能的就是原因d了。可以在启动文件中加入noapic参数来关闭不良的APIC。
可以查看 /var/log/syslog 当中有没有什么关于出错中断号的信息。
可以使用dmesg命令来查看启动过程记录。
启动文件在/boot/grub/menu.lst
打开它
vi /boot/grub/menu.lst
default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-220.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/vg_cbb-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_cbb/lv_root rd_LVM_LV=vg_cbb/lv_swap rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM noapic pci=nomsi,noaer initrd /initramfs-2.6.32-220.el6.x86_64.img |
注意其中加入的noapic pci=nomsi,noaer参数。
至此,似乎一切正常。
后来又遇到187中断错误。再查,加上了acpi=off参数。发现81~190都是高级电源管理的中断。