2010年6月21日星期一

CentOS 系統 SATA 硬碟由 IDE 模式啟用轉到 AHCI

SATA 硬碟 Advanced Host Controller Interface(AHCI) 的技術網上已經有很多參考, 現代 SATA 硬碟內的 Native Command Queuing(NCQ)效能增強功能需要有 AHCI 及系統驅動程式來運作, 其好處最明顯用於新型號 SSD(固態硬碟)當CPU頻繁時有效達到更高傳輸效能, 可以衝到 SATA rev 2(3Gb/s) bus 的傳輸邏輯上限(250MB/s), 一般單夥 SATA 3Gb 硬碟受限於機械物理, 實用傳輸速度大約在 130MB/s, 那麼在安裝 OS 時沒有啟用 AHCI 及同時安裝系統驅動程式的話, OS 只會以一般 IDE 模式運行, 而事後再啟用 AHCI(BIOS)的話, 啟動電腦時進入 OS系統會失敗, Windows(XP,Vista,Win7)都會出現藍屏重啟(INACCESSABLE_BOOT_DEVICE), 而 Linux 會出現 Kernel panic 的錯誤死當。

網上腦殘專才流傳謬論至重灌系統云云, 其實還有更簡易的解決辦法; 在電腦仍然使用 IDE 模式時進入 OS系統內修改其硬碟模式機碼, 預設載入 AHCI 驅動程式, 修改後重啟電腦然後進入主機板 BIOS 內啟用 AHCI, 就可以順利載入 OS系統, 也不用十分鐘時間就可以完成。

Windows 7/Vista SP2 的話(XP 的話善用 google啊), 參考微軟技術文件 KB922976, 修改如下機碼:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci
start 預設值 3 修改為 0

已安裝 Linux 的系統 SATA 硬碟一般預設是 ata 模式, 而 kernel 並沒有預設載入 AHCI, 必需指向性的令系統 kernel 起動時啟用 AHCI

實作使用 CentOS 5.5 Linux, WD SATA 3Gbs 500GB 硬碟 WD5000AAKS 及 ASUS P5QL-EM 主機板
SATA 硬碟 IDE 模式啟用轉到 AHCI 修改步驟:
1. 在主機板(BIOS)仍然是 IDE 模式時, 正常起動 Linux 載入系統
2. 設定 scsi_hostadapter 模式, 修改系統配置文件 /etc/modprobe.conf 加入 ahci登入 root 權限, 編輯 /etc/modprobe.conf 文件:
在下列一行後

alias scsi_hostadapter ata_piix

新增一行內容
alias scsi_hostadapter2 ahci

3. 修改內核預載模組(驅動程式)預設載入 AHCI登入 root 權限, 執行:
mkdir /boot/AHCI
mkinitrd --preload ahci --force-scsi-probe /boot/AHCI/initrd-`uname -r`.img `uname -r`

4. 修改 boot-loader grub 載入預設
登入 root 權限, 編輯 /etc/grub.conf 保留舊條目及新增 AHCI 預載(如圖)例如:

#boot=/dev/sda
default=0
timeout=10
splashimage=(hd0,4)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.3.1.el5PAE)
root (hd0,4)
kernel /vmlinuz-2.6.18-194.3.1.el5PAE ro root=LABEL=/ quiet
initrd /initrd-2.6.18-194.3.1.el5PAE.img

修改為
#boot=/dev/sda
default=1
timeout=10
splashimage=(hd0,4)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.3.1.el5PAE)
root (hd0,4)
kernel /vmlinuz-2.6.18-194.3.1.el5PAE ro root=LABEL=/ quiet
initrd initrd-2.6.18-194.3.1.el5PAE.img
title CentOS (2.6.18-194.3.1.el5PAE) AHCI
root (hd0,4)
kernel /vmlinuz-2.6.18-194.3.1.el5PAE ro root=LABEL=/ quiet
initrd /AHCI/initrd-2.6.18-194.3.1.el5PAE.img

以上修改新增了另一個載入 default=1 的 ahci

完成 OS系統修改後重啟電腦, 進入主機板 BIOS, 將硬碟模式由 IDE 修改為 AHCI 後, 再進入 OS系統就能使用 AHCI 了。

備註:
  • 不是所有的主機板都支援 AHCI 模式, 某些廠牌的舊型號電腦 BIOS 內並沒有 AHCI 模式選項(例如: 聯想 G31 晶片組的 ThinkCentre A57); BIOS 沒有此功能的話, 失望的唯一辦法是額外採購 SATA 介面卡(例如: Adaptec SATA II Raid 1220SA)。
  • 舊型號的 SATA 硬碟(或 SSD)不一定都有 NCQ 功能, 採購(使用)時要留意型號及其詳細資料。

2 則留言:

  1. 您好,我想請問一下
    假如如上步驟做好修正後
    當下一次要update更新內核後
    是否又得重新再做一次上述的步驟呢

    回覆刪除
  2. 回 匿名 於 2011年6月4日上午12:54

    不需要再更改一次, 在 update kernel 時是自動根據已載入 /etc/modprobe.conf 的 SCSI 選項生成 initrd 預載
    不過, 要留心 /etc/grub.conf 的 bootup 選擇條目是否正確更新

    回覆刪除