Anything-sync-daemon
関連記事
anything-sync-daemon (asd) はユーザーが指定したディレクトリを tmpfs で管理して定期的に物理ディスク (HDD/SSD) に同期させる、とても小さな擬似的なデーモンです。シンボリックリンクと rsync で tmpfs のコピーとメディアのバックアップを同期させるという革新的な利用法によります。さらに、asd にはクラッシュからの復元機能が存在します。
Asd と Psd
Asd のメリット
asd の設計目標:
- 完全に透過的に使用可能
- 物理ディスクの損耗を減らす
- 速度
同期元を tmpfs (RAM ディスク) に再配置して、ファイルを使用するのに伴う I/O の猛襲の対象を物理ドライブから RAM に変更することにより、物理ドライブの消耗を抑えつつシステムの速度や反応性を劇的に高められます。物理ディスクのアクセス時間はミリ秒単位なのに対してRAM のアクセス時間はナノ秒オーダーです。0の数が6個も違うので、1000000倍高速となります。
セットアップとインストール
anything-sync-daemon はパッケージからインストールできます。
/etc/asd.conf の編集
(パッケージに含まれている) /etc/asd.conf
で設定を行います。
- 最低でも、asd で管理するディレクトリを WHATTOSYNC で定義してください。構文は下を参照。
- 任意で VOLATILE 変数をアンコメントして使うことでディストロの tmpfs の場所を定義することができます。
- 任意で overlayfs を利用することで同期を高速化させてメモリの使用量を減らすことができます。このオプションを使う場合、'overlay' (Arch のデフォルト) または 'overlayfs' (Ubuntu <15.05) カーネルモジュールを利用するようにカーネルが設定されている必要があります。この機能の詳細は下の FAQ を見て下さい。
例:
WHATTOSYNC=('/var/lib/monitorix' '/srv/http' '/foo/bar')
または:
WHATTOSYNC=( '/var/lib/monitorix' '/srv/http' '/foo/bar' )
asd を使う
プレビューモード (parse)
'parse' オプションを使うことで /etc/asd.conf
に基づいて asd が何を行うのかを正確に表示することができます。ディレクトリのサイズやパス、スナップショットが作成されているかどうかなどの情報も出力されます。次のように呼び出して下さい:
$ asd p Anything-sync-daemon v5.61 on Arch Linux. Systemd service is currently active. Systemd resync service is currently active. Overlayfs v23 is currently active. Asd will manage the following per /run/asd.conf settings: owner/group id: root/0 target to manage: /srv/http/serve sync target: /srv/http/.serve-backup_asd tmpfs target: /dev/shm/asd-root/srv/http/serve dir size: 21M overlayfs size: 15M recovery dirs: 2 <- delete with the c option dir path/size: /srv/http/.serve-backup_asd-crashrecovery-20141105_124948 (17M) dir path/size: /srv/http/.serve-backup_asd-crashrecovery-20150124_062311 (21M) owner/group id: facade/100 target to manage: /home/facade/logs sync target: /home/facade/.logs-backup_asd tmpfs target: /dev/shm/asd-facadey/home/facade/logs dir size: 1.5M overlayfs size: 480K recovery dirs: none
クリーンモード
クリーンモードを使うと保存されているスナップショットを全て削除します。削除しても問題ない場合にのみ実行してください。
# asd c
Anything-sync-daemon v5.61 on Arch Linux. Deleting 2 crashrecovery dir(s) for sync target /srv/http/serve /srv/http/.serve-backup_asd-crashrecovery-20141105_124948 /srv/http/.serve-backup_asd-crashrecovery-20150124_062311
asd を実行
同期したり同期を解除するのに /usr/bin/anything-sync-daemon
を直接実行してはいけません。代わりにサービスファイルを使って下さい。
systemd のサービスファイルとタイマーが両方入っており、これらを使って asd を制御することができます。タイマーは tmpfs をディスクにコピーバックさせ、一時間に一度実行されます。タイマーは asd.service
によって勝手に起動します。
起動時・シャットダウン時に実行させるために asd.service
を起動・有効化してください (強く推奨)。
同期を行う頻度を変更 (任意)
パッケージに含まれているタイマーでは1時間ごとに同期が行われます。systemd ユニットを編集することで同期間隔を変更することが可能です。以下の例では10分ごとに同期するようにタイマーを変更しています:
/etc/systemd/system/asd-resync.timer.d/frequency.conf
[Unit] Description=Timer for Arofile-sync-daemon - 10min [Timer] # Empty value resets the list of timers OnUnitActiveSec= OnUnitActiveSec=10min
オプションについては systemd.timer(5) を見て下さい。
FAQ
overlayfs とは何か、どうして使ったほうが良いのか?
Overlayfs は Linux カーネル 3.18.0 でメインラインに取り込まれたシンプルなユニオンファイルシステムです。asd バージョン 5.54 から、overlayfs を使うことで asd の tmpfs 領域のメモリフットプリントを減らしたり、同期を高速化させることができるようになっています。オーバーレイマウントでは、全てのデータではなく、変更が加えられたデータだけが書き出されるというところがミソです。overlayfs モードで実行した場合、asd がデフォルトで使用する同一の復帰機能も有効になります。Overlayfs モードは /etc/asd.conf
の USE_OVERLAYFS="yes"
という行をアンコメントしてデーモンを再起動することで有効にできます。
Linux カーネルで利用できる overlayfs にはディストロによって複数のバージョンが存在します。バージョン 22 以前ではモジュールは 'overlayfs' と呼ばれていましたが、新しいバージョン (23 以上) ではモジュールの名前は 'overlay' になっています ('fs' が取られた)。Asd はあなたの使用しているカーネルで利用できる overlayfs を自動的に検出します。
システムがクラッシュして同期がされませんでした。どうすればいいですか?
運が良ければ、同期しているディレクトリの"最新の問題がない"バックアップがファイルシステムに残っている可能性があります。asd
の再起動時に、tmpfs コピーのシンボリックリンクに問題がないか確認するチェックが行われます。問題がなかった場合、asd は"最新の問題ない"バックアップのスナップショットを作成して元に戻します。これは asd によってデータが失われないようにするためのサニティーチェックであり、データが消失した場合、他に原因があります。
スナップショットはどこにありますか?
同期元と同じディレクトリにスナップショットはあり、リカバリが作成されたときの時刻のタイムスタンプが付いています。例えば、/foo/bar
のスナップショットは /foo/.bar-backup_asd-crashrecovery-20141221_070112
などとなります。もちろん、日時_時間の部分は変わってきます。
スナップショットを復元するにはどうすればいいですか?
asd
を停止してください。- 同期しているディレクトリのシンボリックリンクがないことを確認します。存在する場合は、asd が何らかの理由で正しく停止していません。
- 同期元の"問題がある"コピーをバックアップに移動してください (やみくもに削除してはいけません)。
- スナップショットディレクトリを同期元にコピーしてください。
/foo/bar
を使っている場合:
$ mv /foo/bar /foo/bar-bad $ cp -a /foo/.bar-backup_asd-crashrecovery-20141221_070112 /foo/bar
asd でスナップショットを自動的に削除できますか?
"clean" スイッチを付けて asd を実行すればスナップショットが削除されます。
サポート
気づいたことやコメントなどは 議論スレッド に投稿してください。