2017年4月13日 星期四

Windows 疑難雜症整理

Windows 7
1. 羅技滑鼠在使用瀏覽器時,頁面的連續長捲動會有嚴重delay,滑鼠的動作會突然沒有反應,然後過約1.5秒後,突然瀏覽器畫面自動捲動

解法: 在研究後,發現這個是羅技的setpoint程式問題,將setpoint移除後就會解決,或是安裝舊版的setpoint

原因: 推測是由於setpoint會一律先把滑鼠的訊號攔截下來,然後再送出來給windows,但是在處理上不夠即時,或是使用的緩衝容量不足,導致瀏覽器在使用上會出現一時順暢,但是連續滾動幾次之後,由於緩衝滿了,然後又沒有立即從頭開始處理緩衝內的最新訊號資料,所以導致訊號不會馬上送出來給windows,結果就是,訊號雖然不會遺失,但是滑鼠的動作會突然沒有反應,然後過約1.5秒後,訊號處理完送出來,瀏覽器畫面就會突然自動捲動,可能是驅動程式的問題,但是不確定單獨安裝驅動程式會有什麼效果,setpoint並不是驅動程式,比較算是驅動程式的一個使用者介面,一些自定義按鍵的設定其實是script,然後依照每個使用者的profile在登入時載入,所以比較類似autohotkey這種自動輸入按鍵的程式,只是有一個好看的介面。


2. 睡眠(sleep)之後重新登入電腦,結果喇叭沒聲音,不管音量怎麼調都沒用,重新睡眠再登入也沒用

解法: 在裝置管理員內把音效裝置停用再啟用,再不行的話就是要移除驅動程式重裝,再重新登出登入

原因: 大概是重新啟動時驅動沒跟著動作,結果掛了,有的時候停用裝置再啟用就可以,但是有時候會嚴動到要重裝驅動,然後重新登出登入

3. 睡眠(sleep)時,拔掉螢幕接頭,重新啟動後把接頭接上去,沒有畫面,重新睡眠再啟動也沒用

解法: 無解,沒畫面根本除了快捷鍵外沒辦法操作,或許可以用遠端連線進入操作,但是遠端連線不見得有開,而且不見得有權限進行登出再登入,teamviewer可以,此情況少見,因為平常不會把螢幕拔掉

原因: 應該一樣是重新啟動時驅動掛掉,因為沒偵測到螢幕


P.S. power state的控制真的很麻煩,雖然沒寫過BIOS,但是寫過BIOS的公司前輩提到過,而且在MCU的韌體方面,要搭配一些power mode來管理一些週邊線路的控制也是頗複雜
https://msdn.microsoft.com/zh-tw/library/windows/desktop/aa373229(v=vs.85).aspx
https://zh.wikipedia.org/wiki/高级配置与电源接口


Windows 10
1.使用瀏覽器時,無法在網頁上輸入中文,但是可以切換出輸入法語言,IME看來沒有問題

解法: 多次嘗試後,發現在瀏覽器本身的空白頁和網址列就可以正常輸入中文,唯獨網頁的頁面上無法輸入,然後把輸入的游標在網址列和網頁之間切換幾次就有機會變回正常

原因: 看了一些文件後,應該是win8以來app和平板模式的這種改變所造成的,目前比較確認是windows自動判斷輸入模式的問題,因為在google首頁搜尋框上,雖然可以看到輸入法正確切換語言,但是就是沒辦法在搜尋框輸入中文,然後會發現在瀏覽器本身的網址列和搜尋工具列是可以正常輸入中文,所以可以比較確定是windwos自行判定輸入模式的問題

http://www.cccl.com.hk/ccclnew/cccllee/cccllee30.html
http://xdriftdoll.blogspot.tw/2015/02/windows-10-and-tw-ime.html

解法: 登出再登入

原因: 開始功能鍵和user profile有關,所以登出登入的時候重新載入profile就可以解決,這大概也是設計概念改變造成,開始功能鍵已經不是原本和系統緊密結合的那種,可能也變成只是一個app,這種情況和win8底下自己安裝開始功能鍵的app可能類似

3. 筆電(Dell E7470) 網路完全無法連上(有線、無線、外接USB wifi網卡、手機USB分享網路),網路診斷出現錯誤碼0x80004005(Unspecified Error),也就是不明確錯誤

原因:不知,目前測試,把裝置停用再啟用,把裝置驅動反安裝再安裝,登出再登入,睡眠再啟動,慣用方式都沒有效果。不過可以確定的是,不管什麼手段都上不了網,這應該不是單一驅動程式的問題,而且由以下的資訊可以大略猜到,應該是作業系統的一些權限部份出錯,比較像是user space的問題,這個問題把所有的網路都限制住了,診斷本身的錯誤的source是Engine,而和網路有關,且程式名稱有叫Engine的,就只有Intel Management Engine,可能是這個的問題

http://forum.thewindowsclub.com/windows-tips-tutorials-articles/37362-error-0x80004005-when-upgrading-windows-10-a.html

https://support.microsoft.com/en-us/help/914232/you-may-receive-error-code-0x80004005-or-other-error-codes-when-you-try-to-start-a-windows-xp-based-computer

解法: 目前已知是重開機



在event內發現應該比較相關的錯誤訊息

source是Engine,目前已經有叫做Engine的就只有Intel Manage Engine



2017年2月26日 星期日

在Dell Latitude E7470,安裝Win10, CentOS7 dual boot

建議先看前篇
http://usehand.blogspot.tw/2017/02/virtualbox-win10centos7-multi-boot.html

步驟

1. 硬體 DELL E7470

2. 主板韌體DELL OEM  UEFI

3. original OS: Win10 pro, target OS: CentOS7
    CentOS7則利用Rufus將iso檔內容寫入隨身碟建立可安裝碟
    https://rufus.akeo.ie/?locale=zh_TW

4. Partition status
 
Win10的Partition比較特別,會有一個MSR,是保留來給一些會用到BIOS的舊程式用的,但是在windows的虛擬磁碟管理介面裡面只會看到一個沒有名字的槽,要確認的話要用其他工具

    https://en.wikipedia.org/wiki/Microsoft_Reserved_Partition

5. ESP of windows
 
在安裝時要確定好,用grub shell或是進到linux後確認

6. bootloader of CentOS
 
在安裝CentOS時先不安裝bootloader(grub2),因為會變成有兩個ESP,而且也沒辦法直接選擇安裝在win10的ESP內,在安裝畫面的角落有小字可以選擇,但是這也就造成CentOS安裝完沒辦法開機,等於是安裝完就處於待搶救狀態

7. Installation configuration of CentOS7
 
只設定了root和home兩個partition,swap取消,ESP也取消(不安裝bootloader)

8. The feature CentOS7 support: Power sleep, audio driver when boot up
 
CentOS7在開機的時候會喇叭會有怪音,然後目前看來似乎有支援關上螢幕進入睡眠

9. CentOS 安裝畫面下所偵測到的sdb,但是開機時會偵測成sda,所以手動啟動的時候要注意
 
因為我有額外裝USB這些儲存裝置,而 Linux開機時認到的順序可能會和安裝時不同,所以要注意


10. 不安裝bootloader,以及/boot/efi預設掛載問題

雖然安裝的時候沒安裝bootloader,但是實際上開機後會發現/boot/efi目錄裡還是會有grub2,但是該目錄實際上不在ESP內

11. 手動啟動CentOS後安裝bootloader

將win10的ESP掛載上/boot/efi後,/boot/efi內就只看得到win10 ESP的內容,原本grub2的部份會暫時看不到,使用yum進行grub2的安裝

12. windows下設定bcdedit

結論

其實安裝一次就成功了,雖然第一次安裝就把swap、ESP都取消掉有點冒險,因為不知道會不會有什麼其他的副作用,但是目前看來都ok


VirtualBox 安裝win10及CentOS7 dual boot


目標:

1. 先在VirtualBox上進行multi boot模擬,然後在預載Win10的筆電上安裝 CentOS7

2. 確實了解安裝細節,以期能解決筆電實機和虛擬機環境不同所造成的可能的未知問題

重點:

1.使用GPT partition table

因為目前主要都是用GPT,而且目標筆電本身預載Win10也是用GPT

2.硬體電源控制相容性

因為Linux並不見得完整支援特製的硬體的電源管理功能(筆電或OEM機種)

(鳥哥)
http://linux.vbird.org/linux_basic/0157installcentos7.php#centos_9

3.關閉快速啟動(在 windows下設定)和禁用安全啟動(在BIOS或UEFI設定)

(文件連結)
https://read01.com/jND7m.html


實作步驟:

1. 開啟VirtualBox 的UEFI

2. 安裝win10企業版試用

由MS網站直接下載iso檔,直接掛載iso安裝

3. 安裝CentOS7

由官方網站下載everything版本的 iso 檔(CentOS-7-x86_64-Everything-1511.iso),同樣直接掛載iso安裝

(CentOS安裝教學: 鳥哥)
http://linux.vbird.org/linux_basic/0157installcentos7.php

3. 安裝完後重開機可以在開機選單選擇作業系統

假如選擇啟動win10,之後重開機就沒有選單直接進入win10,CentOS7的bootloader儲存在UEFI的設定似乎被修改掉了,也有可能是CentOS7原本在Win10的ESP有做設定調整,但是Windows Boot Manager 自己在開機時又修改回原本的

假如選擇啟動CentOS,那就沒什麼問題

這樣直接安裝記得應該會產生兩個ESP,一個是原本 win 10的,一個是CentOS的

==以下開始為重新安裝grub2於win10建立的ESP,相當於CentOS無法啟動的手動救援==

4. 掛載CentOS7安裝光碟,開機按住F12進入UEFI,設定開機順序為CD/DVD優先

5. 進入CentOS7安裝選單,看最下面的說明,按'c'進入grub shell

6. 使用指令前先按TAB,列出所有可用指令

因為很多參考文件的指令都是grub legacy的指令,或是比較舊的grub2指令,,CentOS7內附的是比較新版的grub2,詳細的說明要直接去看隨附的manual

(grub2官方文件,但是指令是舊的,具參考價值)
https://www.gnu.org/software/grub/manual/grub.html

7. 輸入指令"ls" 列出所有的partition

8. 輸入 "ls (hd0,gptX)/" 指令

指令中的"gpt"可省略,X代表partition編號,可以直接讀取支援的檔案系統的partition內容,用來確認root和boot資料夾的位置在哪一個partition,還有確認ESP是哪個partition

(grub2參考文件,也是舊指令)
https://www.openfoundry.org/tw/foss-programs/9267-linux-grub2-fixing

9. 直接使用grub 手動將CentOS7開機

    指令範例

          linuxefi (hd0,gpt6)/vmlinuz-3.......... root=/dev/sda7
          (設定linux kernel路徑,還有initramfs的root參數)
       
          initrdefi (hd0,gpt6)/initramfs..........img
          (設定initramfs.img的路徑)
       
          boot
          (啟動作業系統)

10. linuxefi指令(新指令)是指定linux kernel的位置

通常linux kernel 是在boot底下,檔名後面空一格,接root的裝置檔案partition位置,開機時似乎是被當成initramfs(initial ram filesystem)的參數輸入,所以這邊是用/dev/sda7這種Linux裝置檔案方式表示,而不是(hd0,gpt7),沒有指定root的話,開機就會halt,整個就會當掉

11. initrdefi指令(新指令)是指定linux 的init ram filesystem的映象檔案

開機時的early userspace,通常也是在boot底下

(initramfs文件)
https://wiki.archlinux.org/index.php/Arch_boot_process#initramfs

12. boot指令是啟動作業系統

假如前面linuxefi和 initrdefi沒先設定的話,會有錯誤提示

13. 在操作grub shell時盡量不要做多餘的行為

因為有可能導致不可預期的開機失敗,例如剛開完機,welcome to CentOS7,然後馬上就自動開始準備關機

14. Linux開機後,將UEFI的ESP掛載上/boot/efi,ESP內含windows boot manager(windows bootloader)

(掛載教學)
http://linux.vbird.org/linux_basic/0230filesystem.php#mount

15. 重新安裝grub2

連上網路,刪除grub相關設定檔後,使用yum進行reinstall grub的動作,這會在ESP內安裝grub2的bootloader 檔案,然後輸入指令grub2-mkconfig進行開機進入點entry的自動偵測和設定,grub2會自動把win10的chain loading設定好,並加進grub2的boot menu

(reinstall grub2教學)
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Reinstalling_GRUB_2.html

16. 實際使用結果

要從win10切換到CentOS7,必須要完全關機後再重開,才會進入grub2的boot menu,假如只是直接重新開機的話,再開機後會直接進入win10,所以可以觀察到win10對於"關機"和"重新開機"在底層所進行的步驟是有些微不同

17. 避免這個問題

必須到win10內使用bcdedit這個內建工具來將windows設定的bootloader 切換到grub2,但是不確定會產生什麼副作用

(bcdedit教學)
http://askubuntu.com/questions/235567/windows-8-removes-grub-as-default-boot-manager