• 締切済み

FAT16のデータ破損について

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

みんなの回答

  • matyu1003
  • ベストアンサー率42% (257/598)
回答No.1

もうひとつ、ファイル名やデータ領域のどこからファイルが保存されているかを保存する「ディレクトリエントリ」という部分があります。そこも書き込み時に破損する可能性があります。

flex1101
質問者

お礼

回答ありがとうございます。 ディレクトリエントリが破損した場合は、1つのファイルがまるまるおかしくなることになるのでしょうか? また、この破損では、他のファイルへの影響はないと考えてよろしいでしょうか?

関連するQ&A

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

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

  • 8192バイトのデータが1個の破損ファイルの断面中にあります

    WindowsMEを使っています。最近2週間ほど前業者によりHDDの破損後、交換→1週間後、メモリ増量(64+128)を行いました。 先程、ローカルディスクのエラーチェックを行ったところ、次のような結果が出ましたが、どういう事か分かりません。説明をお願いします。何か大切なものが無くなる可能性があるのでしょうか? エラーローカルディスク(C) 8192バイトのデータが1個の破損ファイルの断面中にあります。破損ファイルの断面中に使用できるファイルのフォルダが含まれる場合もありますが、通常はディスク領域のムダです。 詳細 2個の破損クラスタが1個のチェーンの見つかりました。 破損クラスタは現在ファイルに関連付けられてませんが、ファイルの一部であったデータが含まれています。通常はこのデータは既に削除したファイルのものであるため、破棄しても安全です。特に破損クラスタと破損チェーン数が同じ場合は何も問題ありません。

  • 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に書き込む処理*/ } どなたか、ヒントや情報をいただけると幸いです。 コードは書き直してもいいですし、変数も適当に名前付けて構いません。 他に必要な変数などがあれば追加してください。 また、補足要求があれば何なりとお書きください。 よろしくお願いいたします。

  • ミラーリングでデータ破損のHDDは認識できる?

    ミラーリング(RAID1)はデータの論理的な破損が発生した場合、異常のあるHDDを認識できるでしょうか? OSの機能ではなく、こんなミラーリング機能付きHDDケースの話と仮定します。 http://www.marshal-no1.jp/products/MAL-3335SBKU3.html 読み出し時にクラスタ単位で比較して、不一致があれば警告を出しますね。 ハードウェア故障であれば、ケース内蔵のCPUで判断して正常なHDDから読み出すと思いますが、 何らかの理由で片方のデータだけ破損した(たとえば1bitだけ反転してしまった)場合、 どちらが正常/異常なHDDか認識できるでしょうか? ファイルやクラスタ単位でCRCでも残していればどちらが異常かはすぐに判断できますが、 OSやファイルシステムに依存しないこういうHDDケースではそこまでしていないと思います。 管理領域みたいなものも無さそうです(あると書かれていない)。 認識できないなら、どうやって正しいデータを読み出せばいいのでしょう?

  • ディスクの破損データ領域と移動されないデータ

    デフラグしている時に詳細を見ると「ディスクの破損データ領域」と「移 動されないデータ」が増えたのですが、これなHDD故障の前兆とみて良 いでしょうか? そこで、再度、エラーを自動的に修復にチェックをいれて、スキャンディ スクをすると、途中でフリーズしてしまいました。電源を落として、再起 動すると、モード選択画面が出て、safe モードを選んだのですが、OS の起動終了までいきません。 これはHDDの故障でこのデータは諦めるしかありませんか? 今後のデジタルライフの為に、仮想メモリー領域をC:以外に指定して、 かつ、OSはC:のみの2.1GB(FAT32なので)にしようと考えています が、何か不都合はありますか? ちなみに、OSは98seでマシンはSONY PCV-R72です。 以上、宜しくお願いします。

  • データやファイルの破損

    パソコンを使い終わって電源を切る時電源ボタンを押して切らない事が分かりました。 電源ボタンを押して電源を切るとデータやファイルが破損する事があるという事も分かりました。 そこで嫌な予感がしてパソコンに保存してあるデータやファイルの確認をしてみたら最悪の状況でした。全て消えていました。全部消えているとは思いませんでした。 パソコンをやり始めて10年以上になりますが今まで電源を切る時電源ボタンを押して切っていました。以前勤めていた職場でパソコンを使っていた事がありましたがその時も電源を切る時電源ボタンを押して切っていました。ですが特に異常はなかったので壊れる事はなかった様です。職場のパソコンを壊さなくて良かったです。 今気になった事があります。以下のメッセージが表示された事があります。 ○○が破損しました。 ○○が正常に終了しませんでした。 ○○が壊れています。 この様にメッセージが表示された事がかなりありました。しかし何の事か分からなかったのでそのままにしていました。パソコンは正常に動作していたので問題ないと思っていました。 この様にメッセージが表示されたのは電源を切る時電源ボタンを押して切っていたからですか。

  • データを消さずに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> -----------------------------------------------------------------------------------

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

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

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

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

  • フォーマットについて。

    フォーマットとはなにかというレポート課題を考えていて、 FAT領域とクラスタの関係で少し気になることがあります。 FATがデータ領域のどこのクラスタにデータを保存しているかを管理しているみたいですが、 例えばフォーマットされたFDにメモ帳で何か文字を打って保存したとします。 そしてデータを削除したとしてもコマンドプロンプトで直接そのデータが格納されている データ領域の番地(この場合は初めからなので21Hかな?)をダンプコマンドで見たら 16進数のアスキーコード(?)が表示されるので一応中身の文字が読めるのですが、 データの削除・追加を繰り返しているうちにデータの断片化がおこりますよね。 だからこの例は一回書き込んでそれを削除しているだけだから番地はデータ領域の 一番初めだとわかっていたから読めましたが、断片化が起きてしまったら どのクラスタにデータがあるのかがわからなくなりますよね? だから普通に削除してもクラスタ内のデータは消えないけどFATの管理情報が 削除されるのでデータが読めなくなるし、コマンドでも番地がわからないから結局は読めませんよね? データ自体はどこかにあるとしても。 私は、 「FATが無ければ、データ領域の何処のクラスタ内にデータが保存されているかの 管理ができなくなり、クラスタが無ければデータ自体が保存できない。 これらのことからFAT領域とクラスタは互いに必要なものであり、 データの保存・管理をする上で切っても切れない関係にある。」 というような内容でまとめましたが、おかしいでしょうか? 助言・意見を下さい。お願いします。m(-_-)m