1TB 驱动器压缩后仅显示 3.8GB,我做错了什么?

1TB 驱动器压缩后仅显示 3.8GB,我做错了什么?

在 Linux Mint 20.2 Cinnamon 上,我想创建包含 Windows 10 的辅助磁盘驱动器 (SATA) 的磁盘映像,现在并不重要,直接gzip使用平行gzip=pigz到 NTFS 格式的外部 HDD(即时压缩)上。

我的问题出在生成的压缩文件内,有某种原因扭曲的内容的(错误)大小,我想让你看看:

1TB 驱动器未压缩的磁盘仅显示 3.8 GB,而其压缩大小为 193 GB。

1TB 驱动器未压缩的磁盘仅显示 3.8 GB,而其压缩大小为 193 GB。

$ 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

我刚刚运行的以下 shell 片段的注释

  • 当然,序列号已被审查 ( ABCDEFGHIJKLMNO)

  • --size我尝试使用ofpv命令强制调整大小

  • 整个磁盘的确切字节大小来自smartctl -i /dev/sdX


我刚刚运行的 shell 片段如下

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就此而言,但我无法证明这一点。使用常规文件(~2GB)的测试场景工作得很好并且符合预期。这可能是一个错误gzip...?

我在这里做错了什么?先感谢您。


也许最后要介绍的是pv和的版本pigz

  • 我使用的是打包版本pv:1.6.6-1

  • 我使用的是编译版本pigz:2.6

答案1

我可能刚刚找到了这个奇怪现象的答案。

作为gzip手册页说:

虫子gzip格式表示输入大小模 2^32,因此该--list选项报告不正确的未压缩大小和未压缩文件的压缩比4 GB 及以上

它进一步指出:

要解决此问题,您可以使用以下命令来发现大型未压缩文件的真实大小:zcat file.gz | wc -c

就个人而言:该命令可以找出实际大小,对于像 1TB 这样的非常大的文件可能没有用,因为我无法想象它首先会在哪里解压缩此类文件。其次,这需要很长时间。即使空间不是问题,SSD 上也会存在磨损问题等。

很明显,gzip这实际上是造成问题的原因。而且它不会消失。实际上,这会导致无法观看减压进度。(当然,不喂pv尺寸。)


那么有没有可行的解决方案呢?

可悲的是,到目前为止我什么也没发现。我刚刚尝试过平行线bzip2(直接来自 Ubuntu 焦点宇宙),它还报告无效的文件大小(这次是 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;

您可以在此处找到我的候选压缩机及其速度的列表。但如果它消失了,这里有一个屏幕截图(点击放大):

压缩机程序列表及其速度比较

相关内容