linux inotify+rsync+sshデータ時同期
参照:
Inotifyはファイルシステムのイベントモニタリングメカニズムであり、間もなくリリースされるLinuxカーネルにdnotifyの有効な代替として含まれる予定です.dnotifyは、カーネルがサポートしているファイルモニタリングメカニズムです.Inotifyは、セキュリティとパフォーマンスに限らず、さまざまなファイルモニタリングのニーズを満たす強力で微細な非同期メカニズムです.次に、inotifyのインストール方法と、ファイルシステムイベントに応答するための例示的なユーザ空間アプリケーションの構築方法について説明します.
ファイルシステムイベントモニタリングは、ファイルマネージャからセキュリティツールまでのさまざまなプログラムに必要ですが、dnotify(初期カーネルの標準)にはいくつかの限界があり、より完全なメカニズムが期待されています.そんな期待を抱いて、私たちは発見しました.
inotifyは、より現代的なファイルシステムイベント監視代替品である.
なぜinotifyを使うのですか?
dnotifyの代わりにinotifyを使用する理由はたくさんあります.最初の理由は、dnotifyが変更の有無を監視するディレクトリごとにファイル記述子を開く必要があるからです.複数のディレクトリを同時に監視すると、各プロセスのファイル記述子の制限に達する可能性があるため、多くのリソースが消費されます.
これに加えて、ファイルディスクリプタはディレクトリをロックし、サポートされているデバイスのアンインストールは許可されません.これは、リムーバブルメディアが存在する環境で問題が発生します.inotifyを使用すると、アンインストールされたファイルシステム上のファイルを監視している場合、監視は自動的に削除され、アンインストールイベントが受信されます.
dnotifyがinotifyに及ばない第2の原因はdnotifyが少し複雑であることである.dnotifyインフラストラクチャを使用する単純なファイルシステムのモニタリング粒度は、ディレクトリレベルにとどまることに注意してください.dnotifyを使用してより細かい粒度のモニタリングを行うには、アプリケーション・プログラマは、モニタリングされたディレクトリごとに1つを保持する必要があります.
Inotifyのもう一つの利点は、ファイル記述子を基本インタフェースとして使用し、アプリケーション開発者に使用させることです.
inotifyは、これらの問題をより優雅なAPIを提供することによって解決し、このAPIは、最小限のファイル記述子を使用し、より細かい粒度の監視を確保する.inotifyとの通信は、デバイスノードを介して提供される.以上の理由から、Linux 2.6プラットフォーム上のファイルを監視するには、inotifyが最も賢明な選択です.
[url]http://www-128.ibm.com/developerworks/cn/linux/l-inotify.html#N10081[/url]
本文:
sotfware: inotify-tools-3.13.tar.gz
OS: ubuntu server 8.10
server1: 192.168.6.2
server2: 192.168.6.3
需要server 1ディレクトリ/home/ludy/rsync時同期server 2/home/ludy
インストール手順:
1.まず、あなたのカーネルがinotifyをサポートしていることを確認します.カーネルにパッチを適用しない場合は、一般的にカーネルが2.6.3以上でサポートされています.運転を確認できます
ludy@server1:~$ls -l/proc/sys/fs/inotify/
総使用量0
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_queued_events
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_user_instances
-rw-r--r-- 1 root root 0 2008-12-16 09:07 max_user_watches
なければinotify~をインストールします
2.インストールソフトウェアinotify-tools-3.13.tar.gz
ludy@server1:~$ tar zxvf inotify-tools-3.13.tar.gz
ludy@server1:~$ cd inotify-tools-3.13
ludy@server1:~$ ./configure --prefix=/usr/local/inotify
ludy@server1:~$ make
ludy@server1:~$ make install
2.SSH KEYを生成しserver 1 sshがserver 2にアクセスするためにパスワードが不要~
ludy@server1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/home/ludy/.ssh/id_rsa)://入力リターン
Enter passphrase(empty for no passphrase)://パスワードを入力して車に戻る
Enter same passphrase again://再入力確認後に戻る
Your identification has been saved in/home/ludy/.ssh/id_rsa.
Your public key has been saved in/home/ludy/.ssh/id_rsa.pub.
The key fingerprint is:
f1:35:4e:88:11:f1:c4:5a:7a:c9:2a:90:d3:5e:0a:6f ludy@ludy
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
| ++. |
| =o. |
| o o=o.+ |
| = . +o++ . |
| * oSo. . |
| E . |
| . . |
| |
| |
+-----------------+
3.ユーザーディレクトリの下にあります.ssh/id_rsa.pubはserver 2のrootにコピーします(私が作ったテストなのでrootを使っていますが、rootを使わないほうが危険です~)
ludy@server1:~/.ssh$ scp id_rsa.pub [email protected]:~/.ssh
コピーした後、server 2 id_に入ります.rsa.pub名前をauthorizedに変更keys
root@server2:~/.ssh$ mv id_rsa.pub authorized_keys
root@server2:~/.ssh$ shown root:root authorized_keys//利用者rootを変更
root@server2:~/.ssh$ chmod 600 authorized_keys//権限変更
4.server 1でshellスクリプトを作成する
cat inosync.sh
#!/bin/sh
SRC=/home/ludy/rsync/
[email protected]:/home/ludy
INWT=/usr/local/inotify/bin/inotifywait
RSYNC=/usr/bin/rsync
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
rsync -aHqzt $SRC $DST
done
説明します
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
rsync -aHqzt --delete $SRC $DST
-mは常に傍受している
-rは再帰ビューディレクトリ
-qはイベントをプリントアウト~
-e create,move,delete,modify
移動削除ライトイベントの作成の傍受
rsync -aHqzt $SRC $DST
-aアーカイブモード
-Hハードコネクションの保存
-q非エラーメッセージの抑制
-z圧縮ファイルデータ転送中
-tメンテナンス変更時間
-delete余分なファイルに削除
5.テスト
ludy@server1:~$ ./inosync.sh &
ludy@server1:~$ cd rsync
ludy@server1:~/rsync$ touch asdfa
サーバ2マシンで表示
root@server2:/home/ludy$ ls
asdfa
注意、初めてのSSH接続ではパスワードを一度入力する必要があるかもしれませんが、後で入力する必要はありません~
Inotifyはファイルシステムのイベントモニタリングメカニズムであり、間もなくリリースされるLinuxカーネルにdnotifyの有効な代替として含まれる予定です.dnotifyは、カーネルがサポートしているファイルモニタリングメカニズムです.Inotifyは、セキュリティとパフォーマンスに限らず、さまざまなファイルモニタリングのニーズを満たす強力で微細な非同期メカニズムです.次に、inotifyのインストール方法と、ファイルシステムイベントに応答するための例示的なユーザ空間アプリケーションの構築方法について説明します.
ファイルシステムイベントモニタリングは、ファイルマネージャからセキュリティツールまでのさまざまなプログラムに必要ですが、dnotify(初期カーネルの標準)にはいくつかの限界があり、より完全なメカニズムが期待されています.そんな期待を抱いて、私たちは発見しました.
inotifyは、より現代的なファイルシステムイベント監視代替品である.
なぜinotifyを使うのですか?
dnotifyの代わりにinotifyを使用する理由はたくさんあります.最初の理由は、dnotifyが変更の有無を監視するディレクトリごとにファイル記述子を開く必要があるからです.複数のディレクトリを同時に監視すると、各プロセスのファイル記述子の制限に達する可能性があるため、多くのリソースが消費されます.
これに加えて、ファイルディスクリプタはディレクトリをロックし、サポートされているデバイスのアンインストールは許可されません.これは、リムーバブルメディアが存在する環境で問題が発生します.inotifyを使用すると、アンインストールされたファイルシステム上のファイルを監視している場合、監視は自動的に削除され、アンインストールイベントが受信されます.
dnotifyがinotifyに及ばない第2の原因はdnotifyが少し複雑であることである.dnotifyインフラストラクチャを使用する単純なファイルシステムのモニタリング粒度は、ディレクトリレベルにとどまることに注意してください.dnotifyを使用してより細かい粒度のモニタリングを行うには、アプリケーション・プログラマは、モニタリングされたディレクトリごとに1つを保持する必要があります.
stat
構造のキャッシュ.ユーザ空間のstat
構造キャッシュは、通知信号を受信したときにディレクトリがどのように変化したかを明確に決定するために必要である.通知信号を取得すると、stat
構造のリストであり、最新の状態と比較される.明らかに、この技術は理想的ではない.Inotifyのもう一つの利点は、ファイル記述子を基本インタフェースとして使用し、アプリケーション開発者に使用させることです.
select
およびpoll
は、デバイスを監視するために使用される.これにより、有効な多重I/OとGlibとのmainloop
の統合.逆に、dnotifyが使用する信号は、プログラマーを悩ませ、優雅ではないことが多い.inotifyは、これらの問題をより優雅なAPIを提供することによって解決し、このAPIは、最小限のファイル記述子を使用し、より細かい粒度の監視を確保する.inotifyとの通信は、デバイスノードを介して提供される.以上の理由から、Linux 2.6プラットフォーム上のファイルを監視するには、inotifyが最も賢明な選択です.
[url]http://www-128.ibm.com/developerworks/cn/linux/l-inotify.html#N10081[/url]
本文:
sotfware: inotify-tools-3.13.tar.gz
OS: ubuntu server 8.10
server1: 192.168.6.2
server2: 192.168.6.3
需要server 1ディレクトリ/home/ludy/rsync時同期server 2/home/ludy
インストール手順:
1.まず、あなたのカーネルがinotifyをサポートしていることを確認します.カーネルにパッチを適用しない場合は、一般的にカーネルが2.6.3以上でサポートされています.運転を確認できます
ludy@server1:~$ls -l/proc/sys/fs/inotify/
総使用量0
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_queued_events
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_user_instances
-rw-r--r-- 1 root root 0 2008-12-16 09:07 max_user_watches
なければinotify~をインストールします
2.インストールソフトウェアinotify-tools-3.13.tar.gz
ludy@server1:~$ tar zxvf inotify-tools-3.13.tar.gz
ludy@server1:~$ cd inotify-tools-3.13
ludy@server1:~$ ./configure --prefix=/usr/local/inotify
ludy@server1:~$ make
ludy@server1:~$ make install
2.SSH KEYを生成しserver 1 sshがserver 2にアクセスするためにパスワードが不要~
ludy@server1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/home/ludy/.ssh/id_rsa)://入力リターン
Enter passphrase(empty for no passphrase)://パスワードを入力して車に戻る
Enter same passphrase again://再入力確認後に戻る
Your identification has been saved in/home/ludy/.ssh/id_rsa.
Your public key has been saved in/home/ludy/.ssh/id_rsa.pub.
The key fingerprint is:
f1:35:4e:88:11:f1:c4:5a:7a:c9:2a:90:d3:5e:0a:6f ludy@ludy
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
| ++. |
| =o. |
| o o=o.+ |
| = . +o++ . |
| * oSo. . |
| E . |
| . . |
| |
| |
+-----------------+
3.ユーザーディレクトリの下にあります.ssh/id_rsa.pubはserver 2のrootにコピーします(私が作ったテストなのでrootを使っていますが、rootを使わないほうが危険です~)
ludy@server1:~/.ssh$ scp id_rsa.pub [email protected]:~/.ssh
コピーした後、server 2 id_に入ります.rsa.pub名前をauthorizedに変更keys
root@server2:~/.ssh$ mv id_rsa.pub authorized_keys
root@server2:~/.ssh$ shown root:root authorized_keys//利用者rootを変更
root@server2:~/.ssh$ chmod 600 authorized_keys//権限変更
4.server 1でshellスクリプトを作成する
cat inosync.sh
#!/bin/sh
SRC=/home/ludy/rsync/
[email protected]:/home/ludy
INWT=/usr/local/inotify/bin/inotifywait
RSYNC=/usr/bin/rsync
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
rsync -aHqzt $SRC $DST
done
説明します
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
rsync -aHqzt --delete $SRC $DST
-mは常に傍受している
-rは再帰ビューディレクトリ
-qはイベントをプリントアウト~
-e create,move,delete,modify
移動削除ライトイベントの作成の傍受
rsync -aHqzt $SRC $DST
-aアーカイブモード
-Hハードコネクションの保存
-q非エラーメッセージの抑制
-z圧縮ファイルデータ転送中
-tメンテナンス変更時間
-delete余分なファイルに削除
5.テスト
ludy@server1:~$ ./inosync.sh &
ludy@server1:~$ cd rsync
ludy@server1:~/rsync$ touch asdfa
サーバ2マシンで表示
root@server2:/home/ludy$ ls
asdfa
注意、初めてのSSH接続ではパスワードを一度入力する必要があるかもしれませんが、後で入力する必要はありません~