  The InterMezzo High Availability File System HOWTO
  by the project members
  v1.0.5, August 2001
  野本 浩一 (hng@ps.ksky.or.jp)
  v1.0.5j, February 08, 2002

  この文書は、Linux 上の InterMezzo ファイルシステムの設定および動作を説
  明します。
  ______________________________________________________________________

  目次

  1. 謝辞
  2. 免責およびライセンス
  3. はじめに
     3.1 InterMezzo は何ですか？
     3.2 バージョン1.0.4での制限

  4. InterMezzo のインストール
     4.1 概要
     4.2 パッケージの入手
     4.3 ブートするための 2.4 のカーネルの構築
     4.4 カスタムカーネル向け InterMezzo ファイルシステムの構築

  5. InterMezzo の設定
     5.1 コンフィグファイル
     5.2 InterMezzo ファイルシステムのフォーマット
     5.3 ext2/3 ファイルシステムの InterMezzo への変換
     5.4 三つの一般的な構成
        5.4.1 一つのクライアントと一つのサーバ (一般的な使用 - ラップトップとデスクトップ、バックアップ、二つのウェブサーバなどの同期)
        5.4.2 二つのクライアントと一つのサーバ (一般的な使用 - 二つのリモートオフィス)
        5.4.3 IPSec および ssh トンネルの利用
        5.4.4 同じホスト上での一つのクライアントと一つのサーバ (一般的な使用 - InterMezzo のテスト)
     5.5 構成チェック

  6. 競合からのリカバリ
  7. デバッグ
  8. テストおよびデバッグのためにテストフレームワークを使用する
  9. InterMezzo はどのように動作しますか？
     9.1 一貫性と粒度
     9.2 intermezzo.o、カーネルモジュール
     9.3 Lento
     9.4 KML ファイル
     9.5 Last_rcvd ファイル
     9.6 KML および Expect ファイルの正当な変換

  10. 連絡先の情報
  11. 日本語訳について

  ______________________________________________________________________

  1.  謝辞

  多くの方々がこの HOWTO に寄与しました。著者はPeter J. Braam
  <mailto:braam@clusterfs.com>, Rob Simmonds, Gordon Matzigkeit
  <mailto:gord@fig.org>, Christopher Li <mailto:chrisl@gnuchina.org>,
  Shirish Phatak <mailto:shirish@tacitussystems.com> です。

  2.  免責およびライセンス

  InterMezzo is an experimental file system.  It contains kernel code
  and daemons running with root permissions and is known to have bugs.
  Please back up all data when using or experimenting with InterMezzo.
  InterMezzo is covered by the GPL.  The GPL describes the warranties
  made to you, and can be found in the file COPYING.

  Copyright on InterMezzo is held by Peter J. Braam, Stelias Computing,
  Carnegie Mellon University, Phil Schwan, Los Alamos National
  Laboratory and Red Hat, Inc, TurboLinux, Inc., Tacitus Systems, Inc.
  and Mountain View Data, Inc.

     参考訳
        InterMezzo は実験的なファイルシステムです。それはカーネルコード
        およびルート権限で実行するデーモン、そして既知のバグを含んでいま
        す。InterMezzo の使用もしくは実験を行う場合、データをすべてバッ
        クアップしてください。

        InterMezzo は GPL によって保護されます。GPL はあなたになされる保
        証について述べ、ファイル COPYING の中にあります。

        InterMezzo の著作権は Peter J. Braam, Stelias Computing,
        Carnegie Mellon University, Phil Schwan, Los Alamos National
        Laboratory, Red Hat, Inc., TurboLinux, Inc., Tacitus Systems,
        Inc., Mountain View Data, Inc. が保有しています。

  InterMezzo is a trademark of Stelias Computing.  It may be used freely
  to refer to the software on the InterMezzo Web Site <http://www.inter-
  mezzo.org>

     参考訳
        InterMezzo は Stelias Computing の商標です。InterMezzo ウェブサ
        イト <http://www.inter-mezzo.org>上のソフトウェアを言及するため
        に、自由に使用することができます。

  3.  はじめに

  3.1.  InterMezzo は何ですか？

  InterMezzo は多数のコンピュータ上に存在する folder collection, 別名
  fileset の複製を維持するファイルシステムです。修正のログを構築し他の
  ノードへそのログを広めることにより、同期してこれらの複製を保持します。
  複製への関与を示すコンピュータは fileset の レピリケータと呼ばれま
  す。InterMezzo は、レプリケータでの更新を交換する際に組織だった役割を
  果たす、fileset のためのサーバが一つあります。

  InterMezzo にはdisconnected operation (切断時の動作) があり、つまり、
  不通となっていたチャネルが復旧した時に forwarded が必要なすべての更新
  を覚えておくために、ログ を管理します。コンフィグレーションパラメータ
  で conflicting updates (競合する更新) の回避を設定しない場
  合、disconnected operation の間に conflicting updates が起きる可能性が
  あるので、これはベストエフォート型同期です。

  InterMezzo は全データの記憶域として既存のディスクファイルシステムを使
  用します。現時点で ext3 をサポートしますが、間もなく ReiserFS および
  XFS をサポートするでしょう。ext3 にフォーマットされたディスクボリュー
  ムが ext3 の代わりにファイルシステムタイプ InterMezzo でマウントされた
  なら、InterMezzo ソフトウェアはファイルシステムへのアクセスをすべて管
  理し始めます。それは、修正のログを記録し、ディスクファイルシステムを修
  正するための 許可 を確認し、connected operation 中の競合する更新を回避
  します。

  InterMezzo は基礎的な内部のファイル転送の仕組みか、もしくは rsync プロ
  トコル (Rsync ウェブサイト <http://rsync.samba.org>を参照してください)
  を使うことができます。
  3.2.  バージョン1.0.4での制限

      セキュリティ
        今のところ、信頼されたネットワーク上でのみ InterMezzo を実行する
        べきです - 複製に関わるシステム上のルートユーザは等しく信頼され
        る必要があります。システムに組込まれた rudumentary security がま
        だありますが、これは (root squash のない) NFS セキュリティと似た
        ようなものです。信頼されたネットワークを得る良い方法は IPSEC
        (FreeSwan http://www.freeswan.org を参照してください)、CIPE
        (http://sites.inka.de/sites/bigred/devel/cipe.html を参照してく
        ださい)、SSH トンネルを使うことです。SSL ユーティリティ stunnel
        はデーモンを再接続試行でたくさん生成するので、多少難しいかもしれ
        ません。POSIX ACL の複製は 2.2 カーネルで利用でき、2.4 向けはま
        もなく出ます。時がたつにつれ、セキュリティの向上がなされるでしょ
        う。

      リカバリ
        今のところ、システムは Ext3 と組合わされたジャーナルリカバリがあ
        ります。システムがクラッシュした後、分散された状態を含む KML,
        LML last_rcvd ファイルを持ったローカルディスクシステムは自動的に
        復旧するでしょう。相手をともなったリカバリも普通にシームレスに行
        われるようになるでしょう。

      競合の扱い
        現状システムは悲観主義ではなく厳格主義的な競合検出を行う競合ハン
        ドラを持っていません。もっと広範な競合解決ツールは開発が続けら
        れ、次のメジャーリリースで利用できるはずです。disconnected
        operation の期間の後に再接続する場合だけ競合が起き、競合はクライ
        アントだけで起きる可能性があるシステムの設計になっています。

      Fetch on demand
        当面、InterMezzo は全ファイルシステムを複製します。しかしなが
        ら、Fetch on demand システムは将来のバージョンで登場し、ファイル
        システムの部分的な複製ができるようになるでしょう。この最初のバー
        ジョンはメタデータ (ディレクトリおよび inode すべて) の複製では
        なく、 fetch file data on demand になるでしょう。部分的なメタ
        データの変更は将来のバージョンで実装されるかもしれません。

  4.  InterMezzo のインストール

  4.1.  概要

  InterMezzo は InterMezzo ファイルシステムを持ったカーネルに依存しま
  す。現在 Perl で書かれたユーザレベルのファイルサーバおよびキャッシュマ
  ネージャがあります。そして InterMezzo ファイルシステムを作成するユー
  ティリィティがあります。

  4.2.  パッケージの入手

  バージョン 1.0.4 のパッケージは
  <ftp://ftp.inter-mezzo.org:/pub/intermezzo/1.0.4/rh7.1/RPMS>から入手で
  きます。これらのパッケージはきれいな RedHat 7.1 システム上にインストー
  ルすべきです。2.2 カーネルパッケージか 2.4 カーネルパッケージのどちら
  かをインストールします。

  4.3.  ブートするための 2.4 のカーネルの構築

  2.4 カーネルをブートするために、次のように initrd で初期 ramdisk を生
  成する必要があります -
       mkinitrd /boot/initrd-2.4.7-ext3_0.9.5-presto_1.0.4 2.4.7-ac9

  Lilo でこのカーネルをブートするために、次のような lilo エントリを
  /etc/lilo.conf ファイルに追加します -

       image=/boot/vmlinuz-2.4.7_ext3_0.9.5_presto_1.0.4
               label=InterMezzo
               read-only
               root=/dev/hda1
               initrd=/boot/initrd-2.4.7-ext3_0.9.5-presto_1.0.4

  4.4.  カスタムカーネル向け InterMezzo ファイルシステムの構築

  あなたのカーネル向けカーネルモジュールを生成するために、あなたのカーネ
  ル向けの .config ファイルおよびカーネルソースが必要です。最初にカーネ
  ルソースの準備、次にモジュールの構築へと進みます -

       cd /your/source/linux
       make distclean
       cp your.config  .config
       make oldconfig dep
       cd /usr/src/presto24-1.0.04
       ./configure --enable-linuxdir=/your/source/linux
       make install

  [訳注；上記の /your/source/linux (二箇所) は「カーネルソースのディレク
  トリ」に読みかえて実行してください。]

  Linux 2.2 カーネルでも同じ手順で行います。

  5.  InterMezzo の設定

  5.1.  コンフィグファイル

  デフォルトのコンフィグディレクトリは /etc/InterMezzoです。以下に示す設
  定ファイルを生成するために、対話型 inconfig コマンドを利用するか、もし
  くは手動でそれらを作成してもかまいません。

  バージョン 1.0 およびそれ以降で使うコンフィグファイルは、より古いバー
  ジョンで用いていた Perl フォーマットの代わりに、XML フォーマットを用い
  ます。

     /etc/intermezzo/sysid
        システム名、presto デバイス名、IP バインドアドレスを保持します。
        仮に、サーバ名が muskox、IP アドレスが 192.168.0.3 で、クライア
        ントは clientA および clientB とします。各ホストの sysid ファイ
        ルはホスト名、presto デバイス名、IP バインドアドレスを含みます。
        つまり muskox のファイルは次のようになるでしょう -
          <sysid name="muskox" psdev="/dev/intermezzo0" bindaddr="192.168.0.3" />

     InterMezzo の初期バージョンはこのファイルに presto デバイス名を含ん
     でいなかったことに注意してください - 今ではこのフィールドを必要とし
     ます。

     /etc/intermezzo/serverdb
        サーバのデータベースを保持します。 server 構造体は次に示す XML
        の server エレメントです -

          <serverdb>
            <server name="muskox" ipaddr="192.168.0.3" port="2222"
              bindaddr="192.168.0.3" />
          </serverdb>

     上記は IP アドレス 192.168.0.3 なサーバ muskox 用の単一のサーバの記
     述です。port および bindaddr の記述は任意です - デフォルトのポート
     は 2222 です。bindaddr の記述のないサーバは要求をすべてのインター
     フェースで待ち (listen) ます。記述のあるサーバは bindaddr のアドレ
     ス上だけで待ちます。クライアントとサーバの両方を同じシステムで実行
     している場合、異なる bindaddr をサーバとクライアントに指定すること
     が必要です。

     /etc/intermezzo/fsetdb
        fileset のデータベースを保持します。 fsetdb 構造体は次に示す XML
        の fileset エレメントです -

          <fsetdb>
          <fileset name="yourfsetname" servername="muskox" fetchtype="bulktype" >
          <replicator>clientA</replicator>
          <replicator>clientB</replicator>
          </fileset>
          </fsetdb>

     上記は muskox が維持する yourfsetname と呼ぶ fileset 向けの単一な
     fileset の記述です。fileset はホスト clientA と clientB で複製され
     ます。

     fetchtype はサポートされたバルクムーバのクラス名であることがありま
     す。デフォルトは "Rsync" で、より単純な InterMezzo に管理されるバル
     クムーバは "Desc" と呼ばれます。

     /etc/fstab
        InterMezzo fileset のマウントを簡単にするには、下記に示すうちの
        一つを /etc/fstab に追加します。試験および開発には、ループデバイ
        スをキャッシュとして利用することがもっとも簡単です -

     /tmp/cache  /izo0  intermezzo loop,fileset=fsetname,mtpt=/mnt/izo0,
           data=journal,prestodev=/dev/intermezzo0,cache_type=ext3,noauto 0 0

     ここで、/tmp/cache はループデバイスに使われるファイルで、 /izo0 は
     マウントポイント (ディレクトリ) で、fsetname は fileset 名
     で、/dev/intermezzo0 は presto デバイス名です。キャッシュファイルお
     よび presto デバイスの作成はこのセクションの終わりの例題で説明され
     ます。これをするには、カーネルは loopback device support を有効にし
     て構築されなければなりません。

     注記 - マウントオプション data=journal は、2.4 カーネル向け ext3 の
     バグが修正されるまで重要です。

     純粋なブロックデバイスを利用することは、ループデバイスの設定をする
     必要がないので、もう少し簡単です。ブロックデバイス /dev/hda9 を利用
     するには、/etc/fstab ファイルは次のものを含みます -

          /dev/hda9  /izo0 intermezzo fileset=fsetname,mtpt=/izo0,
          prestodev=/dev/intermezzo0,cache_type=ext3,data=journal,noauto 0 0

     注記 -

        o  この文書では行が折り返されているかもしれませんが、/etc/fstab
           のエントリは一行でなければなりません。以下に示す例でも同じこ
           とが言えます。

        o  マウントポイントはオプションの中で明示的に渡す必要があります
           (マウントの将来のバージョンはこれが必要なくなるでしょう)。

     他のファイル
        ファイル /izo0/.intermezzo/fsetname/kml は InterMezzo ファイルシ
        ステム内で行なわれた変更をすべての把握する kernel modification
        log (別名 KML) を含みます。ファイル
        /izo0/.intermezzo/fsetname/last_rcvd は分散された同期化ファイル
        を把握する last_rcvd ファイルです。InterMezzo の現行のリリースで
        は、 InterMezzo ファイルシステムを初めてマウントする前に、KML お
        よび last_rcvd ファイルを作成 (通常 mkizofs を実行します) する必
        要があります。

  5.2.  InterMezzo ファイルシステムのフォーマット

  このためには、mkizofs ツールを利用します -

  mkizofs -r fsetname -j /tmp/cache
  mkizofs -r fsetname -j /dev/hdaX

  -r オプションの引き数はInterMezzo の複製ログが作成されるルートの
  fileset 名です。-j オプションで Ext3 ジャーナルが作成されます。さらに
  ファイルシステム種別を指定するようなオプションもありますので、 mkizofs
  -h を参照してください。

  5.3.  ext2/3 ファイルシステムの InterMezzo への変換

  既にキャッシュファイルシステムが初期化されている場合、InterMezzo が必
  要とするメタデータファイルを手動で作成しなければなりません -

       mount -t ext2 -o loop /tmp/cache /izo0
       mkdir -p /izo0/.intermezzo/fsetname/db
       chgrp -R InterMezzo /izo0/.intermezzo
       chmod 700 /izo0/.intermezzo
       touch /izo0/.intermezzo/fsetname/{kml,lml,last_rcvd}
       tune2fs -j /tmp/cache # if file system was ext2
       umount /izo0

  これらの例は、/tmp/cache ファイルシステムにループバックデバイスを利用
  し、 fileset は fsetname と呼ばれていると仮定します。

  InterMezzo としてこれらをマウントする可能性が発生する前に、手動で複製
  対象にそれらを複製するべきなので、結果的にファイルシステムは同一になり
  ます。

  5.4.  三つの一般的な構成

  一般的な構成を三つ例にとり、サーバ／キャッシュマネージャを起動するため
  のコンフィグファイルおよび正しい手順を考えましょう。

  5.4.1.  一つのクライアントと一つのサーバ (一般的な使用 - ラップトップ
  とデスクトップ、バックアップ、二つのウェブサーバなどの同期)

  この場合、仮にホスト muskox が fileset shared を維持し、ホスト clientA
  が fileset を複製されるとします。次のファイルは muskox と clientA の両
  方に置かれます。

     /etc/intermezzo/serverdb

          <serverdb>
            <server name="muskox" ipaddr="192.168.0.3" />
          </serverdb>

     /etc/intermezzo/fsetdb

     <fsetdb>
     <fileset name="shared" servername="muskox" >
     <replicator>clientA</replicator>
     </fileset>
     </fsetdb>

     /etc/intermezzo/sysid
        muskox 上のこの内容は -

          <sysid name="muskox" psdev="/dev/intermezzo0" bindaddr="192.168.0.3" />

     clientA 上のこの内容は -

          <sysid name="clientA" psdev="/dev/intermezzo0" bindaddr="192.168.0.20" />

     /etc/fstab
        次の行は muskox と clientA の両方のファイルに追加されます -

          /tmp/fs0  /izo0      intermezzo loop,file-
          set=shared,prestodev=/dev/intermezzo0,
          mtpt=/izo0,cache_type=ext3,noauto 0 0

     /tmp/fs0
        このファイルおよびファイルシステムは下記のコマンドを使用して作成
        されます -

          dd if=/dev/zero of=/tmp/fs0 bs=1024 count=10k
          mkizofs -F /tmp/fs0

     /izo0/.intermezzo/shared/kml
        上記の mkizofs を実行しなかった場合、最初にファイルシステムを
        ext3 としてマウントし、次のコマンドで KML および last_rcvd ファ
        イルを作成します -

          mkdir /izo0
          mount -o loop /tmp/fs0 /izo0
          mkdir -p /izo0/.intermezzo/shared
          touch /izo0/.intermezzo/shared/{kml,last_rcvd}
          umount /izo0

     /dev/intermezzo0
        これは下記のコマンドを使用して作成されます -

          mknod /dev/intermezzo0 c 185 0
          chmod 700 /dev/intermezzo0

     /etc/conf.modules
        モジュールの構成ファイルは /etc/modules.conf と呼ばれているかも
        しれません。次の行を追加してください -

          alias char-major-185 intermezzo

  lento を起動する前に、キャッシュをマウントしてください -

       mkdir /izo0; mount /izo0

  これで lento を起動できます。muskox と clientA の両方で、次を入力しま
  す。

       lento

  5.4.2.  二つのクライアントと一つのサーバ (一般的な使用 - 二つのリモー
  トオフィス)

     /etc/intermezzo/serverdb
        上記の「一つのクライアントと一つのサーバ」の場合向けと同様です。

     /etc/intermezzo/fsetdb

          <fsetdb>
          <fileset name="shared" servername="muskox" >
          <replicator>clientA</replicator>
          <replicator>clientB</replicator>
          </fileset>
          </fsetdb>

     これは最初の例と同様ですが、clientB が replicator のリストに追加さ
     れています。

     /etc/intermezzo/sysid
        muskox および clientA 向けのこれは 最初の例と同様で、 clientB 上
        のものは次を含みます -

          <sysid name="clientB" psdev="/dev/intermezzo0" bindaddr="192.168.0.21" />

     /etc/fstab
        これは、上記の「一つのクライアントと一つのサーバ」の場合で使用さ
        れるものと同様です。

  5.4.3.  IPSec および ssh トンネルの利用

  誰かここに何か書いていただけませんか？

  暗号化されたトンネルの起動 ssh -f -x -L 3333:localhost:2222 -R
  3333:localhost:2222

  5.4.4.  同じホスト上での一つのクライアントと一つのサーバ (一般的な使用
  - InterMezzo のテスト)

  ホスト muskox 上で実行していると仮定します。一つのホスト上で複数の
  lento を実行するには ip-alias の使用が必要です - ip-alias オプションが
  カーネルに組込まれていなければなりません (CONFIG_IP_ALIAS)。これは一つ
  のインターフェースに複数の IP アドレスを関連付けることができます。名前
  muskoxA1 および IP アドレス 192.168.0.100 が利用できるとします。ファイ
  ル -

     /etc/hosts
        の中に次の行を追加します -

          192.168.0.100   muskoxA1

     そして次の入力により ip-alias を追加します -

         ifconfig eth0:1 muskoxA1 up

     次に下記の内容の設定ファイルを二つ作成します -

     /etc/intermezzo/sysid

          <sysid name="muskox" psdev="/dev/intermezzo0" bindaddr="192.168.0.3" />

     /etc/intermezzo/sysid.muskoxA1

     <sysid name="muskoxA1" psdev="/dev/intermezzo1" bindaddr="192.168.0.100" />

     後者のファイルは alias された IP アドレス上で実行する lento 用の
     sysid ファイルとして作用します。同じホスト上でクライアントとサーバ
     の両方を実行しているので、それぞれのために /dev/intermezzo0 および
     /dev/intermezzo1 という異なるデバイスを指定しなければならないことに
     注意してください。

     /etc/intermezzo/fsetdb

          <fsetdb>
          <fileset name="shared" servername="muskox" >
          <replicator>muskoxA1</replicator>
          </fileset>
          </fsetdb>

     二番目の lento を実行するには、二つ目の presto デバイスおよびループ
     バックキャッシュが必要です。次のように作成します -

     mknod /dev/intermezzo1 c 185 1
     dd if=/dev/zero of=/tmp/fs1 bs=1024 count=10k

     mkizofs -F /tmp/fs1
     chmod 700 /dev/intermezzo1

     /etc/fstab
        二つのエントリがここに必要なことに注意してください -

        /tmp/fs0  /izo0      intermezzo loop,fileset=shared,prestodev=/dev/intermezzo0,
        mtpt=/izo0,cache_type=ext3,noauto 0 0
        /tmp/fs1  /izo1      intermezzo loop,fileset=shared,prestodev=/dev/intermezzo1,
        mtpt=/izo1,cache_type=ext3,noauto 0 0

     二つの InterMezzo ファイルシステムをマウントしてください -

          mount /izo0
          mount /izo1

     サーバとして動作する lento を前と同様に実行できます -

          lento

     レプリケータとして動作する lento は、どの sysid ファイルを読むかを
     伝えなければなりません (これはどの presto デバイスを使用するかを伝
     えることです)。次のように二つ目の lento を起動します -

          lento.pl --idfile=sysid.muskoxA1

  5.5.  構成チェック

  今のところ、checkconfig ツールは動作していません。コンフィグチェックの
  XML バージョンはまだ着手していません。

  設定ファイルの簡単なチェックを行うスクリプトは提供されます。
  config_check と呼ばれるスクリプトで .../intermezzo/tools ディレクトリ
  内にあります。

  lento が標準的なシステム id ファイル /etc/intermezzo/sysid を使用して
  いるなら、スクリプトは引き数なしで実行できます。異なるシステム id ファ
  イルを使用しているのなら、これを示すために --idfile=my_idfile フラグを
  使用します。

  さらに --configdir=my_confdir フラグを使用することで、 /etc/intermezzo
  以外のコンフィグディレクトリを使用できます。

  6.  競合からのリカバリ

  InterMezzo の現行版はシステムクラッシュのほとんどの状況に対処するため
  に、リカバリの仕組みが組込まれています。設定を選ぶことで、競合すなわち
  クライアントおよびサーバキャッシュへの一貫しない更新を回避できます。

  しかしながら disconnected operation の間、ファイルシステムを読出し専用
  とすることによりそれらを回避する設定を明示的にしなかった場合、競合は生
  成される可能性があります。クライアントおよびサーバが一貫しないキャッ
  シュを持ってしまった場合、システムをリカバリできるのは、手動リカバリだ
  けです。

  システムは手動で次のようにリカバリできます -

  1. 競合が起きる場合、変更を再統合している lento は終了します。この
     lento はこのレプリケータの相手からの更新を受信していて、大抵相手は
     最新になっています。したがって動作を続けている lento から終了した
     lento へ同期させましょう。

  2. サーバおよびクライアント (群) を終了し、キャッシュをアンマウント
     し、カーネルから presto モジュールを削除します -

      umountizo ; rmmod presto

  3. ext3 ファイルシステムとして各キャッシュをマウントします -

      mount -o loop /tmp/fs0 /izo0

  4. クライアントおよびサーバ上のキャッシュを同期させるために rsync か
     tar あるいは別のツールを使用します。サーバ上にないファイルをクライ
     アントから必ず削除し、キャッシュを同一にします。
  5. クライアントの synced フラグをセットしてください - これは起動時にシ
     ステムが再度同期しようとすることを防ぎます。これは SYSID をクライア
     ントの sysid で、FSETNAME を fileset 名で、置きかえた以下のコマンド
     で行えます -

      touch /var/intermezzo/SYSID/FSETNAME-synced

     例えば、fileset shared を備えたクライアント iclientA 上で使うには -

      touch /var/intermezzo/iclientA/shared-synced

  6. 永続的なデータベースはこの時点で、同期がはずれるので、クライアント
     とサーバの両方で KML および last_rcvd のレコードを消去しなければな
     りません -

      cp /dev/null /izo0/.intermezzo/shared/kml ;
      cp /dev/null /izo0/.intermezzo/shared/last_rcvd

  7. キャッシュをアンマウントし、再び InterMezzo ファイルシステムとして
     マウントします。サーバおよびクライアント上の lento を再起動します。

  これは厄介ですが、journaled recovery は開発中なのです。

  7.  デバッグ

  バグの発見を助長するには、情報をログすることが必要です。ログは二箇所で
  発生し、カーネルからのログは /var/log/messages へ、lento からのログは
  stdout および stderr へ出力されます。

  カーネルのデバッグログ機能はシステムをとても遅くします。次で開始されま
  す -

       echo 4095 > /proc/sys/intermezzo/debug
       echo 1 > /proc/sys/intermezzo/trace

  lento のログは端末から捕捉でき、--debuglevel=N の使用で開始されま
  す。N=1 で多くのことを、N=100 ですべてのことを、ログします。

  何が起こったのか調べるために、ログはもちろんのこと、バグを再現する正確
  な情報もメールしてください。

  8.  テストおよびデバッグのためにテストフレームワークを使用する

  ../intermezzo/tests ディレクトリ内の README ファイルを読んでください。
  これはあなた向けのすべての情報を簡単に取っておくことができ、一台のシス
  テム上でクライアントおよびサーバを実行します。

  9.  InterMezzo はどのように動作しますか？

  InterMezzo はかなり Coda から着想を得ており、現在のキャッシュ同期プロ
  トコルは Coda がサポートする多くのプロトコルの一つです。すべての状況で
  最良であるとは言えませんが、それを簡単に行うことができるものです。

  InterMezzo ファイルシステムは同期させられた複数のホスト上のファイルの
  集合を保持します。各ホストのネイティブファイルシステムの上に位置し、複
  数のホスト間の変更を同期させることができるような方法で、更新を把握しま
  す。この文書で、同期されたファイルを保持するために InterMezzo が用いる
  アーキテクチャおよびプロトコルを記述します。

  9.1.  一貫性と粒度

  InterMezzo はファイルシステム間の非常に緩い一貫性だけを保証します。
  ファイルは完全なユニットとしてのみ扱われ、ファイルが書込みでクローズさ
  れるまで変更は広められず、あるシステム上の変更は別のシステムに直ちに反
  映する必要もありません。InterMezzo 1.0 ではファイルシステム全体が複製
  され、どの時点においてもあるホストだけがそのファイルシステム向けの書込
  みロックを持つことが可能です。

  9.2.  intermezzo.o、カーネルモジュール

  Presto は InterMezzo 用のカーネルモジュールです。VFS 下の InterMezzo
  ファイルシステムに関連した様々な動作を実行し、Lento とのやり取りのため
  の仮想デバイスを作成します。

  9.3.  Lento

  Lento はユーザ空間のデーモンで、ファイル転送および presto に代わって他
  のキャッシュ関連を扱います。マウントされた InterMezzo ファイルシステム
  につき Lento が一つあります。

  9.4.  KML ファイル

  マウントされた InterMezzo ファイルシステムにつき一つの KML ファイルが
  あります。KML ファイルはファイルシステムの変更のレコードを含み、 KML
  ファイルを全体的に見ると、ファイルシステム全体の複製を構築するためのス
  クリプトと規定できます。

  KML ファイルは一連のバイナリレコードで、その各々はファイルシステムに対
  する一つの修正を表わします。各レコードは他のレコードと関係がない点で自
  給自足で、レコードを容易に動かせるのが特徴です。レコードは可変長で、
  ファイルの中で前後に動かし安くするために、レコードの長さは各レコードの
  最初と最後に格納されます。許される KML レコードフォーマットの完全な記
  述はまだ存在しません。

  9.5.  Last_rcvd ファイル

  マウントされた InterMezzo ファイルシステムにつき一つの Expect ファイル
  があります。Expect ファイルは、このホストおよび他のホストの KML ファイ
  ルへのポインタを保持することにより、このホストが他のホストと同期する方
  法についての情報を含みます。この情報はファイルシステム内に格納されるの
  で、リブートされてもこれは永続性があります。

  Expect ファイルはリモートホスト用にそれぞれ四つの情報を持ちます。

  1. next_to_expect 私たちに送られることを期待するリモートホストの KML
     ファイル内の次のレコードへのポインタ。この値で始まらないレコードの
     組みを得た場合、メッセージがどこかで落とされ、そのホストとの再交渉
     が必要です。これはヒントではありません。

  2. next_to_send リモートホストへ送る予定の私たちの KML ファイル内の次
     のレコードへのポインタ。データが受信され処理されたことの確認が得ら
     れた時ではなく、別のホストへデータを送ったらすぐに next_to_send を
     進めるので、これは単にヒントです。KML レコードをリモートホストに送
     る場合、レコードが私たちの KML のどこにあるかリモートホストに伝える
     ために、next_to_send の値を送ります (以下の gap を加算します)。

  3. confirmed リモートホストが受信および処理したことをまだ確認
     (confirmed) していない私たちの KML ファイル内の次のレコードの始まり
     へのポインタ。これはヒントではありません。

  4. gap リモートホストへレコードを送る前に next_to_send に加える調整。
     これは、外部的に見えるファイル位置を保持しながら、私たちのローカル
     KML ファイル内でレコードを前後させます。これはヒントではありませ
     ん。

  9.6.  KML および Expect ファイルの正当な変換

  一貫性を維持するために、KML および Expect ファイルに対するある特定の変
  換だけが許可され、一般にシステムを一貫した状態に確実にしておくため、一
  緒にトランザクションを利用して行わなければなりません。

  1. KML ファイルにレコードを追加する。これは通常の VFS ファイル操作の最
     後に利用される操作です。レコードは KML ファイルに追加され、Expect
     ファイルに対する修正は行われません。

  2. リモートの KML レコードを組込む。ローカル KML ファイルに対する操作
     の実行およびレコードの追加に加え、そのホスト向けの next_to_expect
     を増加します。KML および Expect ファイルを修正します。

  3. リモートホストへ KML レコードを送る。KML レコードのブロックは
     next_to_send から始まる KML ファイルから読まれ、リモートマシンへ送
     信されます。next_to_send は読まれたバイト数の分増加されます。KML
     ファイルのこのセクションの読出しロックを効果的に得ます。 KML は読ま
     れますが修正されず、Expect ファイルは修正されます。

  4. KML 処理の確認を受取る。受信および処理されたレコードのポインタと特
     定のバイト数の組みからなる確認をリモートホストから受取ります。これ
     らのオフセットはリモートホストからなので、そのホスト向けの gap を引
     き、次に confirmed ポインタと考えているものと比較し、その後
     confirmed ポインタを動かさなければなりません。KML の修正はありませ
     ん。

  5. KML ファイルのセクションを最適化する。最適化するためにセクションの
     書込みロックを取得し、セクションの中を読出し、私たちが望む最適化を
     実行し、それを再び書込みます。新しく書かれたセクションは前と比べ大
     きくなってはならず、より小さい場合、NOP ブロックが新しいセクション
     の前後の領域を満たすため挿入されます。このセクションが KML ファイル
     の終わりにある場合、KML ファイルは終わりにある NOP ブロックを削除す
     ることで切り詰めることができます。その後書込みロックは解放されま
     す。KML ファイルは修正され、Expect ファイルは修正されません。

  6. KML ファイルのセクションを打抜く。削除されるセクションは顕著な読出
     しもしくは書込みロックを持ってはならず、その中に NOP レコードを持つ
     ことだけができます。その後、ファイルシステムのマジックは希薄なファ
     イルを形成する適切なファイルブロックを解放します。 Expect ファイル
     は変更されません。

  7. KML ファイルの前面を切り詰める。希薄なファイルを形成する代わり
     に、KML ファイルの始めを削除できます。前記の打抜く操作と同様に、削
     除されるセクションは顕著な読出しもしくは書込みロックを持ってはなら
     ず、NOP 操作だけ持つことができます。その後、ファイルは切詰められ、
     すべてのリモートホスト用の gap の値は一つのトランザクション内で調節
     されます。

  8. KML ファイル内の NOP ブロックをスキップする。 next_to_send と
     confirm の両ポインタは NOP ブロックの開始を指しているはずです。その
     後 next_to_send, confirm, gap のすべてを NOP ブロックの大きさ分増加
     できます。変更は KML ファイル内で行なわれません。
  10.  連絡先の情報

  InterMezzo ウェブサイトは http://www.inter-mezzo.org です。

  InterMezzo の一般的な質問は intermezzo-discuss@lists.sourceforge.net
  に送ることができます。これは、InterMezzo に関連する他のメールリストと
  同様に InterMezzo ウェブサイト上でアーカイブされていますので、あなたの
  質問が既に答えられたものかどうか確かめるためにここをチェックする価値が
  あるかもしれません。

  バグ報告は sourceforge に提出してください。使用している InterMezzo の
  バージョン、システム構成の詳細、観察された不具合も添えてください。

  さらに、適切なログもすべて添えてください - サーバおよびクライアントの
  /var/log/messages、(デバッグで実行した) Lento の出力。

  11.  日本語訳について

  日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見
  は JF プロジェクト <JF@linux.or.jp> 宛に連絡してください。

     v1.0.5
        翻訳: 野本浩一 <hng@ps.ksky.ne.jp>

        校正:
        早川 仁さん <cz@hykw.tv>

