Amiga ファイルシステムの概要
============================

様々な Amiga ファイルシステムのすべてが読み書きをサポートされているわ
けではありません。現状 Amiga には 6 種類のファイルシステムがあります。

DOS\0		古いかもしくはオリジナルのファイルシステムで、実際には
                ハードディスク向きではなく、通常どちらも使われることは
		ありません。
		読み書きサポートされます。

DOS\1		オリジナルの Fast File System です。読み書きサポートさ
                れます。

DOS\2		古い "国際化" されたファイルシステムです。国際化の意味
                するところは、ファイル名中にアクセント文字 (国際化され
                た文字) は大文字小文字の区別をしないので、そのようにバ
                グが修正されています。読み書きサポートされます。
                [訳注：この国際化は ISO-8859-* に沿うもののようです。]

DOS\3		「国際化された」Fast File System です。読み書きサポー
                トされます。

DOS\4		ディレクトリキャッシュを持つオリジナルのファイルシステ
                ムです。ディレクトリキャッシュはフロッピー上のディレク
		トリアクセスをかなり速くしますが、ファイルの生成／削除
		を遅くします。ハードディスクには効果があまりありません。
		読み出し専用のサポートです。

DOS\5		ディレクトリキャッシュを持つ Fast File System です。読
                み出し専用のサポートです。

上記のすべてのファイルシステムは 512 から 32K バイトのブロックサイズを
扱えます。サポートしたブロックサイズは 512, 1024, 2048, 4096 バイトで
す。より大きなブロックは、ほとんどの場合速度が向上しますが、ディスク領
域を無駄遣いします。実際には、4K バイトを超えた場合の速度の向上は、無
駄使いに比して望めないので、4K バイトを超えたブロックサイズを使えなく
とも、問題ありません。

上記のファイルシステムは muFS(multi user File System) 相当のサポートも
されています。

AFFS のマウントオプション
=========================

protect		このオプションをセットすると、protection ビットは変更
                できません。

setuid[=uid]	これは、ファイルシステムのすべてのファイルおよびすべて
                のディレクトリの所有者に uid もしくは現在のユーザの
		uid をそれぞれ設定します。

setgid[=gid]	上記と同様に gid について設定します。

mode=mode	元々のパーミッションにかかわらず、指定された (8 進の)
                値にモードフラグを設定します。ディレクトリに対応する r
		ビットがセットされている場合、x パーミッションが付加さ
		れます。
                これは、ほとんどの純粋な AmigaOS のファイルが 600 にマッ
		プされるので、便利です。

reserved=num	パーティションの最初にある予約ブロック数を num で設定
                します。このオプションは必要ではないはずです。
                既定値は 2 です。

root=block	ルートブロックのブロック数を設定します。これは必要では
                ないはずです。

bs=blksize	ブロックサイズに blksize を設定します。有効なブロック
                サイズは 512, 1024, 2048, 4096 バイトです。ルートオプ
		ションと同様に、affs 自体で判定できるので、必要ではな
		いはずです。

quiet		ファイルシステムは、許可しないモード変更のエラーを戻し
                ません。

verbose		ファイルシステムがマウントされた時、ボリューム名、ファ
                イルシステムタイプ、ブロックサイズが syslog に書かれま
		す。

mufs		実際のファイルシステムは muFS ですが、ファイルシステム
                自体では muFS と識別しません。ファイルシステムを muFS
		としてフォーマットしなかったが、muFS として使用する場
		合、このオプションが必要です。

prefix=path	path が、AFFS パーティション上のシンボリックリンクの絶
                対パス名の前に付加されます。既定値は "/"。(以下を参照
                してください。)

volume=name	絶対パスを持つシンボリックリンクが AFFS パーティション
                上に作成された時、name がボリューム名として使用されま
		す。既定値は ""(空の文字列)。(以下を参照してください。)

ユーザ／グループおよび protection フラグの扱い
==============================================

Amiga から Linux：

Amiga の protection フラグ RWEDRWEDHSPARWED は次のとおり扱われます。

  - R は user, group, others の r にマップします。ディレクトリでは、R
    は x にも割り当てられます。

  - W と D の両方が許可される場合、w がセットされます。

  - E は x にマップします。

  - H と P は常に保持されますが、Linux 下では無視されます。

  - A はファイルに書かれている場合、常にリセットされます。

マウントオプションで setuid や setgid が指定されない場合、ユーザ id お
よびグループ id が使われます。ほとんどの Amiga ファイルシステムはシン
グルユーザシステムなので、それらはルートに所有されます。Amiga ファイル
システムのルートディレクトリ (マウントポイント) は、実際にファイルシス
テムをマウントしたユーザに所有されます (ルートディレクトリは uid/gid
のフィールドを持っていません)。

Linux から Amiga：

Linux の rwxrwxrwx ファイルモードは次のとおり扱われます。

  - r パーミッションは user, group, others の R をセットします。

  - w パーミッションは user, group, others の W と D をセットします。

  - user の x パーミッションは通常のファイルの E をセットします。

  - 他のすべてのフラグ (suid, sgid など) は無視され、保持されません。
    
新しく作成されたファイルおよびディレクトリは、現在のユーザの ユーザ ID
およびグループ ID と、umask によるモードが与えられます。

シンボリックリンク
==================

Amiga と Linux のファイルシステムは互いに似ていますが、些細とはいえな
い違いがいくらかあります。その一つはシンボリックリンクで明白になります。
Linux はルートディレクトリを一つだけ備えたファイルシステムを持ちますが、
Amiga はそれぞれのファイルシステム (例えば、パーティション、フロッピー
ディスクなど) で分割されたルートディレクトリを持ちます。Amiga で、これ
らのエンティティは "ボリューム" と呼ばれます。それらのアクセスに使用で
きるシンボリック名を持っています。したがって、シンボリックリンクは異な
るボリュームを指すことができます。AFFS はボリューム名をディレクトリ名
に代え、それへの prefix path (prefix オプションを参照してください) と
して使用します。

例：
すべての Amiga パーティションを /amiga/<volume>(<volume> はボリューム
の名前です) の下にマウントし、その時にマウントオプション
"prefix=/amiga/" を与えます。(それらが "User", "WB", "Graphics" なら、
マウントポイントは /amiga/User, /amiga/WB, /amiga/Graphics です)。
"User:sc/include/dos/dos.h" を参照するシンボリックリンクは
"/amiga/User/sc/include/dos/dos.h" となります。

例
==

コマンドライン：
    mount  Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,verbose
    mount  /dev/sda3 /Amiga -t affs

/etc/fstab のエントリ：
    /dev/sdb5	/amiga/Workbench    affs    noauto,user,exec,verbose 0 0

重要な注意
==========

PC に Amiga のハードディスクを接続している時に、Windows 95 (3.x, 98,
NT については知らない) をブートすると、ブロック 0 のバイト 0x00dc から
0x00df にごみを上書きしますので、Rigid Disk Block が不正になります。運
良くそこは RDB の未使用の領域なので、チェックサムだけが一致しなくなり
ます。
Linux はこのごみを無視して、RDB を何とか認識しますが、Amiga にそのドラ
イブを再び接続する前に、RDB を再格納するか修復しなければなりません。で
すので、Windows をブートする前にバックアップコピーを作ってください！

すでにダメージを受けている場合、下記で RDB を修復します (<disk> は装置
名です)。
自分のリスクで行ってください。

  dd if=/dev/<disk> of=rdb.tmp count=1
  cp rdb.tmp rdb.fixed
  dd if=/dev/zero of=rdb.fixed bs=1 seek=220 count=4
  dd if=rdb.fixed of=/dev/<disk>

バグ、制限、警告
================

流布されているように、かなり多くのことが動作しないかもしれません。すべ
てのことがテストされているわけではありませんが、数百 MB は、この fs を
使用して読み書きされています。バグの最新のリストに関しては、
fs/affs/Changes を調べてください。

ファイル名は警告無しで 30 文字に切り詰められます (これは 
include/linux/amigaffs.h にあるオプション AFFS_NO_TRUNCATE をコンパイ
ル時に設定することで変更することができます)。

ファイル名の一致における大文字小文字の区別は、affs ではありませんが、
Linux シェルでは区別されます。例えば (/wb は affs がマウントした fs)：
    rm /wb/WRONGCASE
は、/mnt/wrongcase を削除しますが、
    rm /wb/WR*
は、シェルが名前を一致させるので、削除しません。

ブロックの割当てはハードディスクパーティション向けに設計されています。
一つ以上のプロセスが (小さな)ディスケットに書く場合、醜い方法で割当て
られます (しかし、本物の AFFS も良くできているとはいえません)。さらに、
領域がきつい場合も同様です。

OFS 上のプログラムファイルは 488 バイトのブロックなので、メモリにマッ
プできず、実行することができません。同じ理由で、ループバックデバイスを
介したファイルシステムのようなイメージをマウントできません。

affs パーティションがマウントされている時にシステムがクラッシュした場
合、ルートブロックの bitmap valid flag は信頼できなくなるかもしれませ
ん。現状、Amiga(disk validator) もしくは手動 (誰か方法を知ってませんか？)
によらず、そのようなファイルシステムを修復する方法はありません。たぶん
将来・・・

affs パーティションをシステム起動時にマウントする場合、fs をチェックし
ないように fsck に指定した方がいいです (/etc/fstab の 6 番目のフィール
ドに '0' を書きます)。

Amiga フロッピーコントローラと互換性がないので、通常の PC もしくはワー
クステーションでフロッピーディスクを読むことはできません。

Linux 用 Amiga エミュレータに興味があれば、

http://www-users.informatik.rwth-aachen.de/~crux/uae.html

をご覧ください。
----------------------------------------------------------------------
日本語訳：野本浩一 <hng@ps.ksky.ne.jp>
    校正：後藤正徳さん <gotom@debian.or.jp>
