• ベストアンサー

FAT16のデータ領域の開始位置について

FAT16では、ディスク内に(1)FAT領域、(2)ディレクトリエントリ領域、(3)データ領域というそれぞれの領域を持つと聞いています。 さらに「データ領域」への書き込み処理は「クラスタサイズ(例えば、512バイト)」の単位で行われているそうですが、このデータ領域への書き込みに関して疑問点があります。 複数のファイルを書いた場合、それぞれのファイルに対応するデータ領域の先頭アドレスは必ずクラスタサイズの整数倍になるのでしょうか?質問を言い換えれば、データ領域の1つのクラスタ内に複数のファイルのデータが混在することはあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.1

>複数のファイルを書いた場合、それぞれのファイルに対応するデータ領域の先頭アドレスは必ずクラスタサイズの整数倍になるのでしょうか? FATには「クラスタ番号」が書かれますから、ファイルの先頭位置は、必ずクラスタ単位になります。 1バイトのファイルを作ると、どこかのクラスタが1つ消費され、そのクラスタの先頭1バイトにデータが書かれます。2バイト目以降は「未使用のまま、誰も使えない状態」になります。 1クラスタが32キロバイトの場合、1バイトのファイルを作っただけで、32キロバイトが消費されます。 >質問を言い換えれば、データ領域の1つのクラスタ内に複数のファイルのデータが混在することはあるのでしょうか? ありません。

flex1101
質問者

お礼

早速の回答ありがとうございます。

関連するQ&A

  • FAT16のデータ破損について

    FAT16でデータを書いているときに、そのシステムが電源断するとファイルの破損が起きる可能性があるかと思います。 その破損については、以下のような理解で正しいでしょうか? 1) データ領域への書込み時に電源断すると、該当クラスタが壊れる。結果として、1つのファイル内のある特定の領域のデータがおかしくなり、その他の部分のデータは正常のまま。 2) FAT領域への書込み時に電源断すると、FATテーブルが壊れる。結果として、1つのファイルの全データがおかしくなる(リンク先のデータ領域のアドレスが見当違いの所になることでこうなる) 上記は正しいでしょうか? また、上記以外での破損の可能性はあるのでしょうか?

  • FAT情報の格納位置領域について教えてください

    FATのことなど、今まで考えたこともなかったのですが、暇になって思いを めぐらせているうち気になりました^^ 多分きっとディスクの先頭にFATはあるんだろうな?、と予想してるんです が、これでよろしいでしょうか? 心配なのは、生DOSで使用したFATのディスクを、WINDOWS95以降でロング ネームのファイルを上書き使用してVFAT情報を加えるような場合、どう なってるんだろう?と思って投稿しました。 FAT領域と、第一号データの間には、VFAT拡張情報が入れるような隙間領域 があるんでしょうか? (MS-DOS規格が制定された当時は未来のことなど考えていなかっただろう し…とも思うと眠れなくなりました^^) どうぞよろしくおねがいします。

  • FAT12ファイルシステムに関する問題。

    タイトルに問題と書きましたが、課題や何かじゃないので咎めないでください。 FAT12でフォーマットしたFDにファイルを直接ディスクに書き込もうと思っています。 しかし、FAT16と違ってFATにクラスタ番号を書き込むのが難しいわけです。 環境はC言語で、アルゴリズムだけなので必要は無いかと思いますが、 Win32APIを使用できる環境です。 1.クラスタ番号は12bit長で 0x003 0x004 0x005 0x006 0xFFFをFATに書き込むと 03 40 00 05 60 00 FF 0F と記録されます。 2.ディスクへの書き込みは実装してあるためバッファへの書き込みが出来ればよい。 3.ディスクは初期化された状態で、0番と1番のテーブルは予約済み。2番からクラスタ番号を書き込むこととする。 4.一つのファイルを整列された状態で書き込むこと。初期化されているため、2番から後のテーブルは全て未使用。 5.クラスタサイズは1セクタ(512バイト)である。 6.書き込まれるファイルサイズは規定していないため、ループによる処理が望ましい。 7.ファイルサイズより必要なクラスタ数は求めてある。 typedef unsigned char byte; typedef unsigned short word, *pword; typedef unsigned long dword; byte fat[512];//FATへの書き込みバッファ 0クリアされている。 dword clust;//必要なクラスタ数 既に求めてある。 dword i;//インクリメント 自分で書いたFAT16用のFAT書き込みコード ((pword)fat)[0] = 0xFFF8;//0番目のクラスタ(予約) ((pword)fat)[1] = 0xFFFF;//1番目のクラスタ(予約) if (clust == 1) {//クラスタサイズが1なら     ((pword)fat)[2] = 0xFFFF;//最終クラスタを示す値を書き込む } else {//複数のクラスタに分割されるなら     for (i=0; i<clust-1; i++) {//クラスタサイズの-1個分までインクリメント         ((pword)fat)[i+2] = (word)i+3;//n番(2番から始まる)のクラスタにn+1のクラスタ番号を書き込んでいく     }     ((pword)fat)[i+2] = 0xFFFF;//最終クラスタを示す値を書き込む } 書きかけのFAT12 ((pword)fat)[0] |= 0x0FF0; *((pword)&fat[1]) |= 0xFFF0; if (clust == 1) {     *((pword)&fat[3]) = 0x0FFF; } else {     /*ここに1クラスタを超えたファイルのクラスタ番号をFATに書き込む処理*/ } どなたか、ヒントや情報をいただけると幸いです。 コードは書き直してもいいですし、変数も適当に名前付けて構いません。 他に必要な変数などがあれば追加してください。 また、補足要求があれば何なりとお書きください。 よろしくお願いいたします。

  • FAT12/exFATのエントリ数について

    失礼します。 FATの種類毎のファイルシステムのエントリ数を調査しており FAT16やFAT32に関しては正確な情報を取得できたのですが FAT12は224個と512個の両方情報がありどちらが正しいかわかりませんでした。 exFATはエントリとの概念がなくなったのかよく理解できる情報が得られませんでした。 そこで教えて頂きたいのですが8.3形式での ・FAT12におけるルートディレクトリ上のエントリ数 ・FAT12におけるサブディレクトリ上のエントリ数 ・exFATにおけるルートディレクトリ上のエントリ数 ・exFATにおけるルートディレクトリ上のエントリ数 PCに詳しくない人間でも分かりそうな情報のURLだけでも構いません。 恐れ入りますが、ご教授のほどよろしくお願いいたします。

  • データを消さずにFAT32からNTFSに変更したい

    現在I-O DATAのHDCR-Uシリーズの「HDCR-U2.0E」という外付けHDDを使用しています。 購入したのは2010年7月で今までは動画データや学校の課題などのバックアップ用として使用していました。 ここ最近になり、動画のキャプチャーや編集をしようと思い、 4GBのファイルを扱おうとするとエラーが出てしまうのでなぜかと思い調べたら FAT32、NTFSといったファイルシステムの違いというものを知りました。  参考URL:http://tennensui.sakura.ne.jp/hddrecover/category8/ それを踏まえて上記のデータを残したまま、ファイルシステムをFAT32からNTFSへ変更したいと思って調べてみるとそういう機能があるということがわかりました。 コマンドプロンプトで「convert c: /fs:ntfs」を行うというもので、それを実行してみたのですが、 その結果がうまくいっていないようで困っています。 使用しているPCは TOSHIBA dynabook TX/66E  参考URL:http://dynabook.com/pc/catalog/support/search/user/cgi-bin/disp.cgi?pid=PATX66ELP&dir=DBs 変更点として OS:Windows 7 Professional 64bit メモリは交換しており2*2=4GBとなっています エラーの内容を下記に添付しますのでどなたか対処法を教えてはいただけないでしょうか? 以下コマンドプロンプト実行内容およびエラー内容 ----------------------------------------------------------------------------------- Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Windows\system32>convert G: /fs:ntfs ファイル システムの種類は FAT32 です。 ボリューム シリアル番号は ****-**** です ファイルとフォルダーを検査しています... ファイルとフォルダーの検査を完了しました。 ファイル システムのチェックが終了しました。問題は見つかりませんでした。 1,953,035,104 KB : 全ディスク領域 92,256 KB : 1,412 個の隠しファイル 463,360 KB : 14,404 個のフォルダー 485,162,752 KB : 134,537 個のファイル 1,467,316,704 KB : 使用可能ディスク領域 32,768 バイト : アロケーション ユニット サイズ 61,032,347 個 : 全アロケーション ユニット 45,853,647 個 : 利用可能アロケーション ユニット ファイル システムの変換に必要なディスク領域を調べています... 全ディスク領域: 1953512001 KB ボリュームの空き領域: 1467316704 KB 変換に必要な領域: 2684113 KB ファイル システムの変換 メモリ不足です ディレクトリ WINDOW~2.MIG の変換エラーです。 ファイルが壊れているか、または十分なディスク領域がない可能性があります。 ディレクトリ WINDOW~1 の変換エラーです。 ディレクトリが壊れているか、または十分なディスク領域がない可能性があります。 ディレクトリ ソフト~1 の変換エラーです。 ディレクトリが壊れているか、または十分なディスク領域がない可能性があります。 ディレクトリ バック~1 の変換エラーです。 ディレクトリが壊れているか、または十分なディスク領域がない可能性があります。 ディレクトリ 利用頻~1 の変換エラーです。 ディレクトリが壊れているか、または十分なディスク領域がない可能性があります。 変換に失敗しました。 G: は NTFS に変換されませんでした C:\Windows\system32> -----------------------------------------------------------------------------------

  • 外付けHDDの使用領域と実際の使用量との差

    外付けのHDDの使用領域と実際の使用量には差があります。 その差はクラスタギャップなのだそうですが、疑問があります。 【外付けHDDの使用領域と実際の使用量との差について - ドライブ・ストレージ - 教えて!goo】 http://okwave.jp/qa/q7515614.html #2 >エクスプローラなどで、 >ディスクの総ファイルサイズと空き容量を足しても、 >ディスクのサイズにならないことがあります。 >たとえば、10GB のドライブで >使用量が 5GB でも空き容量が 1GB しかないことがあります。 >これはクラスタギャップという現象で、 >使用量と空き容量を足してもディスク容量にはなりません。 > >FAT16 や FAT32 ファイルシステムでは >(HPFS や NTFS もそうですが) >クラスタという単位でファイルを管理しています。 >つまり、1 バイトのファイルを格納する場合も 1 クラスタが消費されます。 >1 クラスタのサイズはファイルシステムやドライブの大きさによって可変ですが、 >たとえば 4KB クラスタの場合、1KB のファイルが 10000 個あると、 >使用量は 10MB ですが、実際には 40MB のディスクを占有するために >空き容量は「ディスク容量- 40MB」になります。 【Lenovo ディスクの使用量と空き容量を足してもディスクサイズになりません - Japan】 http://www-06.ibm.com/jp/domino04/pc/support/beginner.nsf/btechinfo/syb0-025f334 >エクスプローラなどで、ディスクの総ファイルサイズと空き容量を足しても、実際のディスクのサイズにならないことがあります。 >たとえば、10GB のドライブで使用量が 5GB でも空き容量が 1GB しかないことがあります。 > >これはクラスタギャップという現象で、使用量と空き容量を足してもディスク容量にはなりません。 > >FAT16 や FAT32 ファイルシステムでは (HPFS や NTFS もそうですが) クラスタという単位でファイルを管理しています。つまり、1 バイトのファイルを格納する場合も 1 クラスタが消費されてしまいます。1 クラスタのサイズはファイルシステムやドライブの大きさによって変わりますが、たとえば 4KB クラスタの場合、1KB のファイルが 10000 個あると、使用量は 10MB ですが、実際には 40MB のディスク領域を占有するために空き容量は「ディスク容量- 40MB」になります。 特別指定したチューンをしていなければ、クラスタサイズは4KBだと思います。 【NTFS、FAT、および exFAT の既定のクラスター サイズ】 http://support.microsoft.com/kb/140365/ja 10GB=実使用量5GB+空き容量1GB+クラスタギャップ4GB クラスタサイズが4KBの環境で、使用量5GBで占有領域が9GBとなるためには、1~3KBの端数が生じるファイルが百何十万個もなければならないことになります。 私のパソコンの全ドライブ使用合計容量は120GBです。ファイルの数の合計は25万弱でしかありません。最初の教えて!gooの質問では使用合計容量が181GBだそうですが、どういった使い方をしたらクラスタギャップで4GBも生じる結果になるのでしょうか。

  • VFATとFATについて

    WindowsXPにおいて、下記フォルダを作成した場合のディレクトリエントリについて教えていただきたいと思います。 フォルダ名 C:\雷 上記フォルダを作成し、記憶領域のディレクトリエントリを参照してみると、ファイル名(拡張子含む)が11文字以下であってもVFATのフォーマットでファイル名がunicodeに変換されてディレクトリエントリが作られています。 文字コードが0x80以上ならば、11文字以下でもあってもVFATで作成されるのだと考えていました。 しかし、同時に作成されるショートファイルネームのディレクトリを参照すると、ショートファイルネームには”雷”のS-JISコードが記憶され、VFAT時のショートファイルネームの特徴である先頭6文字に”~"と番号を追加した形になっていません。 これでは8.3形式のディレクトリエントリ、VFATのディレクトリエントリのどちらにも該当しません。 ウィンドウズの動作仕様として、上記のような動作が正しいのでしょうか? 長文で申し訳ありませんが、何卒、回答の程宜しくお願い致します。

  • ディスクのフォーマットを行う場合、FATとFAT32で容量が異なるのはなぜですか?

    FATとFAT32とではクラスタサイズが異なっており、 古いパソコンで使用するなど、特に必要がある場合を除き FAT32でフォーマットするほうがよいということだと思います。 ただ、わからないのが FAT(16?)でUSBメモリのフォーマットを行った場合:130,498,560B(124MB) FAT32でUSBメモリのフォーマットを行った場合: 129,761,280B(123MB) となったことです。 実際には、FAT32のほうがクラスタサイズの関係で多くのデータを保存できることと思いますが、 容量が約99.4%になるのはどういった意味なのでしょうか。 また、今回は手持ちの128MBのUSBメモリでしか確認できていませんが、 1GB、2GBなどのUSBメモリでも同様に約99.4%となるのでしょうか。 ご教示お願いいたします。

  • FATの故障? 1ファイル内の文字化け

    マイコンでmicroSDにデータを書込みソフトを動かしているのですが、1ファイルの中に時々文字化けが発生します。 バイナリエディタで見ると、文字化けの発生する場所の先頭アドレスは0x59200, 0x6EE00, 0x72C00のように、どうも16で割り切れるアドレスになっていることが多いです。 これは - FATが壊れている - データ領域が壊れている - その他 のどのような状況なのでしょうか? 1ファイルには21600行のデータを書込むのですが、上記のような文字化けが100行程度入り、その他の場所は正常なデータ書込みがされているようです。

  • NTFSからFAT32へのデータ移行

    Win2000同士でデータを移行しましたが、後日ドライブを確認したところごみ箱以外に全くデータがありませんでした。ファイル形式がNTFSからFAT32に移したためでしょうか?データを復活させる方法はあるのでしょうか?移行先のドライブはDドライブで、150GBのHDDを増設したのもです。使用領域が13GBと表示されているので、データは残っているはずですが。何か手がかりありましたら教えてください。