トップ(最新) | <前

nDiki : rsync

rsync

よく使うパターン

 # 基本
 rsync -av $src $dest

 # 同期先にしかないファイルは削除
 rsync -av --delete $src $dest

 # 同期先にしかないファイルは削除 (--exclude 指定してあるものも削除)
 rsync -av --delete-excluded --exclude '...' $src $dest

 # シンボリックリンクはその先のファイル実体にする
 rsync -avL $src $dest

 # 圧縮して転送する
 rsync -avz $src $dest

 # .svn/ を除外してコピーする
 rsync -av --delete-exclude --delete .svn/ $src $dest

src と dest の指定

 rsync -av /src/foo  /dest
 rsync -av /src/foo/ /dest/foo

関連情報

  • cwRsync
    • Cygwin 上で動く rsync を使うのに必要な最低限のファイルをパッケージングしたもの。
  • Unison
  • lsyncd (live syncing (mirror) daemon)
    • inotify を使ってディレクトリツリーの変更を監視し、同期するデーモン。
  • SSH
  • バックアップ
  • rdiff-backup
  • rsnapshot

web

スポンサード リンク

Related term

2004年6月11日 (金)

Unison + Zebedee このエントリーを含むはてなブックマーク

スポンサード リンク

記事「Unison で展示会機器のセットアップ」に、

wtnabe 2004-06-10 15:51:09 rsync もまともな認証とは呼べないような気がしますが。。。同じことをするなら tcpwrapper を使うって形になるんでしょうけど、Zebedee などで認証を掛けるともっと融通が利いてなおかつセキュアなんじゃないでしょうか。

という貴重なコメントをいただく。

Zebedee 最近使ってなかったな。ホスティングサーバ(FreeBSD)がSSH接続を提供してくれていなかった時は、Linux BOX からZebedee 経由で telnet したりmirror したりしていた。

ちなみに今回の用途では、通信路の暗号化はあまり重視していない(社内ネットワークで、対象ファイルはもともと皆が閲覧できるものだし、端末の前にも座れるから)。

@ Unison Soket メソッドでのサーバ側の問題

  • 認証なし
  • 接続ホストによるアクセスコントロール不可
  • 同期対象となるローカルファイルの制限不可。

というのが問題。

c:ドライブ全体(だけでなく全てのドライブ)をパスワード無しで「読み書き可能なWindowsファイル共有」しているような感じであり、気持ち悪い。

@ rsync サーバの認証

  • パスワード認証。平文では流れない。パスワードファイルは自体は平文で管理。
  • 接続ホストによるアクセスコントロール可。
  • 同期対象となるローカルファイル/ディレクトリは指定される。

平文でパスワードが流れることはないし、Unison でもこれぐらいの認証ができれば今回の用途では充分という感じ。

@ Unison + Zebedee

Windows 同士だと結局一方は Unison を Socket メソッドで起動しなければならない。 そのポートへは認証有のZebedeeトンネルで接続するとして、外部からは直接アクセスできないようにしなければならないので面倒。

Zebedee 自体はナイスなプログラムではあるのだが、Unison と組み合わせには使えないかな。 普段使いには Unison + SSH だし。

@ Windows

本家に Windows 版もあるのか。 インストーラの形になっているがインストールされる zebedee.exe は単体でも動く。 Unison との連携は別にしても、入れておいて損はないのでこれもUSBメモリにいれておこう。

◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。


[ 6月11日全て ]

2004年7月31日 (土)

cwRsync このエントリーを含むはてなブックマーク

Windows でのファイルの同期には Unison を使ったりしているのだが双方向むけのものなので、目的によっては向かない事もある。

やっぱり rsync も使いたい。かといって Cygwinインストールするのも面倒だし。

で探してみたところ cwRsync というのを発見。 これも Cygwin 上で動くものなのだが、rsync, ssh, ssh-keygen と cygwin1.dll 等必要最低限のDLL だけがパッケージされていて気軽にインストールできるようになっている。

exe 1個で済む Unison ほど扱いやすくはないが、Cygwin を1から入れるよりはずっと楽。

 daemon-mode protocol:
 rsync -rv rsync://rsync.samba.org/ftp/unpacked/rsync/ .

 ローカル:
 rsync -rv /usr/local/aaa .

 ローカル(ドライブ指定):
 rsync -rv /cygdrive/c/usr/local/aaa .

 リモート:
 rsync -e ssh -v www.example.com:/home/naney/a.txt .

などの動作を確認。ファイル共有しているリモートファイルのUNCによる指定はうまくいかない(Cygwin ではどうやって指定する?)が、ネットワークドライブ割り当てをすればアクセスできる。


[ 7月31日全て ]

2004年8月21日 (土)

rsync の --copy-unsafe-links このエントリーを含むはてなブックマーク

man ページを見ると「コピーツリーの外へのシンボリックリンクのみ実体に置き換え、ツリー内でのリンクはそのまま維持」してくれるようなのだが、どうも期待した動作と違う。 '-l' と一緒に指定すると全てシンボリックリンクのままで、-L と一緒に指定すると全て実体に置き換えられてしまう。

ActivePerl を使用する各プロジェクト毎のPPM リポジトリを、必要とするPPM パッケージについて「ビルド済み/ダウンロード済みPPM パッケージの pool」へシンボリックリンクする事で実現している(というのを今作っている)。 ここでいくつかのプロジェクト分のPPM リポジトリを、必要な実体を無駄なくそろえて export するのに rsync が使えないかと思ったわけだが、現状だと重複して実体がコピーされてしまう。 まあディスク容量はそれほどネックではないから、これでもいいか。


[ 8月21日全て ]

2004年9月3日 (金)

cwRsyncUNC このエントリーを含むはてなブックマーク

以前cwRsyncを試した時の記事に今井さんからコメントをいただいた。

cwRsyncの場合、UNC パスは「\」を「/」に読み替えれば使えますよ。 例えば、「\\remote\share\dir1」は「//remote/share/dir1」となります。

ということなので早速試してみる。 ほんとだ。

Unison共有フォルダ内での renaming で Permission denied を出して失敗するので、ちょっと遅くなるけどやっぱり rsyncミラーするようにしよう。


[ 9月3日全て ]

2004年9月20日 (月)

Linux kernel 2.6.8 + MADWIFI このエントリーを含むはてなブックマーク

SourceForge.netCVSサーバが復旧したようなので、早速 MADWIFI ドライバをビルドする。

@ debパッケージ化

してみる。/etc/apt/sources.list に

 # madwifi
 # http://www.marlow.dk/site.php/tech/madwifi
 deb-src ftp://debian.marlow.dk/ sid madwifi

を追加して

 su
 apt-get update
 apt-get build-dep madwifi

として必要なモジュールをインストール

次に MADWIFI の source パッケージとツールの deb を作成しインストール

 mkdir /tmp/madwifi
 cd /tmp/madwifi
 apt-get source madwifi
 cd madwifi-1.4
 fakeroot dpkg-buildpackage
 su
 dpkg -i madwifi-source_20040920_all.deb
 dpkg -i madwifi-tools_20040920_i386.deb

9月17日に kernel をビルドしたソースツリーで madwifi をビルドする。 kernel 2.6.8 用の MADWIFI 非公式パッチもあてておく。

 cd /tmp
 wget http://users.informatik.haw-hamburg.de/~gropp_v/madwifi-2.6.8_and_-mm-040821.patch.bz2
 bunzip2 madwifi-2.6.8_and_-mm-040821.patch.bz2
 cd /usr/local/src/linux
 tar zxvf /usr/src/madwifi.tar.gz
 cd modules/madwifi
 patch -p1 < /tmp/madwifi-2.6.8_and_-mm-040821.patch
 cd /usr/local/src/linux/kernel-source-2.6.8
 $MODULE_LOC=/usr/local/src/linux/modules
 fakeroot make-kpkg --added-modules madwifi modules_image

失敗。パッケージ構築時にこけている感じ。

@ ということで普通にビルド

 cd /tmp
 wget http://users.informatik.haw-hamburg.de/~gropp_v/madwifi-2.6.8_and_-mm-040821.patch.bz2
 bunzip2 madwifi-2.6.8_and_-mm-040821.patch.bz2
 cd /usr/local/src/sf
 cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/madwifi co madwifi
 cd madwifi
 patch -p1 < /tmp/madwifi-2.6.8_and_-mm-040821.patch
 make
 su
 make install
 modprobe -a ath_pci

ThinkPad X31無線 LAN LED も点灯するようになった。

@ 大きなファイルの転送は駄目

RTSを設定してみたりもしたが、駄目。 Webを普通に巡回する程度なら問題ないが、POP3 や rsync などは駄目。


[ 9月20日全て ]

2005年4月2日 (土)

DAR で差分/増分バックアップ このエントリーを含むはてなブックマーク

普段使っているノート PCpdumpfsバックアップをとっている。 任意のスナップショットから簡単にファイルを復元できるので、バックアップHDDを別に用意できる場合はこれが便利。

@ 問題1

会社で使っている Windows デスクトップは、rsyncWindowsファイルサーバへ同期。 1世代しかバックアップが無い。 少なくとも数世代前のファイルが復元できるようにしておきたい。

@ 問題2

Linux サーバはバックアップ無し! マズイ。 現状、たまに手動で tarball にして保存しているぐらい。

@ DAR

DAR というバックアップコマンドの紹介を見て興味をひかれた。 シンプルながらも使い勝手の良さそう。 Linux でも Windows でも動くというのも嬉しい。

@ DAR を使ってみる

Linux 上で試してみる。

@ テスト用ディレクトリを作成

/tmp の下にテスト用ディレクトリ dar を作成。 その下に home ディレクトリと var ディレクトリを作成する。

 mkdir -p /tmp/dar/home/naney
 mkdir -p /tmp/dar/var/lib/dar
 echo 'abc' > /tmp/dar/home/naney/file1.txt

/tmp/dar/home 以下バックアップ対象として /tmp/dar/var/lib/dar 以下にバックアップファイルを作成してみることにする。

@ フルバックアップ

最初はフルバックアップ:

 dar -c /tmp/dar/var/lib/dar/home-full \
     -y9 \
     -R /tmp/dar \
     home

/tmp/dar/home をフルバックアップした home-full.1.1.dar が /tmp/dar/var/lib/dar にできる。

@ 差分バックアップ(1回目)

ファイルを1つ追加。

 echo 'def' > /tmp/dar/home/naney/file2.txt

ここで差分バックアップをとる:

 dar -c /tmp/dar/var/lib/dar/home-diff-1 \
     -A /tmp/dar/var/lib/dar/home-full \
     -y9 \
     -R /tmp/dar \
     home

home-full.1.dar に対する差分バックアップファイル home-diff-1.1.dar ができる。

@ 差分バックアップ(2回目)および増分バックアップ

もう1つファイルを追加。それから最初にあったファイルを削除してみる。

 echo 'ghi' > /tmp/dar/home/naney/file3.txt
 rm /tmp/dar/home/naney/file1.txt

ここで差分バックアップ(2回目):

 dar -c /tmp/dar/var/lib/dar/home-diff-2 \
     -A /tmp/dar/var/lib/dar/home-full \
     -y9 \
     -R /tmp/dar \
     home

home-full.1.dar に対する差分バックアップファイル home-diff-1.2.dar ができる。

またインクリメンタルバックアップもとってみる

 dar -c /tmp/dar/var/lib/dar/home-inc-2 \
     -A /tmp/dar/var/lib/dar/home-diff-1 \
     -y9 \
     -R /tmp/dar \
     home

差分バックアップファイル home-diff-1.1.dar に対する差分バックアップファイル home-diff-2.1.dar ができる。

@ フルバックアップからの復元
 dar -x /tmp/dar/var/lib/dar/home-full

を実行。

 home/naney/file1.txt

が復元される。

@ フルバックアップ+差分1回目からの復元
 dar -x /tmp/dar/var/lib/dar/home-full
 dar -x /tmp/dar/var/lib/dar/home-diff-1

を実行。

 home/naney/file1.txt
 home/naney/file2.txt

が復元される。

@ フルバックアップ+差分2回目からの復元
 dar -x /tmp/dar/var/lib/dar/home-full
 dar -x /tmp/dar/var/lib/dar/home-diff-2

を実行。

 home/naney/file2.txt
 home/naney/file3.txt

が復元される。

@ フルバックアップ+増分1回目(=差分1回目)+増分2回目からの復元
 dar -x /tmp/dar/var/lib/dar/home-full
 dar -x /tmp/dar/var/lib/dar/home-diff-1
 dar -x /tmp/dar/var/lib/dar/home-inc-2

を実行。

 home/naney/file2.txt
 home/naney/file3.txt

が復元される。

@ 運用するには

などが必要か。 エラー処理まで含めると結構面倒くさいな。 Perlあたりでまずは簡単なスクリプトを用意するか。


[ 4月2日全て ]

2006年7月3日 (月)

自前 PPM リポジトリの管理 このエントリーを含むはてなブックマーク

Windows Perl アプリケーション用に PPM リポジトリを久しぶりに整理。

自分が使用する PPM パッケージは以下の理由から、以前より基本的に自前でビルド/保存し PPM リポジトリをローカルに作成するようにしている。

  1. 後でオフラインインストールできるようにする。
  2. 「公開リポジトリが無くなった」あるいは「公開リポジトリに欲しいパッケージが無くなった」時に困らないようにする。
  3. 動作確認された組み合わせでの PPM パッケージセットを作成・保持できるようにする。
  4. ライセンス的にクリアなものだけを含むリポジトリを用意する。 (芋蔓式インストールで、ライセンス的にクリアでないパッケージが入ってしまうのを防ぐ)。

@ 手元では以下のように管理

 PPM
  |-- <category>
  |   `-- 8xx
  |       |-- <projects A> [ 公開 / export ]
  |       |   |-- module1.ppd -> (A)
  |       |   |-- module1.tar.gz -> (B)
  |       |   `-- ...
  |       `-- ...
  `-- pool
      |-- module1-x.yy
      |   |-- module1.x.yy.tar.gz
      |   |-- some documents...
      |   `-- build817
      |       |-- module1.ppd (A)
      |       `-- module1.tar.gz (B)
      `-- ...
@ pool
  • pool ディレクトリに「[モジュール]-[バージョン]」ディレクトリを作成する。同じバージョンでも、異なるバージョンは両方とも別々にキープしておく。
  • その下にソース tarball を置く。
  • ライセンス情報ファイルなども置く (touch Perl-License 等空のファイルを作成しておく)
  • PPM パッケージPPM::Make で作成し、その時に使用した ActivePerlビルド番号別にサブディレクトリを作って .tar.gz と .ppd を置く。
@ リポジトリ
  • ActivePerlビルド番号別にリポジトリを作成する。基本的には 6xx 系、8xx 系それぞれの中ではバイナリ互換性がある (PAR などは、ビルド番号に1対1でしか互換性がない)。
  • 必要に応じてカテゴリ別サブディレクトリを用意 (アクセス制限の都合などにより)
  • 必要に応じてプロジェクト毎にサブディレクトリを用意 (プロジェクト毎にパッケージセットを作るため)
  • リポジトリディレクトリからは pool 内の .ppd、.tar.gz へシンボリックリンクを張る。欲しいモジュールのバージョン、ビルド番号を選んでリンクする。
@ 公開
  • SambaApache などで、PPM ディレクトリ全部あるいは特定のリポジトリ部分を公開する。
  • 必要なら export して別サーバに置く。rsync や cp の -L オプションでシンボリックリンクを実ファイルに置き換えてアーカイブを作成する。

[ 7月3日全て ]

2007年1月8日 (月)

iCalendar 形式経由でスケジュールを社内 Blog に表示 このエントリーを含むはてなブックマーク

仕事用に Skype 名を作成し、ついでに社内 BlogSkype ボタンを貼りつけてログイン状態を表示できるようにしてみた。

そういえば電話もそうなんだけれど、本社に連絡を取るとき「もしかして会議中?」などと勘繰ってかけるかどうか迷ってしまうことがある。 かけたい人の予定がわかればいいのになと。

ならば逆もしかりだろうということで、自分の仕事のスケジュールを晒してみようと思いついた。 グループウェアとかそういうのは大袈裟なので、まずは社内 Blogサイドバーに表示するようにしたい。

ということでこの3連休実装してみた。

@ 構成

@ 入力

完全なスケジュールはほぼ日手帳に手書きで管理しているので、ミーティング・外出など晒しカテゴリのイベントだけを、電子化する必要がある。 手で HTML 毎回ごりごり書き直すのも嫌なので、スケジュール管理ソフトを使いたい。 この部分は KDE の KOrganizer を使うことにした。

@ サーバへアップロード

で、KOrganizer のスケジュールを iCalendar 形式でエクスポート。 このファイルを社内 Blog を配信しているサーバに rsync で転送。

この処理はちょっと手間なので自動化したいところ。

@ 社内 Blog 内表示用 JavaScript Include ファイル生成 CGI プログラム

この iCalendar 形式ファイルを読み込んで、今日以降の10件(程度)を HTML フラグメントに変換し JavaScript プログラム (document.write() 列) として出力する Perl CGI プログラムを作成。

iCalendar の形式の読み込みについては Data::ICal や iCal::Paraser などの Perl モジュールを利用できる。 今回はシンプルに使えそうな iCal::Parser をチョイス。 基本的には

 use iCal::Parser;
 my $parser = iCal::Parser->new;
 my $calendar = $parser->parse($ics_file_name);

で読み込んだデータがハッシュリファレンスとして $calendar に設定される。 イベントは $calendar->{2007}->{01}->{01}->{$uid} のように「年、月、日、イベントUID」のハッシュ階層として格納されているので、これを読み出せばよい。

@ 社内 Blog サイドバーに表示

で、この CGI プログラムが生成する JavaScript プログラムをサイドバーJavaScript Include

まずは表示までできるようになった。

これで

をまとめて公開できる社内 Blogアップグレード

おいおいスケジュールの表示デザインとかは改良していきたい。 hCalendar 形式にして CSSデザインするのがいいのかな。


[ 1月8日全て ]

2008年6月11日 (水)

今日のさえずり - スポーツの制裁金ってどこにいくのだ? このエントリーを含むはてなブックマーク


[ 6月11日全て ]

2009年2月13日 (金)

ファイルを変更すると自動的に rsync してくれる lsyncd このエントリーを含むはてなブックマーク

ファイルを変更すると「何もしなくても」自動的に同期してくれる Dropbox が非常に便利で昨年9月以来ずっと使っている。 「何もしなくても」同期してくれるというのが気にいったので、Linux 上でもいいソフトウェアがないか探してみた。 で見つけたのが lsyncd (というか1年以上前に1度チェックした形跡があるが記憶にない)。

inotify でファイルの変更を検出して自動的に rsync を実行してくれるというもの。 裏で rsync を呼び出すので同期先は rsync できる場所ならローカルでもリモートでも OK。

例えば lsyncd /tmp/a/ /tmp/b/ とすると、/tmp/a/ でファイルの作成・変更・削除を行うと /tmp/b/ にもすぐ反映される。 これはいい。 一般ユーザでも実行可能。

Dropbox から USB メモリに常に同期しておくのとかに使えそうだな。

なおデフォルトでは

 -lt%r --delete {--exclude-from [FILE]} [SOURCE] [DIRECTORY]

というオプションで rsync が呼び出される (%r は lsyncd 起動時には r、それ以外は d になる)。 ここで --delete が指定されているので注意。 lsyncd.conf.xml ファイルを作成して --conf オプションでそのファイルを指定すれば、rsync の引数を変更できる。 rsync の --delete オプションを外し、また -a オプション相当を指定するならば以下のような設定ファイルを作ればよい。

 <lsyncd version="1">
   <settings>
     <callopts>
       <option text="-%rlptgoD"/>
       <exclude-file/>
       <source/>
       <destination/>
     </callopts>
   </settings>
 </lsyncd>

ただしソース側で chmod をしてもイベントを拾わないので、すぐには rsync が実行されず権限が同期先に反映されないことを理解しておく必要がある。 lsyncd ではディレクトリ単位で rsync を実行するので、同じディレクトリでファイルの変更等がおきることで副次的にそのディレクトリの他のファイルの権限変更が同期されることになる (rsync で -p オプションを指定している場合)。

Debian GNU/Linux sid では Debian パッケージになっていないようで、今回はソースからインストールした。

 tar zxvf lsyncd-1.26.tar.gz
 cd lsyncd-1.26
 dh_make --createorig
 fakeroot dpkg-buildpackage
 sudo dpkg --install ../lsyncd_1.26-1_i386.deb

[ 2月13日全て ]

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.023199s / load averages: 0.25, 0.21, 0.17
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)