記一次Ubuntu突然無法進入系統的經歷
背景
今天早上像往常一樣開啟電腦,卻發現連登陸頁都無法顯示出來,直接是灰屏。第一反應是,完了,不會是新換的SSD壞了吧?
排查過程
1. 切換到命令列模式
發現報錯,“-bash /dev/null Permission denied”,然後去網上找,說執行”sudo chmod 777 /dev/null”就可以了。切回圖形介面還是老樣子。查看了 /var/log/kernel.log後也沒看出什麼問題。
2. 切換到原來12.04的系統
發現一切正常,基本排除了SSD和記憶體有問題的可能。期間還不放心用Memtest對記憶體做了次測試。
3. 網上尋求解決方案
然後看到有網友說用”startx”開啟影象介面,試驗後發現不行。後又有網友說ubuntu是用lightdm管理桌面,需要用”sudo service lightdm start”進入。經過實踐發現,我必須先用”sudo chmod 777 /dev/null”,然後再用”sudo service lightdm restart
4. 各種詭異
可是這個介面很多東西很詭異,比如開啟 Terminal 也提示”getap permission denied”。正毫無頭緒時突然找到了一個網頁“bash: /dev/null: Permission denied” on Ubuntu Login。跟我的問題很類似,有人回答提到了The permissions on /dev/null should be set by udev so check the files in /etc/udev/rules.d, such as /etc/udev/rules.d/40-permissions.rules,
讓我恍然大悟。貌似我昨天也修改過類似的配置檔案
5. 找到真凶
大概回憶了下,昨天為魅族手機配置MTP,需要在檔案/lib/udev/rules.d/69-libmtp.rules 新增一些內容,而我直接貼到了檔案的末尾。仔細看了下指令碼,確實不應該放到結尾,而是應該接著其餘手機配置項。真是大意了。應該放在這些內容之前。
#Autoprobe vendor-specific, communication and PTP devices
ENV{ID_MTP_DEVICE}!=”1”, ENV{MTP_NO_PROBE}!=”1”, ENV{COLOR_MEASUREMENT_DEVICE}!=”1”, ENV{libsane_matched}!=”yes”, ATTR{bDeviceClass}==”00|02|06|ef|ff”, PROGRAM=”mtp-probe /syse attr{busnum} $attr{devnum}”, RESULT==”1”, SYMLINK+=”libmtp-%k”, MODE=”660”, GROUP=”audio”, ENV{ID_MTP_DEVICE}=”1”, ENV{ID_MEDIA_PLAYER}=”1”nvDEVPATH
LABEL=”libmtp_rules_end”
總結
Ubuntu這種系統基於配置檔案,如果配置檔案出錯會產生非常大的影響。比如PATH配錯了,不重啟系統還不會發現問題。所以,修改配置檔案要謹慎!