![dd 创建一个比源文件大的文件](https://linux22.com/image/120990/dd%20%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%AF%94%E6%BA%90%E6%96%87%E4%BB%B6%E5%A4%A7%E7%9A%84%E6%96%87%E4%BB%B6.png)
我用于dd
创建我的文件系统的映像。我在 ARM 32 位系统上使用 Debian 8(Jessie)。
我运行的命令是:
dd if=/dev/mmcblk0 bs=1M | gzip -c > /mnt/usb/<image_name.gz>
由于某种原因,虽然我的文件系统占用了 1.3 GB,但我得到的文件是 1.9 GB,在网上搜索答案,我同意的答案是 dd 获取所有未填充的块。我如何得出这个结论我做了一些实验:我运行这些命令:
$ cat /dev/zero > /root/zero.file
$ sync
$ rm /root/zero.file
在这些命令之后,我再次检查我的系统 ( df -h
),发现现在我的文件系统实际上占用了 1.9 GB。实际上 dd create 为我创建了什么。
如何使用“dd”获得尽可能接近源代码原始大小的图像文件大小。
答案1
检查您的块设备是什么。对于更简单的文件系统,它可能会呈现真实的大小,但文件系统还可以向您呈现可用于文件的虚拟“有效”空间,但原始设备本身存储的不仅仅是日志、校验和以及谁知道还有什么。设备是一个原始块,您的文件系统可以在其上执行任何操作 - 它可以执行重复数据删除、加密、压缩,在这些情况下,报告的文件系统大小是无意义的。
另外,gzip
如果您正在压缩已经压缩的内容(或者如果它填充了真正的随机数据),则可能会使文件更大。但是,该开销通常会比您看到的要小。