Linux ツールを使用して NTFS フォルダを圧縮する方法

Linux ツールを使用して NTFS フォルダを圧縮する方法

問題に直面しています。Windows 7のC:\Windows\winsxsフォルダが非常に大きく(20GB)なっており、エクスプローラの組み込みツール(フォルダプロパティ -> 詳細設定 -> 圧縮)を使用して圧縮したいのですが、Windowsでは実際にはそれができません。なぜなら、これらのwinsxsファイルは、という名前の特別なユーザーによって保護されているからです。信頼できるインストーラ. Linux で実行したいと思います。インターネットで検索すると、ntfs-3g についてのヒントがいくつか表示されますが、NTFS フォルダーの圧縮を行う具体的な例が見つからないため、ここで質問したいと思います。

Knoppix Linux と Windows を起動し、C: パーティションが にマウントされていると仮定する/mnt/wincと、目的を達成するにはどのコマンドを使用すればよいですか。

それとも、Linux 環境なしでそれを実行する方法はありますか?

答え1

これは Linux がなくても可能で、私は常に新しいインストールを作成した後にこれを実行します。私は Windows 10 Enterprise 21H2 インストールでこれを実行しましたが、圧縮後サイズは 4.6 GB になりました。

私が行う方法は、インストールを完了してから、インストール メディア (USB スティックまたは DVD) で再起動することです。ロードされたら、インストーラーが使用できるようになる前にドライバーが必要なドライブを圧縮しようとしているのでない限り、実際のインストール ダイアログを続行する必要はありません。圧縮しようとしているかどうかは、最初のインストール時に手動でドライバーを提供しているのでわかります。この部分が理解できない場合は、この部分を無視して次の段落に進んでください。これを実行する必要がある場合は、インストール先のパーティションを選択するまでインストール手順を続行し、ドライバーをロードする必要があります。

どちらのシナリオでも、 を押してShift+F10コマンド プロンプトを起動します。次に、どのドライブがインストール ドライブであるかを調べます。おそらく C: ではないでしょう。これはインストーラ ドライブである可能性が高いからです。最初のドライブから始めて、正しいドライブが見つかるまでその内容を一覧表示する必要があります。つまり、C:と入力して Enter キーを押し、次にdirと入力して出力を調べます。次に、 、 などと続けて、D:目的E:のドライブを見つけます。探しているドライブには、「Users」、「Windows」、「Program Files」フォルダーなどがあり、コンピューターに複数の Windows インストールがある場合は、ドライブの報告された空き領域を見て、どれであるかを推測できます。私の最新のインストールでは、Windows ドライブはドライブ F でした。

ドライブを決定したら、 を使用しcompact.exeてドライブを圧縮できます。 が自動的に処理するため、安全でないファイルを誤って圧縮してしまう心配はありませんcompact。たとえば、ブート ローダーやページファイルは圧縮されません。 最も速く、スペースをあまり節約しない方法は、エクスプローラーを使用するのと同じことです (ただし、このコマンド プロンプトでは、圧縮可能なすべてのファイルを圧縮します)。 圧縮するドライブ (私の最新のケースでは F:) に移動していることを確認し、次のように入力します。

compact /c /i /s:\

/cは単に圧縮することを意味します。/iはエラーを無視します。たとえば、Documents and SettingsWindows 10 では圧縮できません。これは実際にはフォルダーではなく、 を指すジャンクションであるためですUsers。 がなければ/icompactはそのようなエラーの後に停止します。は/s:\、ディレクトリ\(現在いる場所、つまりドライブのルート) 内のすべてのもの、およびその中のすべてのサブディレクトリを処理することを意味します。

前述のように、この方法はエクスプローラーの場合とまったく同じように機能しますが、アクセス権がなかったり使用中であったりするためエクスプローラーでは圧縮されない多くのファイルを圧縮します。現在のインストールでは、圧縮率は 1.7:1 でした。

しかし、スペースを節約するためにもう少し極端に圧縮したい場合は、より効率的な圧縮を使用するように/exe指示するフラグがあります。これはcompact、通常は実行可能ファイル(例)などの一度書き込み、何度も読み取るタイプのファイルを対象としておりexplorer.exe、これが名前の由来です。圧縮すると、全てただし、選択したアルゴリズムでファイルを圧縮するため、実行ファイルだけでなくすべてのファイルのスペースが節約されます。最も効率的なアルゴリズムは でlzx、これを私のインストールに適用すると、圧縮率は 2.4:1 になりました (実際には 2.7:1 だったと思いますが、よく覚えていません。ただし、デフォルトよりも大幅に効率的です)。ただし、次の 2 回の実行が必要です。

compact /c /i /f /exe:lzx /s:\

その後:

compact /c /i /s:\

さて、なぜ 2 回実行するのかと疑問に思うかもしれません。これは、 フラグを使用すると、NTFS がデフォルトで適用しない非標準の圧縮アルゴリズムを使用するように/exe指示しているためです。そのアルゴリズムを使用して圧縮するには、このコマンドを実行する必要があります。さらに、 では新しいファイルを自動的に圧縮できないため、フォルダーを圧縮済みとしてマークすることを拒否します。そのため、最初のコマンドはドライブ上のすべてのファイルを非常に効率的に圧縮しますが、すべてのフォルダーに圧縮フラグが付けられず、新しいファイルや変更されたファイルも圧縮されません。compactlzxcompact

フラグが追加で追加されていることに注意してください/f。ドライブ上に既に圧縮されたファイルがある場合 (ドキュメント フォルダーなどを圧縮した場合など)、既に圧縮されているファイルはアルゴリズムを使用して強制的に再圧縮されますlzx

2 番目のコマンドは、基本的には上記の 1 番目のコマンドと同じですが、/fすでに圧縮されているものを強制的に圧縮するために を使用しないため、ここでの効果は、 で圧縮したすべてのファイルをスキップしlzx、すべてのフォルダーを圧縮済みとしてマークすることです。そのため、将来的には、新しいファイルと変更されたファイルも自動的に圧縮されます。

つまり、最初のコマンドはすべてのファイルを非常に効率的に圧縮し、2 番目のコマンドはすべてのフォルダーを圧縮済みとしてマークし、将来のファイルも圧縮されるようにします。

まず、このタイプの圧縮は、NTFS のすべての実装でサポートされているわけではないことに注意してください。たとえば、私の Linux Mint 20.2 Live スティックでは、このように圧縮されたファイルはまったく読み込まれません。ntfs-3g私の知る限り、オープンソース ドライバーの最新バージョンでは読み取りサポートが存在しますが、お使いのディストリビューションではまだアクセスできない可能性があります。新しいntfs3ネイティブ Linux ドライバーがサポートしているかどうかもわかりません。Microsoft 側でも、Windows 10 以降のみである可能性があるようです。そのため、たとえば Windows 7 や 8 からはこのようなドライブを読み取れない可能性があります。次に、Windows は新しいファイルや変更されたファイルを自動的にこれらのより効率的なアルゴリズムで圧縮しないため、将来変更された圧縮ファイルは、より効率の低い既定のアルゴリズムで再圧縮されることに注意してください。ただし、Windows 10 または Windows 11 で使用している場合は、すべてが機能します。検討する価値はあります。

お役に立てれば :)

PS: もちろん、これは既存のインストールでいつでも実行できます。ここで新しいインストールについて言及しているのは、新しいインストールの直後にこれを実行するのが私の習慣になっているためです。

編集: この新しいシステムのセットアップを終えて、BitLocker を有効にする前に Windows インストーラーからこのすべてを再実行した後、少し更新しました。ここでも、/lzx:exe最初に を使用し、2 回目の実行ですべてのフォルダーを圧縮対象としてマークしました。これはうまく機能しました (圧縮後にシステム ドライブで 4 GB 余分に節約されました (Linux でファイル システムを変更できるようにしたかったので、最初にデフォルトの圧縮アルゴリズムを使用したので、デフォルトの圧縮アルゴリズムと比較して 4 GB 余分に節約できます))。しかし、Windows エクスプローラーで多くのファイルが圧縮されていないことに気付き、混乱しました。つまり、色付けされていませんでした (表示設定で [暗号化または圧縮された NTFS ファイルを色で表示する] を有効にしましたが、多くのファイルは青ではありませんでした)。compact管理コマンド プロンプトでいろいろ試しましたが、これを変更できませんでした。その後、これは Microsoft の典型的な無能さにすぎないことが分かりました。Windows エクスプローラー自体はこれらの新しいEXE圧縮アルゴリズムを理解していないため、ファイルは青色で表示されず、プロパティをチェックしても、詳細設定の圧縮ボックスにチェックマークが付いていません。ただし、通常のサイズとディスク上のサイズでは正しいサイズが表示されるため、「使用済み領域」の数値は低くなります。なんてこった! XD

答え2

手順は次のとおりです。

  1. 圧縮するディレクトリをマークする
  2. ファイルを一時的な場所に移動する
  3. cp -aファイルを元の場所に戻して圧縮を開始します

(デフォルトではntfs-3gは有効ですマウントオプションcompression


# Mark a directory for compression
setfattr -h -v 0x00000800 -n system.ntfs_attrib_be directory-name

# On small-endian computers when above is not possible
setfattr -h -v 0x00080000 -n system.ntfs_attrib directory-name

ただし、注意点に注意してください(ntfs-3gページ):

マウント オプションcompressionが設定されている場合、圧縮対象としてマークされたディレクトリに作成されたファイルは圧縮された状態で作成されます。同じボリューム内の通常のディレクトリに移動 (名前を変更) しても圧縮されたままで、移動後に追加されたデータは圧縮されます。逆に、圧縮対象としてマークされる前にディレクトリに存在していたファイル、および圧縮対象としてマークされていないディレクトリから移動されたファイルは圧縮されません。圧縮されたファイルをコピーすると、常に解凍され、ターゲット ディレクトリが圧縮対象としてマークされている場合は再度圧縮されます。


新しいボリュームについては、 -Cのオプションを確認してくださいmkfs.ntfs

関連情報