解决问题的方法

林子大了,什么鸟都有。水平高的直接看代码解决问题,水平烂的遇到没见过的问题立马就慌了阵脚,无处下手。这张图倒是很好的表达了这个意思,正所谓临危不乱。

以下面这个为例,说明解决问题的一般的、通用的方法。

一台机器由于 OOM 挂了,重启的时候发现无法启动,屏幕上显示如下:
mount: mounting /dev/disk/by-uuid/***************************** on /root  
failed: Invalid argument  
mount: mounting /sys on /root/sys failed: No such file or directory  
mount: mounting /dev on /root/dev failed: No such file or directory  
mount: mounting /sys on /root/sys failed: No such file or directory  
mount: mounting /proc on /root/proc failed: No such file or directory  
Target file system doesn't have /sbin/init  
No init found. Try passing init= bootarg  

问题最终转交到我这边,如果之前遇到过,那还解决不了,只能说明你不适合从事资本密集型产业。

就此问题,我也从未碰到过,并且根据之前积累的经验,只能大概猜测出可能是某个 fs 出现过问题,grub 找不到 init 文件,应该是要通过 livecd 之类的修复的,到这里我也没什么头绪。
接下来,想到 GIYF,它能解决你 98% 以上的问题。google.com,注意,是 google.com,google.com.hk 质量远不如 google.com,前者大部分都是做的本地化,想象一下一个满屏都是中文的搜索工程上的问题,质量能高到哪里去。
接下来,总结下错误的内容,抓住几个核心的 key word,输入 "Target file system doesn't have /sbin/init",很高兴的是,匹配度非常的高,整屏整屏跟此一模一样的问题。
通过 PXE,我们的基础的 OS 部署系统都会包含这些 rescue 的 system,最简单的是通过 DTK 的方式进入,或者比较笨的方式,用 Virtual disk 进入,再不济,找 IDC 驻厂的拿个 LiveCD 启动下就可以加载一个新系统;接着就是通过 fdisk, gparted 找到 / 的分区,执行一条 e2fsck 结束。到此问题解决。

回头看下,该问题普通的不能再普通,原封不动的把一条 log 语句(Target file system doesn't have /sbin/init)贴上去就搜到完全匹配的内容。甚至都不需要自己提炼加一些限制条件等额外因素。

再比如,我们之前碰到一个跟上面解决步骤类似的问题。问题是:redhat 6.2 跑 hadoop 会出现 system time 奇高的现象,而同样版本的 ubuntu 则没有这个问题。我同样没什么头绪(要是一眼或者经过简单的分析就能看出来估计就不要呆这公司了 ;-)),猜测估计是 OS 的问题,其他的都一样,就 OS 不一样,怀疑 OS 是不是很正常。继续 google key word"redhat 6.2 hadoop system",结果,第一条就是该问题的答案

就这么简单,没有复杂的问题,掌握这个,再加上 RTFM,99% 以上的问题都能解决,你遇到过的问题,那些发明了计算机、编程语言、操作系统的专家们早就遇到了。剩下的 1% 要么是你在研究、发明、创造某些全新的内容,要么就是你现在使用的系统、软件等等世界上没有几个人用过,这两者 99% 的人一生都不会碰到。

上面的步骤只能解决问题,如果要知道本质,看男人(man)吧。