LoginSignup
2
3

More than 5 years have passed since last update.

NTFS のスパースとか圧縮とかと、実際のディスクサイズとか

Last updated at Posted at 2018-12-17

結論

なんでもかんでもzip圧縮すればよいというわけではないということ。

スパースファイルなら、そのままの方がディスクを食わない場合もある。

きっかけ

NTFS圧縮のススメという記事を書いてみて、ふと仮想化ソフトウェアのディスクイメージって、スパースなんじゃないか?

となると、zip圧縮した方がディスク食うんではないか?

とか疑問を感じたので、実際に試してみた。

準備

まずはツールを作った(作らなくてもどっかに転がっていそうだけど、作れるものは作ってみたいんですよ~)。

ファイルサイズを出力するだけのテストプログラム

シンプルに Win32API の GetFileSize()GetCompressedFileSize() を表示するだけ。

スパースファイルの作成は・・・作れなかったまで、fsutilコマンドで行った。

実験結果

NTFS圧縮

まずはシンプルにNTFS圧縮の場合。
4MBぐらいのbitmapファイルを対象にする。
02.jpg

NTFS圧縮されたファイルは、既定の設定だと、ファイル名は青くなる

03.jpg

まぁ、こんな感じで、圧縮されてディスクに格納されるのが、NTFS圧縮。

スパースファイル

見よう見まねでスパースファイルを作ってみる

04.jpg

最初のスパース前は、ファイルサイズと同じだけディスクを食っていたけど、スパースにしたら、ゼロになった。

スパースファイルをzip圧縮してみる

次は、そのスパースファイルをエクスプローラのzip圧縮をしてみる

05.jpg

まぁ、当たり前だな。スパースでディスクを節約していたのに、圧縮処理(データのランダム化の一種)によって、スパースの効果がなくなっているって事だな。

つまり、スパースファイルをzip圧縮すると、ディスクの節約になるかもしれないし、ディスクの節約どころか無駄使いになるかもしれない

スパースファイルをNTFS圧縮してみる

06.jpg

NTFS圧縮サイコー!!
スパースファイルをNTFS圧縮しても、スパースの効果は失われないって事だな。

代替ストリームと GetCompressedFileSize() の関係

ふと、気になったので・・・・

代替ストリーム付のファイルを用意してみた。
07.jpg

あ、こんなツールも作っていたよ。ZoneID を復活するスクリプト

とりあえず、代替ストリーム活用の代表がこれ(ゾーン情報)だと思う。

08.jpg

関係ないようだ・・・GetFileSize() と GetCompressedFileSize() の違いで既定以外の代替ストリームがあるとかないとかは分からないという事だな。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3