使用可能なスペースを考慮して、ddを使用して圧縮ディスクイメージまたはレプリカをマウントします。

使用可能なスペースを考慮して、ddを使用して圧縮ディスクイメージまたはレプリカをマウントします。

ローカルで複製した画像をインストールする予定ですdd。このイメージは512 GBのストレージ容量のmSATAディスクに対応し、Ubuntuの最下位バージョンにはほとんど構成がありません。したがって、現実的にデータを含むコンテンツは3 GBを超えてはいけません。

ただし、リソースと空間効率のために、次のコマンドを使用してgzで画像を圧縮しました。

dd bs=64K if=/dev/sdd conv=sync,noerror status=progress | gzip -c  > /image.img.gz

/dev/sdd問題のディスクはどこにありますか?その中に2.4GBの圧縮画像が生成されますが、解凍しようとすると当然オリジナルの512GBを占めるようになります。

圧縮イメージを別のディスクに書き込むには、次のコマンドを使用します。

gunzip -c /image.img.gz | dd bs=64K of=/dev/sdy status=progress

しかし、今は別のディスクに書き込むのではなく、特定のディスクに書き込む前にいくつかの変更や設定をしたいので、セットアップユーティリティを使って自分のシステムにインストールします。ところでディスク容量(512GB)が足りません。

直接圧縮してマウントする方法はありますか?そうでない場合は、ディスクを複製してスペースを少なくする方法はありますか?

答え1

画像はうまく圧縮されているので、ヌルバイトが多く含まれる可能性があります。 SSD は、fstrimファイルシステムで一時的に使用されていないセクタに対して NULL バイトを返すことがよくあります。この場合、.gzアーカイブをスパースファイルに解凍する必要があります。これが正常に機能するには、ターゲットファイルシステムがスパースファイルをサポートする必要があります。コマンド例:

gunzip -c /image.img.gz | cp --sparse=always /dev/stdin /path/to/store/image.img

cp --sparse=always代わりに使用できますが、dd conv=sparse次の点に注意してください。dd conv=sparse予想以上にスペースが節約されないのはなぜですか?

別のコンソールで実行しwatch ls -hls /path/to/store/image.img、最初と6番目の列を観察してください。列6の数字は約512GBに増加します。列 1 の数字は、解凍されたイメージがディスク上に占めるスペースの量と同じくらい少なくなければなりません。

kpartx次に、Accessでパーティションを使用するか、または/path/to/store/image.imgfdisk -l /path/to/store/image.imgまたはgdisk -l …mount -o offset=…イメージから直接インストールします。お使いのコンピュータが/dev/sddスーパーフロッピーである場合(パーティションはなく、ファイルシステムのみ)mount /path/to/store/image.img /the/mountpoint

関連情報