gzip
Linux Mint 20.2 CinnamonでWindows 10用のセカンダリディスクドライブ(SATA)を含むディスクイメージを作成したいと思います。今は重要ではありません。平行gzip
=pigz
NTFS形式の外付けHDDへ(即時圧縮)
私の問題は何らかの理由で生成されたzipファイル内にあります。ねじれコンテンツの(間違った)サイズを確認してください。
1TBドライブの圧縮されていないディスクは3.8GBしか表示されず、圧縮サイズは193GBです。
$ gzip --list sata-disk--windows10--2021-Sep-24.img.gz
compressed uncompressed ratio uncompressed_name
206222131640 3772473344 -5366.5% sata-disk--windows10--2021-Sep-24.img
-rwxrwxrwx 1 vlastimil vlastimil 193G 2021-Sep-24 sata-disk--windows10--2021-Sep-24.img.gz
実行したばかりのシェルのスライスの説明
もちろん、シリアル番号は検閲されました(
ABCDEFGHIJKLMNO
)。--size
pv
of コマンドを使用して強制的にサイズ変更を試みました。ディスク全体の正確なバイトサイズは、次のようになります。
smartctl -i /dev/sdX
実行したばかりのシェルスニペットは次のとおりです。
dev=/dev/disk/by-id/ata-Samsung_SSD_870_QVO_1TB_ABCDEFGHIJKLMNO; \
file=/media/vlastimil/4TB_Seagate_NTFS/Backups/sata-disk--windows10--"$(date +%Y-%b-%d)".img.gz; \
pv --size 1000204886016 < "$dev" | pigz -9 > "$file"
私はパイプの使い方やその問題に問題があると確信していますpv
が、それを証明することはできません。通常のファイル(〜2 GB)を使用したテストシナリオは、予想どおりうまく機能しました。これはバグかもgzip
…?
私がここで何を間違っているのか?よろしくお願いします。
おそらく最後に紹介するのはpv
バージョンですpigz
。
私はパッケージバージョンを使用しています
pv
:1.6.6-1私はコンパイルされたバージョン
pigz
2.6を使用しています。
答え1
私はこの奇妙な現象に対する答えを見つけたかもしれません。
〜のようにgzip
マニュアルページ説明する:
昆虫:
gzip
フォーマットはモジュロ2 ^ 32の入力サイズを意味するため、この--list
オプションは誤った圧縮されていないサイズと圧縮されていないファイルの圧縮率を報告します。4GB以上。
また、次のように指定します。
この問題を解決するには、次のコマンドを使用して圧縮されていない大容量ファイルの実際のサイズを取得できます
zcat file.gz | wc -c
。
個人的には:実際のサイズを調べるこのコマンドは、1TBなどの非常に大きなファイルには役に立ちません。そもそもこれらのファイルの圧縮をどこから解くか想像できないからです。第二に、時間がかかります。スペースが問題にならなくても、SSDには摩耗問題などがあります。
明らかに、gzip
これは実際に問題を引き起こしているようです。そしてそれは消えません。実際、これにより減圧の進行状況が見られなくなります。(もちろんpv
サイズは供給されません。)
それでは、実現可能な解決策はありますか?
残念ながら、これまで何も見つかりませんでした。今試しました。平行線bzip2
(Ubuntu Focus Universeから直接入手可能)また、間違ったファイルサイズ(今回は202 GB)も報告されます。比較的迅速に完了する必要があるので、これが私の候補です。他の迅速な選択肢が見つからない場合は、この方法gzip
が最も速いので、引き続き使用します。
色で開始/終了する例:)
# UPDATED on 2021-sep-25 03:00 AM
# SATA disk backup using Parallel `gzip` = `pigz` (compiled version 2.6)
tput bold; tput setaf 2; printf '%s' 'Start : '; date; printf '\n'; tput sgr0; \
gz_date=$(date +%Y-%b-%d | tr '[:upper:]' '[:lower:]'); \
gz_disk=/dev/disk/by-id/ata-Samsung_SSD_870_QVO_1TB_ABCDEFGHIJKLMNO; \
gz_file=/media/vlastimil/4TB_Seagate_Ext4/Backups/sata-disk--windows10--"$gz_date".img.gz; \
pv --size 1000204886016 < "$gz_disk" | pigz -9 > "$gz_file"; \
printf '\n'; tput bold; tput setaf 2; printf '%s' 'Finish: '; date; tput sgr0;
ここで私の候補コンプレッサーのリストと速度を確認できます。ただし、消えた場合は、スクリーンショットは次のようになります(拡大するにはクリック)。