2011年2月8日火曜日

メモ: GEOM journalの0fill



virtualboxのディスクイメージちっちゃくするぞ作戦で、gjournalについては調査が手つかずだった。


とりあえずソースを読んでわかったこと。



gjournal dump /dev/ada1s1a



とやってflagが1の時はjournalがsyncさておりCLEANな状態。


この状態で且つ、ジャーナルのワーカースレッドが起動する前ならジャーナルディスクを吹っ飛ばしても大丈夫。


つまり、マウントしてない状態で、flagが1で有ることを確認した後、jstartからjend(byte単位)を0fillしてもOKなはず。


今日はもう眠くて作業するのは危険なので、計画のメモのみ。


追記


とりあえず前回書き忘れてた事として、最後の1セクタはメタデータがあるから書き込まないように注意しなきゃです。oseekだけ設定してうしろ消さないように。ちゃんとcount指定が必要なはず。


で、実験した結果消した後にマウントするのはOKなのだが、ルートパーティションにしている場合は最初の一回のみルートパーティションみつからなくて転ける。


もう一回再起動すればちゃんと起動する。もしくは0fill 作業後にgeom_journalをloadして一度読み込ませれば正常に起動します。


とりあえずは0fill作業としてはうまくいくけど、ちょっと気持ちわるい。





2011年2月6日日曜日

FreeBSD on Virtualbox のVDIを小さくする



やることは以下のコマンドを実行するだけなのだが、



VBoxManage modifyhd hogehoge.vdi --compact



その前準備として出来るだけ全てのセクタを0で埋めた方がよい。ググってみると、



init 1 #シングルユーザモードに切り替え


cat /dev/zero >o



として0でうめたファイルを作ってから削除するのが主流らしい。


確かに手っ取り早く、実践的なのだが、より完璧を目指すならちゃんとファイルシステムの空きブロックを一つ一つ消したい。(手元の実験では0.15%程度の空きブロックが0fillされていなかった)


と言うことでそんなツールを作ってみた。


http://syunei.dip.jp/~akira/deldfree.tar.gz



make #コンパイル


./deldfree /dev/ada1s1a #コールドランで、状況チェックだけ


./deldfree /dev/ada1s1a -f #実際に処理するときは最後に-fをつける



ただ、このツールはマウントされていないファイルシステムにしか実行できないので


現実的には、作業用の仮想環境があって、そこに処理対象のHDDを追加で繋いでやるのが楽だとは思う。そこでそんなVirtualbox用イメージも作ってみた


http://saifes.dip.jp/~akira/freebsd_rescue.ova


パスワード無しでrootでログインして使う。/root/deldfree/以下に当該ツールがはいっているので、それを対象のディスクにかけてやればいい。





補足


かなり趣味に走ったツールです。0.15%をけちるよりは、作業の楽さをとったほうが一般には良いとおもいますよ。多分。


あとswapパーティションの0 fillも忘れずに。


補足2:高速化のためには?


わざわざ最初に読み込んで0かどうかチェックしてますが、これはどれくらい減ったか確認できるようにするためだけです。多分空きブロックに何が書いてあろうが問答無用で0fillするほうが速いです。





2011年2月2日水曜日

FreeBSDをVirtualBoxでキビキビ使う with geom journal



VirtualBoxを使っていて、一番気になるのはディスクアクセスだと思う。


体感的にものすごく効いてくる。


とりあえず,FreeBSDで一番高速なファイルシステムはgeom journal(gjournal)らしいので、それを使うべく、設定してみた。


普通はPC-BSDのインストーラを使えばいいらしいが、そのために4Gもダウンロードするのは面倒なので、FreeBSDのインストーラのみでがんばってみた。結論から言うと2回FreeBSDをインストールする事になる。


一回目のインストール


本番HDDと一回目の踏み台に使う踏み台HDDを繋いだ状態で、一回目のインストールを行う。(VirtualBoxの設定でHDDコントローラをSATAにするのを忘れずに。)


一回目のインストールで本番HDDのFdisk/Label作業も行って良いが、一つ注意点がある。gjournalはそれなりにでかいパーティーションじゃないと意味がない。従って、デフォルトのように細切れに切るのではなく、今回はswapパーティションと/パーティションのみにする事にした。とりあえず本番HDDは/honbanに仮にマウントしておく。


一回目の起動:ファイルシステム初期化


ここでHDDの状況は以下の通りだとする



ada0s1a 踏み台HDDの/パーティション


ada0s1b 踏み台HDDのswapパーティション


ada1s1a 本番HDDの/パーティション


ada1s1b 本番HDDのswapパーティション



まずは作業するためにアンマウントする。



swapoff /dev/ad1s1b


umount /honban



geom journalを起動



gjournal load



本番HDDのファイルシステムをジャーナル化してフォーマットする



gjournal label -f /dev/ada1s1a


#ここで/dev/ada1s1a.journalだとか/dev/ufsid/[英数字].journalができる


newfs -J -O 2 -L root /dev/ada1s1a.journal #(/dev/ufsid以下に対して行ってもよい)



ここで-Lでラベルをつけているのがミソ、設定が書きやすくなるのでお勧め。


ついでにswapにもラベルをつけてあげる



glabel label swap /dev/ada1s1b



一回目の起動:OSインストール


必要なファイルをインストールするため、再びマウントしてあげる。



mount /dev/ufs/root /honban



インストールはsysinstallを使うが「Option」でインストール先ディレクトリとして「/honban」を指定するのを忘れないように。


インストールはCustom->DistributionやConfigure->Distributionから行う。


/honban/etcの変更


インストール後は/etc/や/boot/以下の設定を行う必要がある。/etcは踏み台HDDの内容をコピーして、fstabを書き換えれば良い。




  • swapに関してはデバイス名を/dev/label/swapに変更。

  • 「/」に関してはデバイス名を/dev/ufs/root、オプションを「rw,noatime,async」に変更。


/honban/bootの変更


カーネルをインストールしただけでは、boot/GENERICというディレクトリ名になっているのでboot/kernelに修正する必要がある。すでに存在しているboot/kernelは空のディレクトリなので消しておく事。(まちがってboot/kernel/GENERICとなると悲しい)


loader.confに以下を足す



ahci_load="YES"


geom_label_load="YES"


geom_journal_load="YES"



二回目の起動


以上の設定がおわったら、インストール完了である。


Virtualboxの設定で、踏み台HDDを取り外して再起動して、見事起動すればOK!