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
スポンサード リンク
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メモリにいれておこう。
- TrueCrypt で USB メモリに Windows と Linux ... (2006-12-14)
- 普通の人向けに svnserve を立ち上げるか (2005-07-26)
- OpenSSH for Windows (2004-08-05)
- 自宅の無線 LAN を復旧 & IEEE 802.11g 化 (2004-11-26)
- ノート PC を持たずに会社に行きたい (2006-12-21)
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 ではどうやって指定する?)が、ネットワークドライブ割り当てをすればアクセスできる。
- OpenSSH for Windows (2004-08-05)
- Unison で Windows 間 sync (2003-10-24)
- Windows BOX も DAR で増分バックアップ (2009-01-13)
- cwRsync と UNC (2004-09-03)
- Unison + Zebedee (2004-06-11)
2004年8月21日 (土)
■ rsync の --copy-unsafe-links

man ページを見ると「コピーツリーの外へのシンボリックリンクのみ実体に置き換え、ツリー内でのリンクはそのまま維持」してくれるようなのだが、どうも期待した動作と違う。 '-l' と一緒に指定すると全てシンボリックリンクのままで、-L と一緒に指定すると全て実体に置き換えられてしまう。
ActivePerl を使用する各プロジェクト毎のPPM リポジトリを、必要とするPPM パッケージについて「ビルド済み/ダウンロード済みPPM パッケージの pool」へシンボリックリンクする事で実現している(というのを今作っている)。 ここでいくつかのプロジェクト分のPPM リポジトリを、必要な実体を無駄なくそろえて export するのに rsync が使えないかと思ったわけだが、現状だと重複して実体がコピーされてしまう。 まあディスク容量はそれほどネックではないから、これでもいいか。
- 自前 PPM リポジトリの管理 (2006-07-03)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- bundle を作成して Perl モジュールをまとめてインストール。 (2004-10-21)
- 今日のさえずり - 哭きの竜のポーズの人発見(多分寝てる) (2009-08-12)
- ActivePerl 5.8.8.820 の PPM では ppd/tar... (2007-02-05)
2004年9月3日 (金)
■ cwRsync と UNC

以前cwRsyncを試した時の記事に今井さんからコメントをいただいた。
cwRsyncの場合、UNC パスは「\」を「/」に読み替えれば使えますよ。 例えば、「\\remote\share\dir1」は「//remote/share/dir1」となります。
ということなので早速試してみる。 ほんとだ。
Unison が共有フォルダ内での renaming で Permission denied を出して失敗するので、ちょっと遅くなるけどやっぱり rsync でミラーするようにしよう。
- cwRsync (2004-07-31)
- Unison で Windowsのローカルディレクトリとリモートの共有フォ... (2004-08-03)
- [ Debian ] DynaBook SS -> X31 (2003-12-05)
- 今日のさえずり - スポーツの制裁金ってどこにいくのだ? (2008-06-11)
- 私的10大ニュース2003 (2003-12-31)
2004年9月20日 (月)
■ Linux kernel 2.6.8 + MADWIFI

SourceForge.netのCVSサーバが復旧したようなので、早速 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 などは駄目。
- Debian GNU/Linux sid 環境を新 HDD へ (2006-07-29)
- Linux kernel を 2.6.8 に (2004-09-17)
- Debian Linux kernel 2.6.15 ビルド (2006-02-23)
- Debian Linux kernel 2.6.26 にアップデート (2009-02-07)
- ThinkPad X31 と Linux kernel 2.6 (2006-02-22)
2005年4月2日 (土)
■ DAR で差分/増分バックアップ

普段使っているノート PC は pdumpfs でバックアップをとっている。 任意のスナップショットから簡単にファイルを復元できるので、バックアップ用HDDを別に用意できる場合はこれが便利。
@ 問題1
会社で使っている Windows デスクトップは、rsync でWindowsファイルサーバへ同期。 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
が復元される。
@ 運用するには
- dar を使ったバックアップスクリプトの作成(ファイル名生成の処理など)
- cron による定期バックアップの設定
- バックアップファイルをリモートサーバへ転送する手段の用意
- 古いバックアップファイルの削除(ローカル、サーバ)処理の用意
などが必要か。 エラー処理まで含めると結構面倒くさいな。 Perlあたりでまずは簡単なスクリプトを用意するか。
- Windows BOX も DAR で増分バックアップ (2009-01-13)
- もしもの時に家族がデジカメデータ見られるように HDD 購入 (2009-08-27)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- 今日のさえずり - スポーツの制裁金ってどこにいくのだ? (2008-06-11)
- クラッシュは突然に - DAR の使用を再検討 (2009-01-06)
2006年7月3日 (月)
■ 自前 PPM リポジトリの管理

Windows Perl アプリケーション用に PPM リポジトリを久しぶりに整理。
自分が使用する PPM パッケージは以下の理由から、以前より基本的に自前でビルド/保存し PPM リポジトリをローカルに作成するようにしている。
- 後でオフラインでインストールできるようにする。
- 「公開リポジトリが無くなった」あるいは「公開リポジトリに欲しいパッケージが無くなった」時に困らないようにする。
- 動作確認された組み合わせでの PPM パッケージセットを作成・保持できるようにする。
- ライセンス的にクリアなものだけを含むリポジトリを用意する。 (芋蔓式インストールで、ライセンス的にクリアでないパッケージが入ってしまうのを防ぐ)。
@ 手元では以下のように管理
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 へシンボリックリンクを張る。欲しいモジュールのバージョン、ビルド番号を選んでリンクする。
@ 公開
- Samba、Apache などで、PPM ディレクトリ全部あるいは特定のリポジトリ部分を公開する。
- 必要なら export して別サーバに置く。rsync や cp の -L オプションでシンボリックリンクを実ファイルに置き換えてアーカイブを作成する。
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- ActivePerl をやめて Strawberry Perl へ (2009-08-25)
- ActivePerl で Ming (2005-02-23)
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
2007年1月8日 (月)
■ iCalendar 形式経由でスケジュールを社内 Blog に表示

仕事用に Skype 名を作成し、ついでに社内 Blog に Skype ボタンを貼りつけてログイン状態を表示できるようにしてみた。
そういえば電話もそうなんだけれど、本社に連絡を取るとき「もしかして会議中?」などと勘繰ってかけるかどうか迷ってしまうことがある。 かけたい人の予定がわかればいいのになと。
ならば逆もしかりだろうということで、自分の仕事のスケジュールを晒してみようと思いついた。 グループウェアとかそういうのは大袈裟なので、まずは社内 Blog のサイドバーに表示するようにしたい。
@ 構成
@ 入力
完全なスケジュールはほぼ日手帳に手書きで管理しているので、ミーティング・外出など晒しカテゴリのイベントだけを、電子化する必要がある。 手で 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。
まずは表示までできるようになった。
これで
おいおいスケジュールの表示デザインとかは改良していきたい。 hCalendar 形式にして CSS でデザインするのがいいのかな。
- [ DiKicker ] くっつき BBSをくっつけてみた。 (2004-05-04)
- Plagger のインストールが大変なので XML::RSS で RSS ... (2006-06-10)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- DiKicker にそろそろコメント機能を実装するか (2005-01-26)
2008年6月11日 (水)
■ 今日のさえずり - スポーツの制裁金ってどこにいくのだ?

- 11:30 CARL パンチ (No.35) にたまったゴミを捨てようとしたがゴミ受けがかたくて開かない。力を入れたらハンドルロックがもげた。 *Tw*
- 12:06 ヨドバシカメラにデジカメプリントしにいってくる。[mb]
- 12:15 デジカメプリントオーダー完了。[mb]
- 12:24 エビちゃんマックカード使った。今日はビッグマック。[mb]
- 12:32 今日のテイクアウトはストロー無しですね! マクドナルド 秋葉原昭和通り店サン! *Tw*
- 14:28 TeraStation PRO、共有フォルダ名(いわゆる半角英数で)12文字までか。短すぎ。 *Tw*
- 17:08 スポーツの制裁金ってどこにいくのだ? *Tw*
- 19:25 Linux BOX に直結しようと思っていた USB 外付け HDD だがうまく認識しないので、 TeraStation PRO につないだ。 *Tw*
- 19:27 TeraStation PRO、外付け HDD のフォーマットをかけると、内蔵 HDD 上のファイル共有もその間停止するのかい。 *Tw*
- 19:47 Red Hat Linux 8.0 上での DAR 2.3.7 ビルド失敗。リンクでこける。
- 23:04 TeraStation PRO につないだ USB 外付け HDD はバックアップフラグを立てても、リモートから rsync で見られないのか。
- クラッシュは突然に - DAR の使用を再検討 (2009-01-06)
- 今日のさえずり - パスワード探すのに時間をとられすぎ (2009-01-07)
- USB HDD 上に ext3 ファイルシステムを作ろうとしたらフリーズ (2006-01-16)
- 今日のさえずり - 毛布カバーの中で毛布が棒状になる問題 (2009-01-11)
- 社内ファイルサーバの代替として TeraStation PRO を導入 (2008-06-09)
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
- Debian GNU/Linux で Dropbox (2008-09-16)
- Dropbox for Linux を Debian 用にビルドしてインストール (2009-11-24)
- 今日のさえずり - ミニパトに男性警官が乗っているとガッカリする (2009-11-26)
- TrueCrypt で USB メモリに Windows と Linux ... (2006-12-14)
- 今日のさえずり - 餞別用意したけど最終日の今日来なかった (2009-06-15)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラ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)




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