以前刚装好Archlinux的时候就发现了,切换到tty1 2 3 4 下面就一直出现下面两行的error提示
end_request I/O error on device fd0,sector 0
Buffer I/O error on device fd0,logical block 0
后来一直也没管它,偶尔开机后还会卡住gonme进不去,我还一直以为是我的USB摄像头的问题呢!
今天下定决心要把它搞定。用心google了一把,问题出现在fd0上面,也就是floppy上面,这个floppy也就是软驱,话说从我开始玩电脑起就没用过这玩意。虽然表哥送的电脑有软驱。
查看是否加载了floppy模块:
#lsmod | grep -i floppy
如果显示像下面这行说明加载了floppy模块。
floppy 95465 0
在ArchWiKi里查到禁用软驱模块的方法有几种:
Kernel modules (简体中文)
黑名单
对内核模块来说,黑名单是指禁止某个模块装入的机制。当对应的硬件不存在或者装入某个模块会导致问题时很有用。
有些模块作为 initramfs 的一部分装入。
mkinitcpio -M
会显示所有自动检测到到模块:要阻止 initramfs 装入某些模块,可以在 /etc/modprobe.d/modprobe.conf
中将它们加入黑名单。
运行 mkinitcpio -v
会显示各种钩子(例如 filesystem 钩子, SCSI 钩子等)装入的模块。如果要禁用这些模块,记得在配置完成后重新生成 initramfs。
使用 /etc/modprobe.d/ 中的文件
在 /etc/modprobe.d/
中创建 .conf
文件,使用 blacklist
关键字屏蔽不需要的模块,例如如果不想装入 pcspkr
模块:
/etc/modprobe.d/nobeep.conf # Do not load the pcspkr module on boot blacklist pcspkr
blacklist
命令将屏蔽一个模板,所有不会自动装入,但是如果其它非屏蔽模块需要这个模块,系统依然会装入它。要避免这个行为,可以让 modprobe 使用自定义的 install
命令,直接返回导入失败:
/etc/modprobe.d/blacklist.conf ... install MODULE /bin/false ...
这样就可以 "屏蔽" 模块及所有依赖它的模块。
使用内核命令行
同样可以通过内核命令行(位于 GRUB、LILO 或 Syslinux)禁用模块:
modprobe.blacklist=modname1,modname2,modname3
或者:
modname.disable=1
当某个模块导致系统无法启动时,可以使用此方法禁用模块。
使用 GRUB 的示例
/boot/grub/menu.lst ... kernel /vmlinuz-linux root=/dev/sda1 modprobe.blacklist=pcspkr,ipv6 ro ... /boot/grub/menu.lst ... kernel /vmlinuz-linux root=/dev/sda1 pcspkr.disable=1 ipv6.disable=1 ro ...
我使用的方法是在/boot/grub/menu.lst里面加上modprobe.blacklist=floppy
打开编辑/boot/grub/menu.lst文件
vim /boot/grub/menu.lst
... kernel /vmlinuz-linux root=/dev/sda1 modprobe.blacklist=floppy ro ... ...
修改完保存重启系统
# reboot
文章评论