Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

FTP のサポート
       ftp  転送が、  Midnight  Commander の仮想ファイルシステム (Virtual File
       System: VFS) を利用する形でサポートされている。 要するにつまり、URL  も
       ローカルディレクトリと同じようにサポートされている。 以下に例を示そう。
           mirrordir --verbose \
            ftp://lava.obsidian.co.za/pub/mirrordir \
                /home/mirrordir
       あるいは
           mirrordir --verbose /home/mirrordir \
            ftp://psheer@lava.obsidian.co.za/home/ftp/pub/mirrordir
       も動作する。ただし後者ではまずパスワードを尋ねられる。  ftp  サーバに「
       アップロード」を行う場合は、 --strict-mtimes オプションは on にすべきで
       ない。  ftp では修正時刻の設定はできないので、 すべてがコピーされてしま
       う。

       (--verbose を設定すれば) mirrordir が繰り返し ftp  で修正時刻とアクセス
       時刻をセットしようとしていることに気づくだろう。  用いている VFS のタイ
       プにおける制限をユーザに知らせるために、 これらのメッセージは残しておく
       つもりである。   これらの試行は、明らかな性能の劣化としては現われない。
       しかしこのプロトコルを用いたアップロードの性能が悪い場合は、代わりに
       mc:// を用いてみるといいだろう。 なおダウンロードは常にアップロードより
       も高速である。

       一般に cron ジョブでは ftp アップロードを用いるべきではない。  またディ
       レクトリの同期を取る目的にも向いていない。 ディレクトリを同期したい場合
       は、反対側からのダウンロードを用いること。 アップロードは一回きりのアッ
       プロードにしか有用でない。

例
       ここでは mirrordir を用いて行える、ちょっと気の効いた作業を紹介する。

       ミニマリスト的コピー
              ソースツリーが 2 つあり、 古い版をパッチを適用するために保管して
              おきたいとする。 これには mkdir tree.OLD して、

                    mirrordir -v tree tree.OLD

              するだけでよい。 もう一度 mirrordir を実行すれば、最小限の変更の
              み  (つまり更新されたファイルのみ) がコピーされる (実は cp(1) も
              同じことをする)。

       システムバックアップ
              システムによっては、    定期的なバックアップをテープアーカイブに
              行っていることがある。 また RAID デバイスを用いて、 あるパーティ
              ションと同一のコピーを恒常的に保持しているシステムもあるだろう。
              mirrordir はさらに別の選択肢を提供する。 システムに 2 台のドライ
              ブを装備する。ひとつは普段用いるもの、  もう一つはバックアップす
              るためのものである。  そして mirrordircron(8) のテーブルに追
              加するのだ。    変更されたファイルのバックアップには、様々なオプ
              ションが利用できる。  バックアップディレクトリはユーザから読み取
              り可能にしておき、  各人のバックアップファイルを閲覧できるように
              しておくといいだろう。  特定のファイルの古いバージョンを取り戻し
              たいユーザは、 バックアップから入手できるようになる。  mirrordir
              は変更されたファイルの最小限だけを処理するので、非常に高速であ
              る。 一日に何回も実行したり、あるいは --nice  オプションを付けて
              途切れることなく実行させることさえ可能である。

              マシンが壊れたときに対する備えをさらに強固にしたければ、  FTP を
              用いてリモートマシンにバックアップを行うこともできる。

       2 台のマシンを毎時バックアップする
              dar2 というマシン上で、私は次のような cron ジョブを 6 時間ごとに
              実行している。

              #!/bin/sh

              # (this is just in case of any bugs I don't know about,
              # but I don't think it is necessary)
              killall -9 tee
              killall mirrordir >& /dev/null
              sleep 2
              killall -9 mirrordir >& /dev/null

              (                                                               \
              date                                                        ;   \
              echo "mirrordir says (if it said nothing it is bad):"       ;   \
                  mirrordir mc://dar1:12346/ -p abcdefg /mnt/dar1/            \
                  -i --exclude-regexp '^mc://dar1:12346/var/lock/subsys/atd'  \
                  --exclude-regexp '^mc://dar1:12346/proc/'                   \
                  --exclude-regexp '^mc://dar1:12346/mnt/[^/]*/.*$'           \
                  -i --exclude-regexp '^mc://dar1:12346/boot/'                \
                  -i --exclude-regexp '^mc://dar1:12346/etc/lilo.conf'        \
                  -C                                                          \
              ´
              if (S_ISDIR (stat.st_mode)) {
                  if (!regexp ("^mc://dar1:12346/[^/]*$", PATH))
                      printf ("Backing up: %s0, PATH);
              }
              ´                                                   ;           \
              date                                                ;           \
              echo "Done"                                         ;           \
              ) 2>&1                                                          \
              | tee --ignore-interrupts --append /var/log/mirrordir.log       \
              | mail -s 'dar1 backup results' psheer@obsidian.co.za

       安全な転送とログイン
              turing.co.uk において以下のコマンドを実行しておく
                  secure-mcserv -p 12345 -d
              どこか外部のマシンから
                  copydir --secure -K 512 -z \
                  mc://alan@turing.co.uk:12345/usr/src/linux/.config .
              とすれば、512  ビットの鍵を用いた安全なファイルコピー (圧縮つき)
              ができる。 また
                  pslogin mc://alan@turing.co.uk:12345/
              とすれば、このマシンに安全にログインできる。

       FTP サイトのミラー
              ftp サイトでは ls の  -R  オプションが禁止されていることが多いの
              で、   従来用いられてきた  mirror  (1)  は失敗することがあった。
              mirrordir にはこの制限はない。

                  mirrordir -v ftp://metalab.unc.edu/pub /home/ftp/pub

       FTP 転送
              よくある FTP 転送は、--copy-mode オプションを用いた 一行のコマン
              ドで簡単に実現できる。   複数のファイルをどちら向きにも、   また
              別々の ftp サイトにすら (間接的にではあるが)、 cp(1)  のようにコ
              ピーできる。
                  copydir -v mirrordir-0.9.15.tar.gz \
                  mirrordir.lsm ftp://metalab.unc.edu/incoming/Linux
              とすると mirrordir を sunsite にアップロードする。

              anonymous  でない  ftp 転送のパスワードは、標準的な ftp の慣習に
              従って ~/.netrc ファイルに置き、--netrc オプションを用いるのがよ
              い。 あるいは ftp://myname@machine/ を用いてもかまわない。

       ファイル探索
              recursdir / -C
              'if (!glob ("*.c", FILE)) printf ("%s\n", PATH);'
              とするとシステムにあるすべての C ファイルを表示する。
              recursdir / -C
              'if (S_ISCHR(stat.st_mode)) printf ("%s\n", PATH);'
              とすればシステムにあるすべてのキャラクタデバイスを表示する。

       FTP サイトをテープにバックアップする
              リモートサイトをテープにバックアップするには
                  recursdir ftp://user@remote.machine/ \
                  --exclude-regexp '//[^/]*/proc/' --tar-file /dev/mt
              とすればよい。

       core ファイルの削除
              これはシステムからすべての core ファイルを削除する:

              recursdir / -C ´
              long l;
              if (strncmp (PATH, "/proc", 5)) {
                  if (S_ISREG (stat.st_mode) && !strcmp ("core", FILE)) {
                      if (strstr (popen ("file " + PATH), "ELF 32-bit LSB core")) {
                          l = l + stat.st_size;
                          printf ("removing: %s, cumu. total = %ldkB\n", PATH, l >> 10);
                          exec ("rm", "-f", PATH);    /* could also use system() */
                      }
                  }
              }
              ´

環境変数
       TMPDIR 一時的なファイルを保管させたいディレクトリ。  ftp ファイルシステ
              ムは、 まずファイルをこの一時ディレクトリにダウンロードし、 正し
              い場所にそのファイルをコピーする。後述の バグ を参照のこと。

              TMPDIR が指定されないと、 デフォルトでは現在進行中のファイルがあ
              るディレクトリに保存される。

返り値
       mirrordir は以下の値を返す:

       0      成功。

       1      何らかのエラー  (書き込みエラー、許可属性エラーなど)  が起った。
              この場合、エラーの詳細は stderr に書き込まれているはずである。

       2      あるファイルが利用中でコピーできなかったが、それ以外は成功した。
              この場合は `unable to open control file  for  writing'  というエ
              ラーが書き込まれているはずである。  標準エラーでこのメッセージを
              grep し、これらのファイルに対してのみ もう一度 mirrordir  を実行
              すればよい。 grep(1) を参照のこと。

バグ
       atd デーモンのあるバージョンでは、 ロックファイル (や pid ファイル?) を
       そのファイルもロック付きで作成するため、 secure-mcserv が永遠にブロック
       する。  これを防ぐには、 atd を停止させるか、このファイルを対象から除外
       しなければならない。

       サマータイムの時間補正があるところと ftp でミラーを行うと、 1  時間の時
       間のオフセットが生じるように見える。 とりあえずの回避策としては --time-
       offset を用いてほしい。 これが mirrordir のせいなのかどうかは私にはわか
       らない。

       mirrordir のせいで CPU が食い尽くされ、停止してしまうように見えるバグは
       修正された。

       コマンドラインから多数の --exclude 式を指定すると、  処理が遅くなる。た
       くさんのファイルのリストを除外対象したい人は、 そのリストをテキストファ
       イルに書いて、 --exclude-from オプションを利用する方がよい。

       シンボリックリンク (それが指すファイルではない)  の修正時刻とアクセス時
       刻は複製されない。

       以前にあった、ハードリンクファイルが通常ファイルとして扱われてしまうと
       いう 制限は解決された。--no-hard-links  オプションを指定すれば、  0.9.8
       以前の動作をエミュレート可能である。

       ハードリンクがデバイスをまたいで作成されているかどうかはチェックしてい
       ない。 この場合はそれに見合ったエラーが報告されることになろう。

       ftp ファイルシステムは、まずファイルを一時ディレクトリに *ftpfs* という
       名前でダウンロードする。  これはスペースの無駄だが、vfs  ライブラリのデ
       フォルトの動作なのだ。   このディレクトリに十分な容量がないと、おそらく
       mirrordir はハングする。 上述の 環境変数 を参照のこと。

       ファイル除外に用いる C スクリプト言語は、 実装のやりすぎである。

ファイル
       ~/.netrc
              マシンとそのパスワードのリスト。  オプション  --netrc を参照のこ
              と。

       /etc/ssocket/accept.cs
              このスクリプトは、接続のサーバ側で、鍵交換と署名生成を行う。

       /etc/ssocket/connect.cs
              このスクリプトは、接続のクライアント側で、鍵交換と署名生成を行
              う。

       /etc/ssocket/arcinit.cs
              ストリーム cipher 暗号化を初期化する (国際版では存在しない)。

       /etc/ssocket/arcencrypt.cs
              ストリーム cipher 暗号化を行う (国際版では存在しない)。

       /etc/ssocket/private/
              このディレクトリには、ホストの秘密鍵が置かれる。    鍵はそれぞれ
              別々のファイルに保存される。 ファイル名は 512, 1024 などである。
              鍵のデータベースを使うようにすると、  鍵管理用のユーティリティが
              必要になるので、 こちらのほうがよい。 すぐに Reiser ファイルシス
              テムが標準的になるだろうから、  データベースファイルはいずれにし
              ても不要になるだろう。

       /etc/ssocket/public/
              こちらは公開鍵のもの。後は /etc/ssocket/private/ と同様。

準拠
       mirrordir は作成者の発明であり、 いかなる OS の標準にも従っていない (そ
       うするべきではあるが!)

入手方法
       このプログラムの最新版は、
       ftp://metalab.unc.edu/pub/Linux/system/backup                    または
       ftp://lava.obsidian.co.za/pub/linux/mirrordir から入手できる。

著者
       Paul Sheer  <psheer@obsidian.co.za>  <psheer@icon.co.za>

関連項目
       mirror(1),  pavuk(1),  cp(1),  scp(1),  find(1), mc(1), ftp(1), ssh(1),
       tar(1), rlogin(1), rlogind(8), forward(1)