ゼロがたくさんあるファイルをスパースファイルとして解凍するにはどうすればよいですか?

10
2022.01.03

cat /dev/sdx | xz > image.xzを使用して作成された非常に大きなハードドライブの圧縮されたRAW画像があります。ただし、この操作の前にドライブの空き領域はゼロにされており、イメージはほとんどゼロバイトで構成されています。ゼロのブロックがスペースを占有しないように、この画像をスパースファイルとして抽出する最も簡単な方法は何ですか?

回答
14
2022.01.03

(あなたが本当にそのような質問にご相談ください)xzマンページを引用し、私は非常に迅速にsparse検索します:

--no-sparse
スパースファイルの作成を無効にします。デフォルトでは、通常のファイルに解凍する場合、解凍されたデータに2進ゼロの長いシーケンスが含まれていると、xzはファイルをスパースにしようとします。また、標準出力が通常のファイルに接続され、安全にするために特定の追加条件が満たされている限り、標準出力に書き込むときにも機能します。スパースファイルを作成すると、ディスクI / Oの量を減らすことで、ディスクスペースを節約し、解凍を高速化できます。

(私の強調)

したがって、何もする必要はありません。デフォルトのxzツールで解凍するだけです。

5
2022.01.03

ddコマンドにはconv=sparseがあります

   sparse try to seek rather than write the output for NUL input blocks

だから私はしようとします

xz -dc < image.xz | dd of=image conv=sparse

このようにddを使用すると、任意の形式の入力で機能します(最初のコマンドがスパースファイル自体を生成できるかどうかは関係ありません)。