Anything-sync-daemon

提供: ArchWiki
2020年8月30日 (日) 23:28時点におけるKgx (トーク | 投稿記録)による版 (パッケージのリンク切れ修正)
ナビゲーションに移動 検索に移動

関連記事

anything-sync-daemon (asd) はユーザーが指定したディレクトリを tmpfs で管理して定期的に物理ディスク (HDD/SSD) に同期させる、とても小さな擬似的なデーモンです。シンボリックリンクと rsync で tmpfs のコピーとメディアのバックアップを同期させるという革新的な利用法によります。さらに、asd にはクラッシュからの復元機能が存在します。

Asd と Psd

警告: ブラウザのプロファイルを同期したい場合、asd を使うことは推奨されません。代わりに、tmpfs でブラウザプロファイルを扱えるようにサニティーチェックが組み込まれている Profile-sync-daemon を使って下さい。Anything-sync-daemon はそのようなチェックを行いません。特定の状況下で、ブラウザのプロファイルデータが消失する可能性があります。警告しましたよ。

Asd のメリット

asd の設計目標:

  1. 完全に透過的に使用可能
  2. 物理ディスクの損耗を減らす
  3. 速度

同期元を 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 を見て下さい。
ノート: VOLATILE の設定についてはデフォルト値の "/dev/shm" で問題ないはずです。bleachbit などのソフトウェアを asd と一緒に使う場合、/tmp に保存されているファイルを bleachbit が削除することがあるので危険です。このため /dev/shm を設定することが推奨されています。

例:

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

クリーンモード

クリーンモードを使うと保存されているスナップショットを全て削除します。削除しても問題ない場合にのみ実行してください。

ノート: 同期元の所有者が root や他のユーザーである場合、asd でクリーンモードを実行すると、同期元のパーミッションのエラーが表示されます。root で実行することでエラーを回避できます。
# 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.confUSE_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 を実行すればスナップショットが削除されます。

サポート

気づいたことやコメントなどは 議論スレッド に投稿してください。