2014年9月2日火曜日

古い Intel ICH7 のマシンで SATA AHCI を使う方法(CentOS 6 の場合)

2005年製の古い Intel ICH7 のマシンで CentOS 6 を動かしているのですが、そのマシンの場合、HDD は SATA 接続であるものの、BIOS から AHCI や RAID モードを指定することができず、CentOS 6 からは ata_piix 配下に見えます。ata_piix だと、HDD の NCQ が使えません。
ICH7 は AHCI をサポートしているので、何か方法があるのではと思って Google 検索(キーワード:ICH7 AHCI setpci)したところ、先人の方が居られ、いじる方法はわかりました。
# setpci -s 0:1f.2 90.b=40
末尾の 40 が AHCI モードを指示することになるようです。80 だと RAID モード指示になる。
ただ、この操作を行っても、既にデバイスは ata_piix に掴まれているし、リブートすると元に戻ってしまいます(おそらく BIOS が再設定)。ネット上では grub に setpci 相当をやらせるという方法(OS の起動前にいじる方法)があるようでしたが、ふと、kexec でウォームリブートすれば、setpci で施した設定を保ったままリブートできるのではと思い、やってみたところうまくいきました。
http://docs.oracle.com/cd/E37670_01/E37355/html/ol_setup_kexec.html
こちらの runkexec スクリプトを拝借しまして、
# chown root:root /etc/init.d/runkexec
# chmod 755 /etc/init.d/runkexec
# service runkexec start
# shutdown -r now
で、AHCI に変更成功です。
setpci -s 0:1f.2 90.b=40
service runkexec start
shutdown -r now
上記内容を含むスクリプト(/root/bin/enable_ahci_and_reboot)でも書いて、運用してみたいと思います。HDD の NCQ 効果は僅かでしょうけど、なんだか得した気分( ̄ー ̄)

2014-09-07追記
grub2 のコマンドラインでは、lspci や setpci が使えるようです。ちょっとびっくり(まさか、そんなことができるとは!)。ICH7 のような古マシンで CentOS 7 を使う人は、わずかとは思いますが、例えば /etc/grub.d/15_enable_ahci に次のように書けば、ウォームリブートなどしなくても、AHCI モード変更できるようです。
#!/bin/sh
cat <<EOF
setpci -s 0:1f.2 90.b=40
EOF
# chmod 755 /etc/grub.d/15_enable_ahci
# grub2-mkconfig -o /boot/grub2/grub.cfg

2014-11-01追記
おそくなりましたが、当該マシンの lspci を確認したところ、82801GR (ICH7R) だったというオチでした。失礼しました。匿名さま、コメントをどうもありがとうございました。
人気ブログランキングへ にほんブログ村 IT技術ブログへ