vine-users ML アーカイブ



[vine-users:066093] Re: vfat

  • From: 加藤 雅 <mkato@xxxxxxxxxxxxx>
  • Subject: [vine-users:066093] Re: vfat
  • Date: Sun, 6 Jun 2004 16:05:36 +0900
加藤(大阪)です。

森山さんに便乗して、同じく少しだけ。

Sun, 6 Jun 2004 14:28:35 +0900 付
"K.Moriyama" <forest@xxxxxxxxxxxxx> さんのメールより:

>   たしか MS-DOS Ver 2.11までが FAT12 だったかと...この後 Ver 3.x
> になり、FATも16になったように思います。

自分もそう記憶しています。
古い 128Mb の MO ディスクが FAT12 フォーマットで、この辺りが容量的な限界
だったようです。(ちなみに当事の MO いまだに SCSI で mount 可能です)

> > FAT はそもそも最初からディレクトリエントリ(クラスタ接続情報
> > と呼ぶのが正しいかも)が 32bit あったのですが、最初はそのうちの
> > 12bit しか使ってなかったのです
> 
>   これは知らなかった...どうりで、12 > 16 > 32 と簡単に拡張
> できたハズだ...

これはちょっと違うような・・・。

FAT(File Alocation Table)とディレクトリエントリ(ディレクトリスロットとも
いいます)は別物で、強いて言えばクラスタエントリかな。本に例えれば前者は
索引、後者は目次(かえってまわりくどい?)相当です。

FAT は長谷さんもおっしゃってる「クラスタ接続情報」かつ、クラスタ使用状況
の一覧表(Table)であり、ディレクトリエントリはファイル、ディレクトリの登
録情報で、ファイル名等と共に先頭クラスタ番号が書かれています。

ファイルが呼び出されると、ディレクトリエントリから名前を検索し先頭クラス
タ番号を得て FAT を参照しファイル実体の在処を確定して呼び出すという二段
構えのしくみになっています。

又、FAT12 では FAT 内のクラスタエントリは 32bit ではなく、文字通り 12bit
で、3byte = 24bit をふたつのエントリで別け合うというヤヤコシイことになっ
ていたと思います。

32 つながりで言うと、ディレクトリエントリのサイズは 32byteで(この事は長
谷さん御指摘のサイトの DIRENT 構造体のサイズそのものですね)、ロングファ
イルネームは 32byte 中 FAT12では未使用の部分を利用し、ディレクトリエント
リを幾つか繋げて実現してるようです。

この内二つ目以降のエントリは、MS-DOS 等ロングファイルネーム未対応の OS
からは未使用(或はシステム予約)エントリにみえ、互換性を実現しているのです
が、一部マイナー OS ではこれがトラブルの原因になったりもしてました。

# どこが「少しだけ」やねん!> オレ

# 多分 32 トリビアぐらい・・・。

-- 
加藤 雅 <mkato@xxxxxxxxxxxxx>
	http://add10.hp.infoseek.co.jp/rox/