總結一下這兩天折騰Windows 7、CentOS 7、Ubuntu 14.04/10的心得

陳冰發表於2014-10-30

本週購入新火力——ThinkPad T440p。這兩天在折騰安裝Windows 7與Linux雙系統,過程相當反覆糾結,心得體會總結如下:

1•CentOS 7對新硬體的支援更充足,T440p上安裝CentOS 7後,可自動識別所有硬體。在Windows 7下可順利安裝CentOS 7,且安裝後能順利使用CentOS 7。但問題也來了,CentOS不能識別Windows 7,安裝CentOS 7後,原來的Windows 7不會出現在啟動專案裡,網上查詢一番後解決辦法是修改grub.cfg檔案。因為CentOS 7已採用新式的grub2系統,所以需要進入/boot/grub2目錄後使用vim編輯grub.cfg檔案。

將下面這段Windows 7的啟動項宣告:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-XXX' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

加在### END /etc/grub.d/00_header ###之後。其中的XXX為你的Windows 7系統分割槽的UUID。

經過此番修改後,重啟動後,Windows 7啟動項可以看到了,並且也可以成功進入Windows 7。但在登入進入Windows 7之前和之後,螢幕會詭異地閃兩下,這在安裝CentOS 7之前是不存在的,一般像這種詭異的問題解決起來都很棘手,而且用了一陣兒後感覺CentOS對我這種純新手來說還是有些不合胃口,因此決定安裝Ubuntu看看。

2•Ubuntu最新的長期維護版是14.04.1,但這個版本很杯具地在T440p上無法安裝,第一遍安裝時停在LOGO畫面不動彈。第二遍安裝時我按F1鍵檢視安裝資訊的細節,發現安裝時不動彈的原因是提示了一大堆錯誤,但無奈錯誤提示出現時螢幕正在瘋狂地向上滾動資訊弄得我眼花繚亂啥也沒看清。

開動腦筋,第三遍安裝時我用單反相機的連拍功能機智地捕獲下了所有的出錯資訊,錯誤大意是說無線網路卡錯誤、以及顯示驅動錯誤,繼續網上查詢一番後,說是T440p因為硬體太新,導致顯示驅動和無線網路卡驅動只有在Linux 3.16版核心中才提供,而Ubuntu 14.04.1的核心是3.13,因此導致無法安裝。之後,緊接著發現Ubuntu 14.10正式版已經發布了,而這個版本的Linux核心恰好就是3.16的,因此重新下載iso,再次刻盤,重新安裝。

因為之前這電腦中已經安裝了Windows 7,並且已經把所有的分割槽都已經分配為Windows 7使用的主分割槽,結果發現在這種情況下,Ubuntu 14.10無法安裝,會在安裝過程中光碟突然被彈出。

重新進入Windows 7,使用diskpart刪除了兩個主分割槽,並建立了擴充套件分割槽和多個邏輯分割槽後,再次安裝Ubuntu 14.10,順利安裝成功,安裝過程中Ubuntu還問我,“已經偵查到您的系統中安裝了Windows 7,您大概是希望雙系統共存,並且可以在啟動時選擇進入何種系統吧?”說得好輕鬆好周到啊,但我其實並不相信它會把這件簡單的事情順利搞定。但為了給它一個面子,我選擇了“是”。

安裝完成,重新啟動後,果然看到了Windows 7的啟動項,多少有點出乎我意料,因為按照我之前在網上查詢的方法,要想在Windows 7成功安裝Ubuntu雙系統必須使用EasyBSD這個軟體在安裝Ubuntu前做一些看起來很有道理的工作才行。但現在我啥也沒做,直接就楞頭楞腦地安裝上了Ubuntu,而且它就這麼能工作了,這不科學啊。正在我暗自竊喜時,科學的事情發生了。

在我選擇了Windows 7啟動項後,正安心等待著Windows 7啟動畫面出現時,我發現Windows 7的啟動畫面並沒有出現,卻不可思議地面對著一張預示著Ubuntu正在啟動的那種純紫色的介面,整個螢幕都是這種純純的紫色,除此之外,沒有其他資訊,更讓我驚訝地是此時我卻聽到了Windows 7啟動時的那種熟悉的聲音,我相信在這張大紫臉後面正在啟動的絕對是Windows 7,而不是Ubuntu。因為常識告訴我們,一個人的容貌相對是容易改變的(江湖上的易容術相信大家也都聽過,當然現在該叫美圖秀秀了),但聲音卻極難改變,憑那一嗓子我就知道必Windows 7無疑。

我想去操控它,但前面卻被一張Ubuntu的大紫臉給擋得嚴嚴實實。我試探著盲輸入了我的Windows 7登入密碼,果然又出現了另一個熟悉的聲音,那是登入進入的聲音。我想還是先關機吧,因為被大紫臉擋著,無法正常關機,只能強行長按開關鍵關機了。

重新啟動進入Ubuntu,我想先看看Windows 7的那幾個分割槽是否有異常,結果點選分割槽時“當”的一下彈出一刺眼的錯誤資訊,讀了讀發現意思是說由於我的Windows處於休眠狀態因此無法在Ubuntu下掛載,我需要回到Windows 7中正常關機才行。難道是因為這個原因導致出現大紫臉的異常?不管怎麼說,很難完全排除這個可能性。

於是重新啟動機器,很快,再次來到大紫臉的面前。此時,我啟動我的另一臺同樣安裝著Windows 7的本本,同樣來到這個登入畫面,發現在Windows 7登入介面上按三次Tab鍵後,焦點就會切換到關機按鈕上,然後按回車即可關機。如此,依此順序盲著把這臺大紫臉正常關機了。

重新啟動,再次選擇Windows 7,奇蹟沒有發生,還是大紫臉。再一次,三次Tab,回車關機。

看來還是得回Ubuntu,正常的思路應該還是折騰grub.cfg。但我把grub.cfg審查了一遍,沒發現什麼異常。當然,以我現在的純新手的功力,就算裡面有個巨大的異常醒目地待在那兒,估計我也發現不了。

一時之間,沒有什麼頭緒,網上的搜尋也沒有任何結果。困惑中,在沒有對grub.cfg的模板做任何改動的情況下,試探著執行了一遍update-grub,重新生成一下grub.cfg,然後重新啟動,選擇Windows 7,不可思議的事情發生了,那張大紫臉消失了,Windows 7重見天日了!我可是啥都沒改動啊!

難道安裝Ubuntu時生成的grub.cfg真的有點小問題,再重新生成一次就好了?我將信將疑,再次啟動,再次選擇Windows,果然,大紫臉又回來了。

隨後我又重新啟動N多次,每次選擇在啟動項選擇介面倒數讀秒到不同秒數時切換到Windows 7啟動項進入(別問我為什麼會想到做這個嘗試,因為連我自己也不清楚,我只是憑著一股勇氣這麼幹了),結果發現了一個很難解釋的規律,如果每次在讀秒倒數只剩3秒時選擇Windows 7啟動項進入,就能成功進入Windows 7。

並且,根據大紫臉的現象,我認為是Ubuntu的grub不知何故,在把啟動權轉給Windows 7的載入程式時,卻忘記了清屏(因為除了被大紫臉擋著外,Windows 7的一切都在順利執行中)。考慮到14.04.1根本就不能識別顯示卡,我認為不排除是T440p的顯示卡的Linux驅動程式依然有bug導致的。

不過眼下的問題依然還要解決,既然是和啟動項倒數讀秒時切換到Windows 7的時機有關,那我想如果我把Windows 7設為grub裡的預設啟動項,也即在啟動時不需要去抓時機切換,只要靜待10秒讀秒走完,讓其預設直接進入Window 7看是否能收穫效果。

我在grub.cfg中把預設的啟動項由0改為4,也即目前Windows 7所在的啟動項,然後重新啟動,結果成功進入Windows 7。一次成功沒有說服力,之後,我又在各種情況下重新啟動了20多次,全部都成功。問題解決。當然,儘管問題解決了,但困惑還在,因為直到現在我也不確定這個問題到底是什麼原因導致的,功力不到,沒辦法。

記錄下來,是希望如果有人(尤其是那些買了T440p電腦的)遇到同樣問題,可以做個參考,也是給自己這番折騰的一個記錄。

2014年11月4日補充: 導致大紫臉問題(同時也是導致安裝CentOS 7後進入Windows登入介面時螢幕會詭異地閃兩下)的原因已經找到,是由於Windows 7 64bit的Windows Updata程式在安裝某些更新後,這些更新會與Windows 7的顯示卡驅動程式產生衝突導致的。解決辦法很簡單,在安裝完所有更新後,重新再安裝一遍顯示卡驅動程式即可。

相關文章