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) だったというオチでした。失礼しました。匿名さま、コメントをどうもありがとうございました。

2014年8月23日土曜日

IRST(インテルラピッドストレージテクノロジー)RAID0構成のWindows PCのSSD移行

お盆休みに、知人が自宅PCをSSDにしたい(HDDからSSDへ引越したい)とのことで、若干の手伝いをしたのですが、これが意外と手こずりました。せっかく得た経験値ですし、備忘録として書いておきたいと思います。

まず、Windows 7 PC ということで、Windows 7 標準のシステムバックアップツール(システムイメージの作成、システム修復ディスクによるリストア)で簡単に引っ越せるものと考えていました。同じディスクへの修復なら、以前に自分で行った経験がありました。その経験値から、SSD に収まるように C: ドライブを縮小すれば、その手が使えるものと推察したのでした。Windows 7 なら、標準のツールでボリューム縮小(パーティション縮小)が行えますし。

それで、まず、HDD がどのような構成になっているか確認させてもらったのですが・・・、意外なことに 500G HDD x 2台による IRST RAID0 構成となっていたのでした。まあでも、SSD のシングル構成に変えたとしても、Windows 7 のシステム修復処理がうまくやってくれるに違いない、、、そう思って、まずはボリューム縮小操作にとりかかったのでした。幸い C: ドライブには、そんなにデータが入っておらず、数字上は、換装する SSD の容量以下に縮小できそうでした。

ところが、Windows 7 のボリューム縮小処理では、ファイル配置のためか、目標のサイズまで縮小できませんでした。どうも、そのパーティション内で最も後ろに配置されたファイルのところまでしか圧縮できないらしいのです。Defraggler というツールで、ファイル配置を確認しました。gparted なら、ファイル移動してでも縮小してくれるのですが、おそらくですが、Windows 7 は安全を優先しているのでしょう。妥当だろうと思います。

そんなら、CentOS や Fedora の Live メディア + gparted でやればよいや、っと通常なら考えるところですが、今回は IRST の RAID0 構成というのが頭をよぎり、遠回りをしてしまいました。なんとか、ファイルの配置をうまく整える(パーティションの先頭にファイルを寄せる)ことができれば、目標のサイズにボリューム縮小できるようになるのではないかと考えたのです。

それで、いろいろな Windows 用のデフラグツール(freeなもの)を漁り、パーティションの先頭にファイルを寄せる機能がないか探したのですが、とうとう見つけられませんでした。この探索に長時間食ってしまいました。。。

気を取り直しあきらめて、勝手知ったる CentOS 6.5 LiveDVD から起動してみたところ、IRST RAID0 は、md126 に見えることが確認できました。そんなら大丈夫そうだと、EPEL から、gparted と ntfsprogs を入れ、C: ドライブを縮小したところ、なんなく成功しました。
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install ntfsprogs  ※NTFSのパーティション操作するために必要
# yum install gparted
# gparted

パーティション縮小できたので、Windows 7 のシステムイメージ作成で、USB ディスク上にバックアップイメージを作成し、元のディスク(500G x 2)を外して、新しい SSD を接続して、システム修復ディスクから起動してリストアを実施。これでいけるだろうと思ったのですが、謎のエラーでうまくいかず。ネットで調べたところでは、バックアップ元のディスクより大きいサイズのディスクでなければ、リストアできないという仕様らしいです。( ゚ ▽ ゚ ;)なんと!! またもかなりの時間を食ってしまったのでした。

そうなると最後の手段、CentOS 6.5 LiveDVD から起動して、dd でコピーすればうまくいくだろうかと、SSD を外して、元のディスクを元のSATAポート(port0およびport1)へ再接続、SSD は空きのSATAポートへ接続して、LiveDVD から起動。sdX を取り違えないように、慎重に確認して、コピー実行。
# cat /sys/block/sdc/device/model
# dd if=/dev/md126 bs=1M | dd of=/dev/sdc bs=1M

最後に、シャットダウンして元のディスク(500G x 2台)を外し、SATA port0 に SSD を接続。。。たのみます、起動してくれっと拝みつつパワーオン。。。成功でした!! Windows 7 の起動アニメーションが表示され、無事に起動完了・引越し完了。

CentOS 6.5 なら、mdadm で IRST RAID を扱えるという知識・経験を得ることができました。これまで個人的には、Windows PC については、可能なら HW-RAID1 を使ってきましたが、PC が対応しているなら IRST RAID1 でもいいかもしれないと感じました。たぶん HW-RAID1 よりも、IRST RAID1 のほうが性能が出るでしょうから。なぜならば、NCQ が使えるだろうから。

2015-08-23追記
あれから1年、どうしても IRST マシンを使ってみたくなり、メインマシンを T510 から W520 に移行しました。これぞファイナルThinkPad!自分史上最強のマシンとなりました。こちらを参照。

2015-10-15追記
Windows の話しですが、UltraDefrag というツールのコンパクトモードという機能を使えば、パーティションの先頭にファイルを寄せることができるらしいです。試していませんが、次のページに情報がありました。
http://gigazine.net/news/20080304_ultradefrag/
それにしても、なぜあの時は、このページに辿りつかなかったんだろう。
Windows 7 の「ディスクの管理」で、ボリューム縮小操作をする時に有用かもしれません。試してないですが、備忘録まで。

2014年8月19日火曜日

物理セクタサイズが 4K bytes のディスクをミスアラインしたら、どれだけ性能劣化するのか?

最近の HDD には、物理セクタサイズが 4096 bytes で、論理セクタサイズが 512 bytes の製品(AFT と呼称されるやつ、512e とも言う)がありますが、その場合、パーティションの開始セクタ番号が 8 の倍数になるように気をつける必要があります。もし、アラインメント(alignment)がずれている場合、書き込み時に HDD 内で Read-modify-write が発生して性能劣化するはずです。
と、理屈ではわかったつもりで、今までわざわざミスアラインさせたことがありませんでしたが、実際に性能劣化する様子を見てみたいと思い、わざとミスアラインさせて、性能を測ってみました。

パーティション作成は、CentOS 7 上で行い、性能計測は Windows 7 上の CDM で実施しました。
# fdisk -u -c=dos -H 64 -S 32 /dev/sdc
でパーティション作成し、NTFS にフォーマット。

開始セクタ番号が 32 の場合。


開始セクタ番号が 63 の場合。

理論どおり、Write が落ち込んでいる様子が見てとれました。

そろそろ 4Kn (論理セクタサイズも 4096 bytes)のディスクも出てきており、種々のツールの対応も進んでいると思いますので、上記のようなミスアラインに気をつけなくてもツール(fdisk等)が、よろしくやってくれるはずではありますが、頭の片隅にメモまで。
人気ブログランキングへ にほんブログ村 IT技術ブログへ