2009年5月27日 星期三

Linux顯示異常?

一般在我們安裝完Linux過後,他應該會自動幫你apply正確的顯示驅動才對
但是有時候因為某些特殊原因,會造成顯示設定無法正常
如果執意要跑圖形化介面的話,可以嘗試把顯示的驅動改為vesa

在Linux環境下,預設情況下應該有多餘5個以上的terminal
而terminal 7預設是給X使用
當顯示無法正常使用,可以切換到其他文字介面的tty進行微調設定
tty切換的方式為Ctrl+Alt+fnx ...
假設切到tty1的狀態下,登入系統並且修改/etc/X11/xorg.conf
將driver的區段改為vesa..接著重新啟用X server..
一般較新的distro預設都是使用gdm來管理X~~
所以只要重新啟動gdm即可套用更新~~而不用瘋狂重開來驗證是否套用正常
issue # gdm-restart

網路介面異常

當執行ping的時候會聽到聲,且ping的資訊會變成ping ?
表示送出的網路資料格式是錯誤的~~
一般比較常看到是因為winsocket被修改造成~~
所以可以透過reset winsocket方式來修復~~
issue # netsh winsock reset

注意:重設winsock可能會造成某些與網路相依的服務毀損,不過基本上沒啥看到大問題啦^^"

依照有線網路連線狀態停/啟用無線

windows xp/2003預設的netsh雖然在help有說明有disable,不過實際上disable的參數不管怎樣設定都會失敗~~
要解決這個問題,必須透過微軟的devcon來控制裝置~~
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Col_WirelessObj=Split(objShell.Exec("%ComSpec% /c devcon.exe find * |findstr /I wireless|findstr /I DEV").StdOut.ReadAll,VbCrLf)
If UBound(Col_WirelessObj) = 0 Then
Wscript.Echo "Wireless device is not found"
Wscript.Quit
Else
ReDim DEVID_Wireless(0)
ReDim Prod_Wireless(0)

For index=0 to (UBound(Col_WirelessObj)-1)
If Instr(Col_WirelessObj(index),"PCI") Then
Buf=Split(Col_WirelessObj(index),"&")
If UBound(Buf) = 6 Then
DEVID_Wireless(UBound(DEVID_Wireless)) = Buf(1)
Prod_Wireless(UBound(Prod_Wireless)) = Trim(Split(Buf(6),":")(1))
ReDim Preserve DEVID_Wireless(UBound(DEVID_Wireless)+1)
ReDim Preserve Prod_Wireless(UBound(Prod_Wireless)+1)
End If
End If
Next
End If

Set objWMIService = GetObject("winmgmts:{(Security)}\\.\root\cimv2")

Set colEvent = objWMIService.ExecNotificationQuery("Select * from __InstanceCreationEvent within 60 Where TargetInstance ISA 'Win32_NTLogEvent' AND (TargetInstance.Logfile='System' AND (TargetInstance.EventCode=4 OR TargetInstance.EventCode=9))")
'EventCode 4 for LinkDown; 9 For LinkUp
Do
Set CurrentEvent = colEvent.NextEvent
If CurrentEvent.TargetInstance.EventCode = 4 Then
For Index=0 to (UBound(DevID_Wireless)-1)
Wscript.Echo "Enable " & Prod_Wireless(index)
objShell.Exec("%ComSpec% /c devcon.exe enable *" & DEVID_Wireless(Index) & "*")
Next
Else
For Index=0 to (UBound(DevID_Wireless)-1)
Wscript.Echo "Disable " & Prod_Wireless(index)
objShell.Exec("%ComSpec% /c devcon.exe disable *" & DEVID_Wireless(Index) & "*")
Next
End If
Loop

硬碟報廢程序

因為即使硬碟毀損,其實還是可以透過某些復原軟體將資料回復
Linux上可以透過shred指令來處理
一般預設26次的shred,會使資料被救回的機率降到很低,印象中FBI好像有辦法將10次複寫內的磁區資料給回復
issue # shred -vfz -n 0

SATA hotplug

確認機器是否支援sata熱插拔
1:驗證SATA控制是否有支援AHCI --> issue# lspci
2:驗證BIOS中的SATA控制晶片是否設定為AHCI模式

開始使用SATA熱插拔
3:在機器online狀態下,先將SATA排線的一頭連接主機板,再將SATA排線另一頭與硬碟串接
4:將硬碟通電,機器即可偵測到新增裝置

避免power supply 的overloaded
5:購置esata bracket,將bracket的SATA線接頭串接至支援AHCI的SATA控制器上
6:購置ESATA dock station,在dock station未通電前先將dock station的ESATA PORT串接至ESATA bracket
7:插上硬碟後啟動ESATA dock station的電源

將硬碟mount上系統使用
8:檢查所掛載上的位置 issue # cat /proc/partition

卸除ESATA裝置
9: umount partition,若裝置佔用中fuser -k /mount_ponit
10:寫回硬碟快取並截斷控制器位址,issue # echo "scsi remove-single-device host channel id lun " > /proc/scsi/scsi

tip: host channel could be found from dmesg

Linux 下安裝nvidia驅動

1:連結至nvidia官方網站下載對應驅動
2:切換至runlevel 3 --> issue# init 3
3:執行安裝驅動
4:切換至runlevel 5 --> issue# init 5
5:確認顯示是否正常

異常處理
6:檢查/var/log/Xorg.0.log與/var/log/messages
7:確認是否發生IRQ衝突現象 (我使用Dell precision T3400雙PCI_E x16版本發生IRQ衝突)
8:根據分析得知之結果,將發生衝突之IRQ做調整,或者是將衝突之IRQ給關閉 (我是在BIOS關掉音效卡,因為log說音效衝突)