昨日から今日にかけてバスでお出かけしていたのですが、その間Androidでちょこちょこ速度測定したり、宿ではWiFiルータの電源をずーっと入れてiPad2で遊んでいました。
てことで、どれくらい無駄に使えたかの結果発表。
日付 | Xperia ray | WiFiルータ | 計 |
---|---|---|---|
5月26日 | 58MB | 58MB | 116MB |
5月27日 | 85MB | 86MB | 171MB |
計 | 143MB | 144MB | 287MB |
なぜかrayとWiFiルータの転送量がよく似た数字になっていますが(これはホントに偶然)、ぜんぶ合計すると300MB弱です。それも2日間で!! いやはや、普通の生活パターンでいくと1ヶ月で500MBも使わないってのに2日で300MBとは恐れ入ります。この調子だと7日目にはデータ通信量上限に到達してしまいます。iijmioは私のペースだと無駄遣いしても月末に余りまくりますが、例えば1週間ぐらい出張が続くような人は足りなくなります。そういう人にはauとかドコモのプランの方が安心できていいのでしょうね。
FreeBSDのZFSは既にプロダクションレベルに達しており、我が家のサーバも3年以上の運用期間でノートラブルという実績があります。壊れたら修復は絶望的ですが、別デバイスにバックアップさえ取っておけばスナップショットで差分バックアップの代わりになるしデバイスを追加して容量拡張とか簡単だしそもそもファイルシステムとしては頑丈っぽいし良い事ずくめです。
そんなZFSに DEDUP というこれまたスゴい機能があるのだそうです。DEDUPというのは deduplicationだそうで、「データが重複してるとディスクがもったいないから無くしましょう」という考え。重複するから節約というのはハードリンクとかシンボリックリンクでもよく似ていますが、ZFSのそれはブロックごとに比較して重複していれば共通化するという力技。ハードリンクと違って共通化しても片方を編集した時に他方は影響を受けません(そのかわり共通でなくなるので容量は増える)。
てことで、はたしてそんなうまく機能するのか手元の環境で実験してみました。
はじめの状態toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 31K 570G 31K /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 346G 585G 37% 1.00x ONLINE -
作成したてのファイルシステムなのでサイズが非常に小さいです。この時点でのプール全体の使用量は346GB。
大きいファイルを gettoriyu# smbclient //whs2011/ドキュメント -c "get ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso"
Enter root's password:
Domain=[WHS2011] OS=[Windows Home Server 2011 7601 Service Pack 1] Server=[Windows Home Server 2011 6.1]
getting file ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso of size 4409899008 as ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso (28295.8 KiloBytes/sec) (average 28295.8 KiloBytes/sec)
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 4.11G 565G 4.11G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 350G 581G 37% 1.00x ONLINE -
smbclient経由で4GBのファイルをgetしたところ、使用量が4GBほど増えました。計算が合います。
単純コピーtoriyu# cp ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso test1.iso
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 8.22G 561G 8.22G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 355G 576G 38% 1.00x ONLINE -
DEDUPは使っていないファイルシステムなので、普通にコピーすると当然使用量が増えます。
DEDUPを有効にしてみるtoriyu# zfs set dedup=on tank/test試しにコピーしてみる
toriyu# zfs get dedup tank/test
NAME PROPERTY VALUE SOURCE
tank/test dedup on local
toriyu# cp ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso test2.iso
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 12.3G 557G 12.3G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 359G 572G 38% 1.00x ONLINE -
ん? 普通に増えてますね。DEDUPの効果は無いのでしょうか?
もう一度コピーしてみるtoriyu# cp ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso test3.iso
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 16.4G 557G 16.4G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 359G 572G 38% 2.00x ONLINE -
お、今度は zfs list では増えてるにも関わらず、zpool list では使用量が変わってませんね。DEDUPも2.00xになっています。どうやら共通化する元のブロックもdedup=onにした後で書き込まれないと効果がないようです。
cpではなく再度smbclientでgetしてみるtoriyu# smbclient //whs2011/ドキュメント -c "get ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso test4.iso"
Enter root's password:
Domain=[WHS2011] OS=[Windows Home Server 2011 7601 Service Pack 1] Server=[Windows Home Server 2011 6.1]
getting file ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso of size 4409899008 as test4.iso (23046.8 KiloBytes/sec) (average 23046.8 KiloBytes/sec)
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 20.6G 557G 20.6G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 359G 572G 38% 3.00x ONLINE -
cpと違って、今度はカーネルにすれば重複領域があることを予め知る術が無いはずですが、これまたちゃんと共通化してディスク使用量はさっきと変わりありません。なかなか優秀です。
snapshotを作ってファイルを削除toriyu# zfs snapshot tank/test@snapshot1
toriyu# ls
ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso
test1.iso
test2.iso
test3.iso
test4.iso
toriyu# rm *.iso
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 20.6G 557G 39K /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 359G 572G 38% 3.00x ONLINE -
ZFSを使っている方にはよくお分かりかと思いますが、snapshotを作成してファイルを削除しても容量は減りません。
再び smbclient で gettoriyu# smbclient //whs2011/ドキュメント -c "get ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso test5.iso"
Enter root's password:
Domain=[WHS2011] OS=[Windows Home Server 2011 7601 Service Pack 1] Server=[Windows Home Server 2011 6.1]
getting file ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso of size 4409899008 as test5.iso (25552.0 KiloBytes/sec) (average 25552.0 KiloBytes/sec)
toriyu# zfs list tank/test
NAME USED AVAIL REFER MOUNTPOINT
tank/test 24.7G 557G 4.11G /tank/test
toriyu# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
tank 931G 359G 572G 38% 4.00x ONLINE -
嬉しいことに、削除済みでsnapshotの中にのみ存在する領域でも有効のようです。
ということで、実験した結果のまとめ。
dedupプロパティはファイルシステム毎に設定できますから、内容が重複することがわかっており容量削減が重要な用途の場合は便利に使えるのでしょう。(どんな用途か思いつきませんけど ^^)
06/13 | ( 通りすがり ) |
pdumpfsを使うような用途で生きてくるかも知れませんね。 ハードリンクでは共有できなパーミッションが音なるケースでもメタデータとは独立なのでdedupなら有効ですし。 | |
06/13 | ( たかたに ) |
なるほど、pdumpfsですか。と言いつつググる(笑) うちではzfsのスナップショットを世代バックアップの代わりに使ってますが、確かにpdumpfsで単一ファイルを更新していく時(メールボックスとか)に効果ありそうですね。勉強になります。 | |
06/14 | ( 通りすがり ) |
「pdumpfsを使うような用途」という言い回しは判りにくかったです。 pdumpfs(やrsyncの--link-dest)はハードリンクで重複冗長を避けています(ですからdedupとは機能がダブります)。 ハードリンクは、リンク個数に上限がある、メタデータ(owner permisshin ctime mtime atime 諸々)の1つでも違っても共有できない、fsを跨いでリンクできない、また1バイトでも異なると共有できない等の制約がありますがdedupはこれらがありません。 使い所に悩みますが、jailでユーザランドの複製を多量に必要なケースで劇的にディスク消費を抑えられそうですね。 |
新車から丸7年、3回目の車検です。代車で借りた アルト・エコがすごく良かったのでお別れするのが名残惜しいのですが、自分の車に乗り換えてみると、やっぱりこっちのほうが簡単に運転できます。
さて、今回は点検時にちょこちょこ交換部品もあったようで、メニューも盛りだくさんです。
マフラー以外は小さいものばかりなのですが、GSとかの車検と違って 必要な箇所はきっちり見てくれるのが良いですね。現時点では車検を通すのは次回が最後になるかな〜という気がするのですが、乗るからにはコンディションは良い状態を保ちたいので、整備には万全を期しておきましょう。
VirtualBoxで初期イメージを作成するときは間違いなくGUIのほうが便利だと思うのですが、FreeBSDでむにゃむにゃするときはX11が無い環境のほうが普通(?)なわけで、コマンドラインだけで作成するときの覚え書きです。
[想定環境]で、VirtualBoxは一般ユーザで走らせて、仮想HDDのファイルはホームディレクトリ直下に作成するものとします。ついでにWindowsのインストールDVDのイメージもホームディレクトリに置いておくものとします。
□ 仮想PCを作成> VBoxManage createvm -name "testwhs" -register
Virtual machine 'testwhs' is created and registered.
UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Settings file: '/home/takatani/VirtualBox VMs/testwhs/testwhs.vbox'
> VBoxManage modifyvm "testwhs" --memory 2048
> VBoxManage modifyvm testwhs --chipset "ich9"
*** I/O APIC must be enabled for ICH9, enabling. ***
> VBoxManage modifyvm testwhs --ostype Windows2008_64
> VBoxManage storagectl testwhs --name hda --add sata --controller IntelAHCI --bootable on
最後の行では'hda'という妙な命名をしていますが、これはコントローラに付けた名前です。
□ 仮想HDDを作成> VBoxManage createhd --filename "testwhs.vdi" --size 160000□ 仮想HDDと仮想DVDをマウント
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Disk image created. UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
> VBoxManage storageattach testwhs --storagectl hda --port 0 --device 0 --type hdd --medium testwhs.vdi□ 仮想PCのNICを追加
> VBoxManage storageattach testwhs --storagectl hda --port 1 --device 0 --type dvddrive --medium ~/ja_server_install_disc_windows_home_server_2011_x64_dvd_660489.iso
> VBoxManage modifyvm testwhs --boot1 dvd --boot2 disk --boot3 none
> VBoxManage modifyvm testwhs --nic1 bridged --nictype1 82540EM --bridgeadapter1 em0
em0に関してはホストマシンのインタフェイスによってbge0とかに変わります。bridged にしておくと同一セグメントのネットワークからは実機が追加されたように見えるので扱いやすいと思います。82540EM というのは他の物でも良いと思いますが、選択を間違えるとネットワークの速度がものすごく遅くなるようです。
以上で作成作業はおしまい。
> VBoxHeadless --startvm testwhs --vnc --vncport 5900 --vncpass hogehoge
等と実行すれば、VNCクライアント(例:Chiken of the VNC)からインストール作業を行えます。接続時にはホストマシンのIPアドレスを指定してください。VNCではマウスカーソルがずれて使いにくいので、インストールが済んでしまえば後々のメンテナンスはWindowsの場合 リモートデスクトップの方が便利です。
□ その他本日は会社〜プールの90kmの道のりをアルト・エコで走ってまいりました。てことで、昨日は分からなかったことがいろいろ分かりましたのでちょっと書いておきます。
といった感じ。アイドリングストップというのは思ってた以上に快適ですよ。軽自動車に乗ったことがない人は知らないと思いますが、1200cc程度の小型自動車のエンジンがだいたい4気筒なのに対して660ccの軽自動車のエンジンはほとんど3気筒です。普通に走るぶんには違いはわからないと思いますが、停車時にエンジンの回転数が下がってくると、3気筒では結構振動が大きくなります。軽自動車だから仕方がない・・・と諦めていたところなのですが、エンジンを止めてしまうという離れ業で欠点を克服する方法があったとは!! (笑) 一時期 私も手動でアイドリングストップしたことがありましたが、手動だと右左折前にはエンジン止められないし、信号待ちで一番前にいる時は早めにエンジンかけなきゃいかんと気を使うしナビは再起動するしで、燃費マニアでなければ到底選ばない手段でした。が、アイドリングストップ車は手動と違ってなにも気にする必要はありません。さらに停車中に平均燃費がどんどん下がっていくという燃費マニアにとっての最大の屈辱に耐える必要もありません(^_^)。いやはや、次に買うんだったら絶対アイドリングストップモデルがいいなぁと思った次第です。
新車を購入しました。
というのはもちろん嘘で、うちのKeiの車検の代車です。
自分の車以外では会社のトラックにしか乗ったことがない人なのでぜんぜん知らなかったのですが、アルトエコってなかなかいい車なのです。
車屋さんから乗って帰っただけの数キロの道のりなのであんまり詳しいことはわかんないのですが、運転しにくいとは感じませんでした。MTと違ってCVTなので発進時とか上り坂ではエンジンの回転数が(軽自動車だから)異様に高くなるのですが、加速が悪いのかな〜と思ってスピードメーターを見たらいつの間にか60km/hを超えてたりするわけで、CVTでNAとはいえ普通に走るぶんには全然困らないんだなーと思いました。
まぁうちの車はあと4年ぐらい乗る予定にしていますが、乗り換えるときにはNAでもCVTでもOKかな? というのがわかったのは収穫でした。
我が家のFreeBSD機は VirtualBox を用いて Windows Home Server 2011 をインストールしています。元々サーバは24時間稼働ですしメモリやHDDリソースもふんだんにあるので、ここにWindowsを入れておけば電気代の節約になります。
という運用が出来ていたのはじつは何ヶ月も前。ports の VirtualBox の版が3から4に変わった少しあとぐらいに FreeBSD を8.2から9.0に更新すると共にVirtualBoxが動かなくなってしまいました。初めは FreeBSD が新しくなったので ports のメンテナンス待ちかな〜と思っていたのですが、いくら待っても動くようになりません。で、試しに別のFreeBSD9.0に VirtualBox を入れてみるとちゃんと動くのです(笑)。これは弱りました。
動かないというのは、具体的にはこんなふうになります。
takatani(toriyu): {118} VBoxManage list
VBoxManage: error: Failed to create the VirtualBox object!
VBoxManage: error: Code NS_ERROR_FACTORY_NOT_REGISTERED (0x80040154) - Class not registered (extended info not available)
VBoxManage: error: Most likely, the VirtualBox COM server is not running or failed to start.
で、まぁそれなりのキーワードで検索しても解決方法が見つからないのでずいぶん長く放置されていた訳ですが、先日こちらのページが偶然ひっかかりまして、物は試しに
% unsetenv LC_CTYPE
してみたんですよ。するとどうでしょう、ちゃんと動くではないですか。
ちなみに、LC_CTYPE には元々 `ja_JP.UTF-8' が入っています。VirtualBox を始動するときに LC_CTYPE は必要無いですから、Cを入れるなり消すなりすれば問題なく VirtualBox が使えます。はふっ、長い闘いだった・・・。環境変数だったとは。しかも動作に関係ない環境変数。とほほほ。
ちなみに、別のFreeBSDでは LC_CTYPE に ja_JP.UTF-8 がセットされてても動いていますからホントの原因は別のところにあるのだと思うのですが、ports再構築を複数回重ねても古いライブラリを手作業でちまちま消しても直らないので、原因究明は諦めました。とりあえず動けばいいです(^_^)。
# 数カ月ぶりに Windows 機のバックアップが取れましたよ