読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(writeboost report) initスクリプトなどを書いた

writeboostは, カーネル空間の実装に集中しすぎたため, ユーザに優しくない. 事実, ドキュメントは不整合だし, 使ってみたいが難しいという声もある. というわけでこの週末は, ユーザへの優しさを倍増させてみた. writeboostの利用を開始することは現在, たやすい. ちょっと使ってみる人が増えてくれたら良いと思う.

サーバのストレージにwriteboostを適用することを考えた時, リブートごとにいちいちデバイスを作り直すのはめんどうだしミスも起こる. キャッシュを適用せずにI/Oを開始してしまった場合, 通常はデータ損失など事故となる. 従って, 起動時に自動的にデバイスを構成してくれることが望ましい.

この実装としてinitスクリプトとsystemdを考えたが, とりあえずinitスクリプトのみ提供することとした. systemdはsysvinitへの互換性サポートを行うし, 全体としてはぼちぼちしかsystemdに移行しないから, writeboostがsysvinitだとしても責められはしない. むしろ, みんなが知ってるものだからわかりやすい意味がある.

initスクリプトでは, deviceのcreate/removeのみを行って, ファイルシステムへのmountは別の機構を使おうと考えたが, 諦めた. mountall.shはrcS.dに置いてあるため, rcN.dより先に呼ばれてしまう. つまり, rcN.dにスクリプトを置く限りでは, デバイス生成後にmountすることは不可能である. /etc/fstabに書けば自動的にマウントしてくれることが, 私の負担が減るのが良いと思ったがうまくいかなかった. 次の作戦はudisksを使って, udevからmountする手段だが, これは気持ちが乗らなかった. そんな潔癖に徹するくらいなら, initスクリプトの中にマウントまで含める方がまだマシだと思った.

というわけで, writeboostが提供するinitスクリプトは, デバイスの作成とファイルシステムのmountまでを責任持つ.

sysvinitを使う時, 一般には, 作ったinitスクリプトを/etc/init.dに置き, /etc/rcN.d以下にシンボリックリンクを作成するものだが, これを手動でやるのはよろしくない. Debianならばinsserv, Ubuntuならばupdate-rc.d, Redhat軍団はchkconfigを使う. しかし今回はinsservを使う実装しか書いていない. 枝は大きくない. 従って, 小さな貢献によってサポートを増やすことも可能であるし, 本質的な部分ではないし, さしたる副作用もないから大した問題ではない. やることはシンボリックリンクを張るだけである.

私が提供するwb-installer.shは, wb-installer.sh installのように使う. こうすると, さまざまなファイルを自動的にインストールしてくれて, 再起動時にはmountまで自動的に行ってくれるようになる.

具体的には, writeboostをcloneしてから以下の手順でよい. ただし, カーネルは3.14が自前コンパイルされていることを前提とする. 必要なCONFIGについてもREADMEに示した. しかし, 例えばDebian Wheezyからoldconfigすれば何の問題も起きない程度には, 特殊な設定を必要としない.

  1. ./build.sh (コンパイル)
  2. vi writeboost (initスクリプト内, デバイス指定部分を変更する)
  3. ./cleanup-cache.sh <cache_dev> (キャッシュデバイスの頭1-sectorを塗りつぶして, dmsetup creaet以下でフォーマット可能とする)
  4. mkfs.xfs -f <backing_dev> (backing device上にファイルシステムを作る)
  5. ./wb-installer.sh install (モジュールやスクリプトがインストールされる)

私のマイクロサーバでは, これからさらにsambaを設定して, Macbookからアクセスしている. リブートをしたあとでもファイルは復元されているし, 大きな問題はないと思う. 必要ならばsmb.confも公開して良い.

writeboostは非常に面白いソフトウェアだ. みなさん使ってみて欲しい. 本当に素晴らしいソフトウェアなんだ.

https://github.com/akiradeveloper/dm-writeboost

なお, スクリプトの作成には@moriwakaや@naota344がアドバイスをくれた.