btrfs は Linux 2.6.29 で メインラインに取り込まれ、汎用ファイルシステムとしては一番先進的なものになっている。 CopyOnWrite ベースで作られており、スナップショット、サブボリューム、透過圧縮、 ファイルシステム側での RAID サポート、オンラインデフラグなどなど、 他には無い機能が満載。
しかし、今すぐ手元の ext* を置き換えられるかというと、 japan.internet.com の記事でも触れられているように、まだ 壊れた時にちゃんと直す手段がない など、 いきなりメインのファイルシステムを置き換えるには結構不安な面もあったり。
でも、バックアップ目的なら、今すぐ試せてしかも非常に快適。 バックアップなら最悪ファイルシステムが壊れても、本体と同時でなければもう一度とり直せば良いだけだしね。 ただもちろん、ちゃんとバックアップされているよう見えて、 実は読もうとするとデータが壊れている……なんてのは困るわけだけど…… 今回はそれは考えない!
btrfs + rsync を使って今回やってみる file to file 形式のバックアップは、 faubackup, pdumpfs, rsync --link-dest といったような、 ハードリンクを使う増分バックアップツールに近い。 でも、比較するとかなりのメリットがある。
ただし、デメリットもある。
まあでも、比較すれば十分じゃないかな。
まず、必要なものリスト。
増分バックアップの為にこれを使うので、 とにかく簡単にサブボリューム機能について説明してみる。
btrfs は「サブボリューム」と呼ばれる、ファイルシステムの内部に 更にルートディレクトリと見なされるものを作成できる。 これは、(マスターボリュームをマウントしている場合)見かけ上は単に中にある ディレクトリに見えるが、ただのディレクトリとは大きな違いがある。
そして、スナップショットは内部的にはサブボリュームと同じです。 いったん作ってしまえば両者の区別はありません。マウントしたり書き込みも可能。
スナップショットとサブボリュームの違いは単に作成時だけで、以下のような感じ。
なので、「スナップショットのスナップショットのスナップショット」なども取れます。
まあ、サブボリューム/スナップショット機能を解説したら、 もう何をすればいいか分かってもらえてるでしょう! レシピはかんたん。
これだけ。
ちょっと注意しないといけないのは sync 。これをやらないと、2.6.34以前では フラッシュされていないデータを含まないスナップショットが出来てしまう。 2.6.34以前のカーネルを使っている場合は忘れずにやっておく必要がある。 それ以降のものなら省略できる。 btrfs には 1 ファイルシステムだけ sync する機能があるので、これを使ってsyncする。
別に詰まる事はないと思うのだけど、 一応コマンド書いてみよう。
まずファイルシステムを作る。
mkfs.btrfs /dev/sdi1
/etc/fstab に追記。compress,noatime はお好みで。
/dev/sdi1 /backup btrfs defaults,compress,noatime 0 0
おおっと待った! /dev/sd* ではなく、UUID で書く事をお勧めしときます。 調べるには btrfs filesystem show で。
UUID=7e727a57-cb18-4869-8b50-5127a9cfb8ac /backup btrfs defaults,compress,noatime 0 0
マウント。
mkdir -p /backup mount /backup
サブボリュームを作ろう。
mkdir -p /backup/myhost/etc btrfs subvolume create /backup/myhost/etc/cur
Do rsync! (必要なら ionice とか付けてね)
rsync -avcHSX --del /etc/ /backup/myhost/etc/cur/
これで全部ファイルがコピーされたので、あとはスナップショット取るだけ。
btrfs filesystem sync /backup/myhost/etc/cur btrfs subvolume snapshot /backup/myhost/etc/cur /backup/myhost/etc/$(date +%Y-%m-%dT%H:%M:%S)
ようやく本題にたどり着いた! 上記の様に手でもできるのだけど、面倒なので スクリプトを作っておきましたぜ。 使い方は単純に
btr-backup /etc
など。後ろに rsync のオプションが渡せるので、
btr-backup /var/htdocs -C --exclude="/cache/*" btr-backup /home --exclude="/old"
と言うような事も出来ます。
リモートバックアップも対応。rsync に渡しているだけなので通常は ssh でログインします。パス無しのキーを設定しておくと good。 こんな感じ。
btr-backup remote:/etc -z
(何か rsync の説明になっているけど) ssh キーを変えたければ RSYNC_RSH を設定するか -e で。
btr-backup remote:/etc -z -e "ssh -i ~/.ssh/id_backup"
もしくは
export RSYNC_RSH="ssh -i ~/.ssh/id_backup" btr-backup remote:/etc
rsync 起動しているだけなので、rsync プロトコルも使えます(多分使わないと思うけど)。
btr-backup rsync://remote/etc/
という感じ。ぜひ試してみて下さい。詳しくは README を読んでね。 ……というか、単純なので多分スクリプトを読んだ方が早いけど。
自動クリーンアップ用に btr-backup-clean と言うのもあります(based on pdumpfs-clean/hlbackup-clean)。
これを書きたかっただけなのに、解説をしていたら疲れて段々訳の分からない 文章になってきた。よろしければツッコミお願いします。あ、パッチもぜひ。
b-mobile Wifi をしばらく使ってみたのでそのレポートでも。
似た製品では PocketWifi が有名だけど、携帯電話の インターネット接続を Wifi に変換(?)してくれる機器。 小型のバッテリー内蔵 3Gルータ。
b-mobile (日本通信) から販売されているけど、中身は ZTE の MF30 の OEM 版のようだ。 一応 b-mobile が用意したマニュアルはついてくるが、本当に最低限の事しか書いていない。
PocketWiki と違ってロックフリーなので、好きな SIM をさして使うことができる。 ……といっても、国内で売られている単体 SIM は b-mobile U300 くらいなので、一般的にはそれをさして使うことになるのだけど。
価格は同様の PocketWifi よりも安い。が、光ポータブルと比べれば高いかな。
http://192.168.0.1/ に繋いで web で設定するタイプ。 あまり高度な事はできないが、とりあえず必要な物は揃っている。 3G ネットワーク周りの設定、WEPとクライアント制御、ダイアル制御など。 モバイルルータとしてはこれで十分だろう。
ただ、この設定画面、困った事に HTC desire のブラウザからだと物凄く使いにくい。 一応使えなくはないのだが、たまに横幅がどんどん伸びてゆく現象が起きる。 iPhone の Safari は一応使えるが、これもちゃんと画面遷移しない事がまれにある。
接続情報やアンテナ感度のアイコンを Ajax (? いや、ただのフレームか?)で更新しているようなのだけど、 どうもその辺りの問題の様だ。
LED の状態を見ると 3G の初期化は早そうだけど、 Wifi の AP として見えるようになるまでは1分強はかかる。 これは他の類似製品でも大体同じようだ。 頻繁に電源を切らないなら問題ないけど、決して早くはないね。
公称4時間だけど、まあそんなもんだろうか。 使ってみた感じ大きく下回るということはない。
このサイズで4時間は凄いとは思うのだけど、実際旅行などで 1日使い倒すには全然足らない。 そういう用途ではモバイルブースターなど外部のバッテリーに頼るしかないかな。
逆にカフェや電車などで時々使うくらいなら、4時間もあれば十分すぎ。
何も考えずに SIM をさせば使える。 一番最初に U300 自体を activate するのに電話はしないといけないが、 それさえ終わって入ればあとは SIM スロットにさすだけ。 この b-mobile の APN だけは最初から設定されている。
ただ、ルータのせいじゃないのだけど、U300 の(と言うかドコモの) 帯域制限は結構面倒くさい。ssh や scp がとてつもなく遅くなるので、 あまり Unix 使いとしては嬉しくないね。 (一応 port 443(HTTPS) を通してどこかに VPN を張れば制限を回避出来るけど、ちと面倒。)
香港のキャリアの一つ、3(Three) のプリペイド SIM を刺してみた。 U300 の諸々の制限もないし、softbank よりよっぽど高速。 日本で使うよりずっと快適で泣ける。
U300 以外設定は入っていないので、手動で設定してやらないといけない。 3G の設定で、追加ボタンを押すと新たに APN を追加できる。
APN: ipc.three.com.hk ID: (なし) PASS: (なし) DIAL#: *99#
電話番号のところに注意。 説明などには電話番号は要らないと書いてあるのだけど、この wifi ルータは何か電話番号を入れないと設定が保存できない。 仕方ないので U300 と同じように *99# を入れておく。
設定後は「ディフォルトに設定」を押しておく。切り替わるまで多少かかるので、何度か接続失敗のダイアログが出る。 あと、一旦ディフォルトにすると編集できなくなるので、入力を間違えた場合は別のものをディフォルトに してから再編集する必要あり。ちょっと面倒くさい。
標準ではデータ通信方式が WCDMA しか有効になっていないので、 3G の電波が飛んでいない地域に行く場合は、設定を 「自動」 に切り替える必要がある点に注意。GSM で通信している場合は、 携帯ネットワークのインジケータ(右のやつ)が赤色に点灯する。
両方有効にすると、もしかしたら電池使用量の増加とか ハンドシェイクの低速化などがあるのかもしれないけど、 少なくとも気になるレベルでは起きなかった。
GSM を使う可能性がある場合は、忘れずに設定を切り替えておこう。
日本で HTC desire の SIM をさして使ってみた。
APN: smile.world ID: dna1trop PASS: so2t3k3m2a DIAL#: *99#
正式には公開されていないので、ちまたに流れる iPhone の APN 情報を入れてみた。これで問題なく繋がり、ちゃんと パケット定額の中に入っている様だ。 ただ、もしかしたら定額を外れる可能性があるので、その辺の リスクは考えた上で使う必要がある点に注意。
ここからはおまけ……というか、ほぼ役に立たない情報。
Windows で接続すると不明なデバイスが見える。 モデムとして動く様なのだが、残念ながらドライバが提供されていない。
VendorID は 0x19d2, ProductID は 0x0117。インターフェースは3つ 見えるが、class は全部 vender specific (0xff) になっている。
もし Linux kernel 2.6.35 以降を使っているのであれば、 USBコネクタを繋いで暫く待っていると usb-wwan がアタッチされる。
3つの tty デバイスとして見え、最初の一つがコントロール用、 次の二つがモデムに見える。何で2つ見えるのかは謎。機能が違うのか?
で、とにかくモデムに見える2のデバイスは、とりあえず AT コマンドに応答するまでにはなるんだけど……。
状態を取ることはできるものの、今のところ接続には成功しなかった。
NetworkManager + modem-manager では、ZTE のプラグインを 読む様に設定を変えても、エラーで繋がらない。
検索して適当に以下の設定を作り、wvdial も試してみたけど繋がらない。
[Dialer Defaults] Modem = /dev/ttyUSB2 ISDN = off Modem Type = USB Modem Baud = 460800 Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 Init3 = AT+CGDCONT=16,"IP","ipc.three.com.hk" Phone = *99# Password = * Username = * Stupid Mode = on Auto DNS = on Dial Command = ATD Check Def Route = on Compuserve = off
このようにエラーになる。
sugi@shine:~% wvdial -C three.conf --> WvDial: Internet dialer version 1.60 --> Cannot get information for serial port. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 ATQ0 V1 E1 S0=0 &C1 &D2 OK --> Sending: AT+CGDCONT=1,"IP","ipc.three.com.hk" AT+CGDCONT=1,"IP","ipc.three.com.hk" OK --> Modem initialized. --> Sending: ATD*99# --> Waiting for carrier. ATD*99# ERROR --> Invalid dial command. --> Disconnecting at Mon Sep 20 00:11:26 2010
AT+CEER を試すと "Missing or unknown APN" と言われるので、何か初期化設定が足りないのか……?