• ベストアンサー

ファイルのサイズについて

素朴な疑問なんですが、 OSはHD上のファイルのサイズをどのようにして認識しているのでしょうか? ファイルにヘッダみたいなのがあってそれを元に算出しているのですか? あるいはHD上で実際に占めている領域を計算しているのですか? 算出方法はすべてのOSで共通なのでしょうか? また、OSにファイルのサイズを偽って認識させることは可能でしょうか?

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

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

いろいろな方法がありますが、ごく大雑把に言えば、OSはそれぞれのファイルについて 「このファイルの大きさは、このくらいです」 という情報がHDDのどこかに記録し、またそれを読み出すことでファイルの大きさを認識します。 これより詳しくはOS(より正確にはファイルを格納するHDD上のデータ構造:これをファイルシステムと呼びます)に依存することなので一概には言えません。たとえばセクタの大きさや数を基本としたものや、各ファイルの(論理的な)先頭にヘッダとして情報を持つもの等があります。 「ファイルのサイズを偽って認識させる」とは具体的にどういう状態を指すのか分かりませんが、「OSがHDDに書き込んだファイル長に関する情報」を「OSによるファイル操作」以外の方法を用いて書き換えることは、多くの場合可能です。

minimax2005
質問者

お礼

回答ありがとうございます。 質問に書いた「ファイルのサイズを偽って認識させる」とは、たとえば実際は3キロバイトのデータを5メガバイトに偽装できるのか?ということです。 ヘッダにファイルのサイズを記録するようなファイルシステムの場合は、同じファイルシステムのHDに偽装したファイルを転送した場合でも、サイズが偽装されたままになるのでしょうか? また、違うファイルシステムの場合はやはり偽装が解除されるのでしょうか?

その他の回答 (5)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.6

FATの場合はディレクトリエントリを使いますが、他の多くのファイルシステムではファイルを作るたびに1ブロック(クラスタ)をそのファイルの管理領域に割り当て、管理領域にはファイルサイズ、使用ブロック数、作成・変更・アクセス日時、使用しているブロックのリストなどが記録されます。 OSの保護を掻い潜ってファイルサイズ情報を書き換えれば誤認識させることは可能でしょうが、他の情報との間に矛盾が生じるので何らかのタイミングでOSがチェックすれば分かります。 ただ大きく見せるだけならファイルの後ろにダミーデータを付加すればすみますけどね。これだとファイルシステム的には矛盾ないのでエラーチェックもされませんし。

minimax2005
質問者

お礼

回答ありがとうございます。 ディレクトリエントリと管理領域は違うものだったんですね。 >ダミーデータを付加すればすみますけどね。 たしかにそうですね。 でも小さく見せるには、書き換えるしかないですね。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

> 質問に書いた「ファイルのサイズを偽って認識させる」とは、たとえば実際は3キロバイトのデータを5メガバイトに偽装できるのか?ということです。 大昔のMS-DOS時代のファイルシステム(FAT16)では可能でした。 その名の通り、FAT(File Allocation Table)にファイルサイズが書き込まれていたので、DOSのDEBUGか何かで書き換えて遊んだ記憶があります。 > 算出方法はすべてのOSで共通なのでしょうか? OSとファイルシステムごとに異なります。 例えば、同じWindows98でもFAT16とFAT32、更には同じFAT32でもクラスタのサイズによって変わっていたハズ。 1バイトのファイルを作って、ディスク上のサイズが何バイトになるか?とか。

minimax2005
質問者

お礼

回答ありがとうございます。 昔はできたんですか~。 知らなかったです。 >同じFAT32でもクラスタのサイズによって変わっていた なるほど効率的になるように考えられているんですね。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.4

ヘッダにファイルのサイズを記録するようなファイルシステムの場合、そのヘッダの「ファイルのサイズ」を記録している場所のデータ(値)を書き換えることは、多くの場合、可能です。 その書き換えによりどのような影響が生じるかは、ファイルシステムとOSによって異なるので一概には言えません。例えばファイルシステム内の他の部分に記録されているデータとの整合性をチェックし異常があるものと判断して何らかの対応措置を行うかもしれませんし、何ら整合性のチェックを行わず上書きされたファイルサイズのファイルがあるものとしてゴミデータを読み出してしまうかもしれません。

minimax2005
質問者

お礼

回答ありがとうございます。 サイズを書き換えてもファイルを移動する場合は実用的じゃないのですね。

  • char2nd
  • ベストアンサー率34% (2685/7757)
回答No.2

 HDDは使用する前にフォーマットという作業を行います。これは、ディスクにいくつかの細かい区切りを設け(これをセクタといいます)、そのセクタを管理するための領域を作成する事を言います。 http://e-words.jp/w/E38395E382A9E383BCE3839EE38383E38388.html  HDDにファイルを書き込こうとすると、HDD上のセクタに記録します。管理領域には、どのファイルがどこのセクタに書き込まれたかが記録されます。ファイルの大きさによっては、複数のセクタを使います。従って、使用したセクタの数からそのファイルのサイズが判ります。一つのセクタには複数のファイルは書き込まれません。  セクタの大きさや構成はファイルシステムやOSによって違います。

minimax2005
質問者

お礼

回答ありがとうございます。 管理領域というのは、No.1さんがおっしゃっていたディレクトリエントリと同一のものなんでしょうか? 実際にファイルサイズの書き換えを行うときは、管理領域に記録されている使用したセクタのデータを書き換えるのですか? No.1さんが書き換えるとファイルが壊れる場合があると説明されていましたが、これは例えば 「ファイルA(セクタ1~3)とB(4~8)が連続するセクタに記録されていた場合に、Aのサイズを拡張して1~5と書き換えたら、ファイルAにアクセスする際にBの領域にまでアクセスされてしまうからAもBも壊れてしまう。逆にAを縮小して1~2とした場合にはAだけが壊れる」 という解釈でいいんでしょうか? また、書き換えた内容を元に戻すと、壊れたファイルを修復できるんでしょうか?

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

Windowsで使われているFATでいうと、ディレクトリエントリとFATの2つにデータが格納されています。ファイル名やファイルサイズ、格納場所がディレクトリエントリに保存されています。OSなどで表示するファイルサイズはこの情報を元に算出されています。 もちろん、このデータだけ書き換えれば偽装は可能です。可能ですが、実際にファイルにアクセスした段階で壊れる可能性があります。 基本的には、どのOSでもこのような形式で算出している場合が多いのではないでしょうか?汎用機でいうVTOCなんかもそうだと思います。実際に書き込んでいるファイルを読み込むことは、処理時間から言うと無茶です。HDDの残り容量を表示するだけでディスクをフルスキャンでウン十分単位^^

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;100108
minimax2005
質問者

お礼

回答ありがとうございます。 ディレクトリエントリにサイズや更新日などのファイル情報が記録されているんですね。 これを書き換えるとどうして、ファイルが壊れてしまうんでしょうか? >HDDの残り容量を表示するだけでディスクをフルスキャンでウン十分単位^^ いわれて見ればそうですね。 ファイルの使用領域の計算は案外時間がかかるものなんですね。

関連するQ&A

  • メールサイズについて

    素人質問ですが・・・ あるサーバに本文とヘッダーを含めた1KBのメールを送り、サーバログを見たところ1.6KBというようにメールサイズが増加していました。 これは、メール配送の途中でヘッダーなどが書き換えられたことによって起こることなのでしょうか? ちなみに、LinuxでもWindowsのように実際のファイルサイズとOSから見たファイルサイズ(?)というような概念はあるのでしょうか?

  • ファイルサイズの増大

    古いMO(640MB)数枚分のファイルを新しい外付けHDD(USB経由300GB)にコピーしたところ、HDDが満杯になり空き容量がなくなってしまいました。ファイルサイズの合計は計算上高々数GBです。古いOSのファイル形式だと沢山の領域を確保してしまう等の現象なのでしょうか?この状況を回避する方法(圧縮法など)をご存知の方、よろしくお願いします。

    • 締切済み
    • Mac
  • psdファイルのディスク上のサイズを小さくしたい

    こんにちは。 mac OS Xを使用しております。 単刀直入に申しますと、psdファイルのディスク上のサイズを小さくするにはどうしたらいいでしょうか? というのは私の作ったpsdファイルはものによってディスク上のファイルが実際のサイズと同じくらいのものと実際よりも小さいものがあり、現在問題視しているのは実際のサイズが18MBに対してディスク上のサイズが18MBのものと3MBのものです。 それらのファイルは実際のサイズも解像度もレイヤーの枚数も全てが同じで、特に設定を変えたというわけでもありません。 何故このようなことが起こるのががわからないのですが、ディスク上のサイズが18MBのファイルを3MBにするにはどうしたらいいでしょうか? 稚拙な質問ですが、ご回答よろしくお願いいたします。

    • 締切済み
    • Mac
  • ファイルサイズの出力

    OSはwin2k、または、RedHat7.3です。 ドライブ内のすべてのファイルのサイズを出力させたいのですが、どうすればよいでしょうか? フォルダ、ディレクトリ内のすべてのファイルのサイズです。

  • サイズの異なるPDFファイルを作るには?

    現在Acrobat6.0を使用しております。 ひとつPDFファイルを作成してわからないことがあるのですが PDFファイルを作成すると、元のファイルがA3のものでも出来上がりは全てA4サイズのPDFになってしまいます。 元がA3サイズだったのものは、PDFや印刷をする時も、元のサイズのままA3で。 ということはできるのでしょうか? またA3やA4等混載したファイルを作ることはできますか? できるのかできないのかでいつも悩んでおります。 宜しくお願いいたします。

  • trancute tableで消したんですが、サイズが・・・

    今使っているデータベースのファイルサイズが2GBに なってしまったので、 一度まっさらなデータベースを用意しようと思い、 trancute tableで全てのテーブルの内容を消して、 データベースのバックアップをしました。 バックアップのファイルサイズは40MBぐらいになっているんですが、 復元するとファイル領域に元の2GBのサイズが確保されてしまいます。 どうすれば、ファイルサイズが小さくなるのでしょうか? よろしくお願いいたします。

  • Vista上でのHDDサイズ

    現在、Windows Vista Ultimateを使用しております。 320GBのHDDを1個接続し、100GB(Cドライブ)と200GB(Dドライブ)の2つにパーティションを分割しておます。 CドライブにOSが入っており、Dドライブをデータ用としています。 このDドライブですが、 プロパティを見ると、使用領域157GB中、空き領域43GBと表示されているのですが、実際にDドライブを開き、見えているフォルダをすべて選択してファイルサイズを見ると100GB程度しか使用しておりません。 この実際より50GBも余計にファイルサイズをくっている現象の理由などわかる方いましたら、アドバイスいただけないでしょうか。 なお、フォルダオプションは、「全てのファイルを表示にする」にしてあります。 また、下記のようなディレクトリサイズ分析ツールを使用してみてもDドライブのファイルサイズは100GBとでました。 http://www.vector.co.jp/soft/win95/util/se030005.html 切実に困っています。 よろしくお願いいたします。

  • パーティションサイズ変更について

     こんにちわ。パーティションサイズを小さく変更しようと思いますが、僕の買ったOSはメーカー製のノートパソコンで、リカバリ領域が内臓されているそうです。リカバリするときもHDからできます。  HDを小さくした場合、この領域を誤って消してしまうのではないかという心配があります。どうすればいいでしょうか?一応、リガバリCDも作ってあります。  

  • 各ファイル・フォルダのサイズは小さいのに何故かCドライブの空き領域が無い!?

    Win2000を使用しています。 Cドライブ20GBの空き領域がほぼなくなってしまってます。 ゴミ箱は全て空にしましたし、 "保護された"オペレーティングシステムファイルを表示しない(推奨)" をoff "すべてのファイルとフォルダを表示する" をon にしてCドライブ下のファイル・フォルダのプロパティを開いてみても十分に空き領域があるはずなのに 何故かCドライブのプロパティを見てみると空き領域がほぼ有りません。 これは何が原因なのでしょうか? 因みに ディスクのクリーンアップも試してみましたら "(c:)に作成される空き領域を計算しています。" で数日経っても計算中となったままなのです。

  • ごみ箱から削除したファイルのサイズ

    ごみ箱から削除したファイルはウインドーズが 認識できないとの事ですが 元のファイルサイズが1メガであれば どれ位に圧縮して存在するのでしょうか 読めないだけでハードディスクを圧迫することは ないのでしょうか