SF16のページ
- メディアの総容量に関わらず、FAT12になるのを回避し、FAT16にしてしまう、Kが提案したフォーマット。
- FAT12はFATの管理がややこしいが、FAT16はやさしい。
- FATの位置やルートディレクトリの位置とエントリ数などが固定されているために、ソフトウェアからは非常に扱いやすい。
- ディスクイメージをほんの少しいじるだけで、2GBまでのメディアに柔軟に対応可能。
- セクタがきれいにアラインされている。
- これによりメモリカードなどでは、書き込み速度の向上や、寿命延長などの効果が期待できる。
- ただしSF16_40じゃないと効果がないだろうと思われる。
- 特にSF16_40がよく使われる(32KBクラスタ)。
- 他にSF16_08(4KBクラスタ)とSF16_01(0.5KBクラスタ)がある。
- もちろん20、10、04、02もあるが、そこまでサポートしなくてもSF16対応と名乗っていい。
- Windowsはフォーマットシグネチャを読まずに、容量だけでFAT16かFAT12を決め付ける仕様になっている。このせいで容量が小さいメディアを普通にSF16にすると、FAT12と誤認され正しくアクセスできない。これを回避するためにSF16仕様では、少ない容量メディアに対してのみ不良セクタが末尾にたくさんあるように見せかけることを許す。
- 当然この場合でも空き容量は正しく表示される(総容量が最大容量になる)。
- imgtol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。
- 抑制するには、fコマンドではなくFコマンドを使う。
- その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。
- pcctol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。
- 抑制するには、fコマンドではなくeコマンドを使う。
- その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。
- SF16に正式対応したOSやツールでは、この処置がされていてもメディアの総容量は常に正しく認識される。
- サポートできる容量範囲:
- 星の数はおすすめ度数
- (Win対策しなくなる容量については、技術的な参考のために書いただけで、気にする必要はありません。)
| フォーマット | クラスタサイズ | 最大容量 | Win対策しなくなる最低容量 | | SF16_40 ** | 32KB | 2GB | 128.4MB | | SF16_20 | 16KB | 1GB | 64.4MB | | SF16_10 | 8KB | 512MB | 32.4MB | | SF16_08 * | 4KB | 256MB | 16.4MB | | SF16_04 | 2KB | 128MB | 8.4MB | | SF16_02 | 1KB | 64MB | 4.4MB | | SF16_01 * | 512B | 32MB | 2.4MB |
フォーマット
SF16 のメリット
- アラインに配慮されており、メモリカードの消去ブロックとの相性がよい。
- MOやCD-ROMなどセクタ長が異なる場合でも、ディスクイメージが同一になり、ファイルシステムドライバは単純化可能。
- ディスクイメージを少しいじるだけで容易に総容量を変更できる。
- たとえば128MB用のディスクイメージを1.5GBのパーティションに書き込むことができる。
- 可変長部分が少ないのでFAT16をフルサポートするよりも楽。
- FAT16をサポートしていれば、SF16も読み書きできる。
- SF16しかサポートしないプログラムからは、FAT16は扱いきれない。
- だから2GB以下のデバイスは、みんなSF16になっちゃえばいいと思う。
- HDDやメモリカード類はもちろんのこと、CD-ROM、FD、MO、ZIPなども。
SF16 のデメリット
- FAT16のサブセットでしかないため、FAT16に存在する欠陥を全て引き継ぐ。
- FAT領域のサイズやルートディレクトリのサイズ、そしてたくさんのアライン用リザーブがあるため、容量的には効率がよくない。
- 例えば1440KBのデバイスに対して、FAT16なら最大で1436KBをファイル領域に割り当てられるが、SF16だと1120KBしかファイル領域に割り当てられない(ディスク容量に関わらず常に320KBを管理領域に要する)。
SF16 のドライバの例
- (例えばリアルモード用の簡易なやつ、しかもクラスタサイズ32KB限定で、1GB以降にはアクセスしない簡易仕様)
- 4KB単位でデバイスを読み書きするような汎用的なドライバを作る
- FDの場合はさらに下請けで1KB単位で読み書きするやつを作って、4KBで依頼された仕事を4回の呼び出しに単純分割してやるとかすると楽そうだな。
- こういう風にしておけばMOやCD-ROMなどでかいセクタのデバイスも同じように扱えて便利。
- SF16だけを前提にしているうちは、絶対にアクセスは4KB単位(というか本当は32KB)で、話はとても単純になる。
- そのドライバで最初の4KBをバッファに読み、次の部分を確認(ここでいう「最初」はHDDとかの場合はパーティションの最初という意味)
- +0x40-+0x43の4バイトが 0x53 0x46 0x31 0x36 であることをチェック(シグネチャ:"SF16")。
- +0x0dの1バイトが0x40であることをチェック(SF16_40)。
- 一致しなかったらこのフォーマットは分かりませんでしたエラーを出す。
- FATの部分のうちの最初の64KBを読み込む
- ルートディレクトリ32KBも読み込む
- 後は0x8000以降のFATにアクセスしようとしたら、未サポートエラーにでもしておく
- こうすればリアルモードでもかなり簡単にFATをたどれる。
- 1GBしか読み書きできないが、これだけの手間でここまでできてしまうのは非常にらくだと思う。もうちょっとがんばりたくなったときに2GBに対応すればいい(それでもFATのバッファを2倍にしてFATをたどるときにちょっと頑張るだけでいい)。
- この例ではセクタサイズも32KB固定なので、クラスタ番号からセクタ番号等に変換するルーチンもものすごく単純
- ここを可変にするとそれだけですぐにSF16_01~SF16_40の全てに対応できることになる。
- ということでOSASKでのサポートもやろうとおもえばすぐできちゃう(OSASKは32bitなので、より一層楽)
おまけ FAT16 vs FAT12
- FAT12はFAT16に対して以下の点で優れている
- FAT12はFAT16に対して以下の点で劣っている
- アクセスがめんどう。
- 4096クラスタ以上が扱えない。
- Kが簡易柔軟フォーマットの提案に際してFAT12を廃し、FAT16ベースのみにした理由
- 4096クラスタ制限は可変長ディスクイメージの実現にはあまりに大きな障害。
- FAT12とFAT16のサポートをするくらいなら、FAT16のみにしてしまったほうが楽(判別する手間もなくなるし)。
- 仮にちょうど4096クラスタの場合で、FAT16からFAT12に変更したとしても、容量は4KBしか得をしない。
- SF16ではクラスタ位置のアラインなどが当然のように行われているため、4KBの差はただのリザーブ領域の増加を招くだけに過ぎない。
- リザーブをわずか4KB増やすだけのために、FAT12とFAT16の判別と、FAT12の処理の複雑さを受け入れることは、合理的ではないと判断。
対応状況
凡例
| ◎ | Win対策しないでも正しく認識 (もちろんWin対策してもOK) | | ○ | Win対策したものが正常動作 | | △ | Win対策したら動作しないが、クラスタサイズを小さくしてWin対策を回避すると正常動作 | | × | 何をやっても誤動作 |
OS
| OS | ATA-HDD | PCカード | USB | 備考 | | Windows 95 OSR2.0 | ○ | ○ | - | ◎ではないことも確認済み | | Windows 98 | | ○ | | ◎ではないことも確認済み | | Windows 98SE | | | | | | Windows ME | | | | | | Windows XP | | ○ | ○ | ◎ではないことも確認済み |
- PCカードというのは、PCカード接続のカードメモリ(PCカードATA系デバイス)。
- 空欄は、試してないけどたぶんOK。
- ここにあがってない他のデバイスはためしてないけど多分駄目。
- 検証方法(他の方法でもよいが、確実な方法の例):
[事前準備]
デジタルカメラ
PDAなど
こめんと欄
- FAT12ってそんなに扱いにくいかなあ? そりゃFAT16の方が楽ですけど。 -- I.Tak.? 2003-10-06 (月) 10:31:38
- とりあえず僕の見解を「FAT12 vs FAT16」に書いておきました。 -- K 2003-10-06 (月) 11:54:20
- FAT12/FAT16のスレッショルドは4096クラスタじゃないですよ;-) -- 揚げ足えな? 2003-10-08 (水) 10:20:31
- 000や001やff7以降が使えないから差し引いてね、っていう意味でしょうか。ええとそれなら分かっていて書いています。・・・いやその細かいことを書くのはどうかなと思って、あえて分かりやすい間違った数字を書きました。 -- K 2003-10-08 (水) 11:48:40
- OSASKスレPart6だすYO! の309さんのレポートのおかげで、動作確認一覧が急速に充実しました。心からお礼申し上げます。SF16の育ての親といえるかもしれません。 -- K 2003-10-22 (水) 01:12:48
- Win95OSR2.0では、FDをSF16フォーマットした後、一度ドライブから取り出して、再度ドライブ入れて読み出せば、ちゃんと認識できる(もちろんWin対策は必要)。今までできないと思っていたのでとてもびっくり!。うれしい。ちょっとだけWIn95を見直した。 -- K 2003-12-28 (日) 15:21:14
- 「 フォーマット」のところの拡張フラグについて追記。 -- K 2004-04-03 (土) 01:51:42
SF16でWin2000が落ちる問題を確認しました。CFは16MB、SF16_40でのフォーマットです。開くとフリーズするのでプロンプトからすばやくフォーマットしたところ、ファイルシステムはFATと認識されていなかったようです。しかし、突然認識できなくなったので先日他のPCで読み込んだ影響かもしれません。OSASKで起動すると、普通に使えました。btcfでの起動も可能です。フォーマット後も問題が発生したので、どうやらSF16の問題ではなくカードの故障のようです。 -- Zakky 2004-10-03 (日) 14:50:24
|