在 Linux Mint 20.2 Cinnamon 上,我想创建包含 Windows 10 的辅助磁盘驱动器 (SATA) 的磁盘映像,现在并不重要,直接gzip
使用平行gzip
=pigz
到 NTFS 格式的外部 HDD(即时压缩)上。
我的问题出在生成的压缩文件内,有某种原因扭曲的内容的(错误)大小,我想让你看看:
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;
您可以在此处找到我的候选压缩机及其速度的列表。但如果它消失了,这里有一个屏幕截图(点击放大):