ZFSでintel SSDを使うときの手順みたいなもの

久々のエントリ。3ヶ月半ぐらい放置してしまった。ここ最近は業務が忙しいのもあってすっかりOpenSolaisもご無沙汰だったわけですが、そろそろまたストレージをいじらないといけなくなる模様。まあいじるというか試行錯誤の日々がはじまると言ったほうが適当か。

ともあれこの3ヶ月余りでOpenSolais周りもいろいろあり、ディストリビューションとしてのOpenSolaisはなくなっちゃったわけですが、今後はOpenIndianaとして継続されるようなので一安心。

うちは仮想環境の共有iSCSIストレージとしてOpenSolaisをCOMSTARで使っているので、なくなったらちょっと困る。というかだいぶ困る。iSCSI自体はLinuxでもあるけどZFSで使いたい。FreeBSDでもあるけどCOMSTARがない。というわけでIllumos Projectの方で存続してくれるようでよかったなぁというところ。
最近はNexentaStorとかも使って社内環境で実際に使ってもいるけども、OpenSolais(OpenIndiana)と比べると一長一短。まあこれはまた別の機会に。

SSDについて

現状SSDを使うにおいてHDDと同じ扱いではダメというのは自作erとしてはもちろん、インフラエンジニアとしてもいろいろ知っておかなければいけないところです。以前のエントリでも書いたわですが、現状満足にTrimを使うにはやはりWindows環境になってしまいます。

そこで劣化対策や寿命をのばす方法としてSSDに予備領域を確保するという手段があるわけですが、この内容については以前のエントリや他のもっと詳しいサイトなどを参考にしていただければと。
一応以前のエントリは以下。

今だとCrucialのRealSSDがSATA 3.0(6Gbps)対応で価格comの売れ筋でも長らく続いたintel一強の時代に終止符を打ったりしてHOTなわけですが、こちらはMarvellコントローラで予備領域の確保する例の手法が通用するのかいまいち不明。I/Oパフォーマンスで言えばBBU付きのRAMディスクやFusion-ioのようなPCI-E接続のSSDが最強だろうけど高いよねやっぱり。
なので結局ZFSで使う場合はTrimができないので自分の実績的にもintel一択になってしまいます。というわけで今回はintel SSDZFSで使うまでの手順をまとめてみます。

ZFSSSDを使う

やることは以下

  • Secure Eraseで初期化
  • 予備領域(HPA)を確保

新品の場合Secure Eraseをする必要は特にないと思うんですが、今回はストレージのオーダーとセットでSSDをひっつけたので動作検証でいろいろいじられてる可能性があったのでここから。「通電とOSからのドライブ認識確認だけでOK」とベンダーさんには伝えてはいたけど念のため。

尚、以下の手順はすべてIDEモード(Legacy)で行っています。AHCIモードになっている場合はBIOSで設定を変更しておく必要があります

Secure Erase

で、Secure Eraseについてですがある程度使われたSSDに対して完全消去を行うことでまっさらにすることとでも言えばいいんでしょうか。ATAコマンドに準拠したもののようで自分も正直詳しくはないのですが、SSDの場合は電圧をかけることで短時間で実行が可能です(X25-M 80GBで20秒ぐらい)。
I/Oパフォーマンスが劣化したものに対して行うことで初期状態並に回復します。当然データは消えてしまうので注意が必要ですが。効果については以下の記事などが参考になると思います。

というわけで、とりあえずSSDを初期化するならSecure Eraseです*1。最近アップデートのあったIntel SSD Toolboxでもこの機能は搭載されています。

Secure Eraseの実行

ツールがあるので簡単にできます。以下の記事がコントローラ別、ツール別で詳細に書かれています。

ツールの入手先は以下。

  • HDDErase
  • HDAT2
    • Single programsのHDAT2.EXE programが該当のものです。ダウンロードして実行すればDOS用の実行ファイルができます。

USBからDOSを起動してツールを使うので別途それ用のUSBの用意は必要です。作成は以下参照。

intelコントローラであればHDDEraseだけでOKなんですが、記事にもあるようにIndilinx製のコントローラはロックがかかっているので一手間必要です。手持ちのCFD CSSD-SM32NI 32GBで記事の手順で問題なく可能でした。
intel SSDであればHDAT2は必要ないんですが、次のHPAの設定で必要なので準備します。

HPA(Host Protected Area)の設定

今までは予備領域の確保として普通にパーティションを切って、一部を完全に未使用のまま放置するという手段をとっていたんですが操作を誤ると書き込みが発生してしまうので扱いに気を付ける必要がありました。そこでHPAの確保によるやり方にしようと思ったわけです。

HPAというのはHidden Protected Areaと呼ばれるもので、ホスト上からは認識されない領域をドライブ内に作成します。ノートPCなんかのリカバリ領域で使われてるアレです。これを設定するとドライブ内部では認識されていますがBIOSやOSからはディスク領域がその分減ったものとして認識されます。

これを利用します。今までfdiskなどでパーテションを設定していた替りにその分をHPAとして割り当てれば、コマンド操作や設定でミスって書き込みすることを気にしなくて済みますしわかりやすいです。
手順は以下の感じで。当然のごとくトラブルが起こっても責任はとれないのでバックアップとるなり、いらないディスクで試してみるなりで検証してください。最悪の場合起動も認識もしないドライブになります

  1. DOSから先述のHDAT2を起動
  2. 認識されてるドライブが表示されるので対象を選択。対象以外は外しておくのが無難。
  3. SET MAX (HPA) Menuを選択
  4. Set Max Addressを選択
  5. New hiddenのパラメータにHPAとしてセットする領域を入力。LBAセクタでの指定なので、総容量の割合から計算して設定すればいいでしょう。

これで設定はOKです。再起動してBIOSやOSからHPAとして設定して領域分減っていれば成功です。

ちなみにICCというツールでも同様のことができます。

まとめとか

記事に書いてはみたもののまだ実際にここで作ったSSDは使用してなかったりするので、その後の経過などは追ってエントリで紹介します。これからまたOpenIndianaをいじることになるので、ネタになりそうなことはきっと書くはず。そう言いつつ今まで書いてないことの方が多いですけどね!

*1:コントローラが未対応のものもあるようです