ディスク圧縮

**ディスク圧縮**（）とは、ハードディスクドライブのサイズを変えずに格納できる情報の量を増やすユーティリティソフトウェア。指定されたファイル（群）のみを圧縮するデータ圧縮ユーティリティとは異なり、ディスク圧縮ユーティリティは自動的に機能し、ユーザーはその存在を気にする必要がない。

ハードディスクに情報を格納する際に、このユーティリティがデータ圧縮を行う。読み出す際にも、ユーティリティがデータを伸張する。ディスク圧縮ユーティリティは、標準のオペレーティングシステムのルーチン群をオーバーライドする。全てのアプリケーションソフトウェアは、標準のオペレーティングシステムのルーチンを使おうとすると、その(オーバーライドされた)ルーチン群を使ってハードディスクにアクセスすることになるため、ディスク圧縮ユーティリティをインストールしてもそのまま何事もなく動作することができる。

ディスク圧縮ユーティリティは特に1990年代前半に広く利用された。当時のパーソナルコンピュータのハードディスクは容量が小さかった（20メガバイトから80メガバイト）。また、ハードディスク自体の価格が高く、1メガバイトあたり約20ドルのコストがかかった。ディスク圧縮は、高価な大容量ディスクを買わずに実質的なディスク容量を増やす手段として人気を呼んだ。よいディスク圧縮ユーティリティは、平均で容量を2倍にでき、性能低下はほとんど発生しない。

1990年代末ごろには、ハードディスクが低価格化・大容量化してきたため、この技術は使われなくなった。

なお、多くのディスク圧縮ユーティリティはDOSシステム上で動作するよう設計されていたが、概念自体はDOS固有のものではない。例えば、DiskDoubler は Macintosh 向けのバージョンもあった。

## 主なディスク圧縮ユーティリティ
### 独立ユーティリティ
初期のディスク圧縮ユーティリティは独立した製品だった。ユーザーはこれらをオペレーティングシステムとは別に入手し、インストールし、設定する必要があった。

* **Stacker** (Stac Electronics)
* **XtraDrive** (Integrated Information Technology, IIT)
* **SuperStor Pro** (AddStor)
* **DoubleDisk Gold** (Vertisoft Systems)
* **DiskDoubler** (Salient Software)

### バンドルされたユーティリティ
オペレーティングシステムにディスク圧縮ユーティリティを同梱する販売方法が受け入れられていった。再販業者はそれによってディスク容量を本来よりも大きく宣伝でき、ユーザーはソフトウェアを設定する手間が省けるという利点があった。以下のような同梱形態があった。

* **[[DR-DOS]] 6.0** （デジタルリサーチ）と **SuperStor**
* **Novell DOS 7** （ノベル、デジタルリサーチ買収後）と **Stacker**
* **[[PC-DOS]] 6.1** (IBM) と **SuperStor**
* **PC-DOS 6.3** (IBM) と **SuperStor**
* **PC-DOS 7.0** (IBM) と **Stacker**
* **PC-DOS 2000** (IBM) と **Stacker**
* **[[MS-DOS]] 6.0** および MS-DOS 6.2 （マイクロソフト）と **[[DoubleSpace]]**（Vertisoft Systems の **DoubleDisk** から派生）
* **MS-DOS 6.22** （マイクロソフト）と **DriveSpace**（DoubleSpace の圧縮アルゴリズムを変更したもの）
* **[[Microsoft Windows 95|Windows 95]]** （マイクロソフト）と **DriveSpace**
* **Plus!** （マイクロソフト）と **DriveSpace 3**

Windows XP には "compact" というユーティリティを含めた NTFS のファイル圧縮機能がサポートされていたが、上述のような「圧縮ドライブ」という実装ではない。

## 動作原理
ディスク圧縮は、一般に巨大な単一ファイルを作成し、それを仮想ハードドライブとする。これは、1つのハードドライブをパーティションによって複数の仮想ドライブに分けるのと似ている。圧縮されたドライブはデバイスドライバ経由でアクセスされる。

### 既存ドライブの圧縮
全ドライブは初期状態では空である。ドライブ作成ユーティリティは「現在のドライブを圧縮しますか」とユーザーに提案する。すると、以下のような処理がなされる。
# 空の圧縮ドライブを生成し、既存のドライブ上のファイルとして格納する。
# 既存ドライブ上の既存ファイルを圧縮した上で新たな圧縮ドライブに転送する。
# すると、徐々に空き領域が大きくなっていき、圧縮ドライブが大きくなっていく。
# 全ファイルの転送が完了したら、ドライブレターを入れ替える。
一般に、一部のシステムファイルは転送されない。例えば、OSのスワップファイルは元のドライブに残される。

### ブートドライブの圧縮
圧縮されたドライブにアクセスするには、対応したデバイスドライバをロードしなければならない。Cドライブを圧縮する場合、ブート処理は以下のように変更される。
# BIOS が1番目の物理ハードドライブのセクタ0をロードする。
# ブートパーティションのセクタ0をロードする。
# （MS-DOSの場合）IO.SYS をロードし、CONFIG.SYSの処理を開始する。
# 圧縮デバイスドライバをロードする。圧縮ドライブをCドライブに変更し、元のドライブは通常Fドライブにする。
# 以降の処理は圧縮ドライブ上で行われる。

### 性能への影響
一般には、圧縮および伸張の処理を行う必要が生じるため、性能が低下すると言われている。しかし、低速なハードディスクを使っている場合、ディスク圧縮によって逆に性能が向上する。これは、以下の要因に起因する。
# 圧縮されると、ディスクに転送するデータ量が少なくなる。
# ディスクアクセスは効率化のためにまとめて行われることが多い。

システムの通常の処理がハードディスクアクセスの完了を頻繁に待つ必要がある場合（I/Oバウンド）、圧縮によって性能は大幅に改善される。しかし、圧縮と伸張に使うCPU時間が影響する場合もあり、CPUを使い続けるような処理をしているシステム（CPUバウンド）では、全体として性能が低下する可能性がある。

### 欠点

ディスク圧縮には以下のような欠点がある。
* 圧縮する前にファイルシステムにエラーがないか確認しないユーティリティもある。例えばクロスリンクのようなエラーがあると、圧縮過程でさらにデータが失われてしまう。
* 圧縮ドライブはデバイスドライバをロードしないと、内容を参照できない。従って、ブートディスクを圧縮するには、少なくともそのデバイスドライバが圧縮されていない状態でロードできるようにしなければならない。
* ユーザーは元のドライブ上の巨大なファイルが圧縮ドライブだと気づかないことがある。デフォルトではその巨大ファイルは見えないようになっているが、ユーザーがそのファイルに気づいた場合、間違って削除してしまうことがある。すると、圧縮ドライブが失われてしまう。

## 関連項目
* DoubleSpace
* DOS (オペレーティングシステム)
** MS-DOS
** DR-DOS
* NTFS - ファイルシステムによる圧縮のサポート
* SquashFS - 読み込み専用のLinuxディストリビューションでよく用いられる圧縮ファイルシステム

## 脚注

## 外部リンク
* BYTE Magazine, How Safe is Disk Compression?, 1994年2月
* Smart Computing, How To. . . Compress Hard Drives, 1999年4月
* MS-DOS 6 Technical Reference
* Compact(圧縮API) - Windows10で導入された、NTFS圧縮とは別のファイルシステムによる圧縮のサポート