使用 apt 安装 mysql,“要使用的额外磁盘空间”比所需档案的大小大 10 倍。如何?

使用 apt 安装 mysql,“要使用的额外磁盘空间”比所需档案的大小大 10 倍。如何?

我之前在其他应用程序中见过这个,但今晚我在 mysql 中注意到了这一点:

$ sudo apt install mysql-server
[...]
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 18.7 MB of archives.
After this operation, 161 MB of additional disk space will be used.

压缩无法解释这种差异,不是吗?

答案1

mariadb-client-10.1,该命令将安装的软件包之一,是 5,704kiB(在 amd64 上)。它安装后的大小为 45,347kiB,大约是其大小的八倍,并且与您看到的 18.7/161 比率几乎一致。

让我们提取文件并看看它来自哪里:

$ ar x mariadb-client-10.1_10.1.26-0+deb9u1_amd64.deb
$ tar xJf data.tar.xz
$ du -shc usr/bin usr/share etc
45M     usr/bin
200K    usr/share
20K     etc
45M     total

所以我们可以看到该包确实提取到非常接近发布的大小。我们所做的只是使用标准提取工具,因此没有什么异常的apt事情发生。

我们可以仔细观察一下:

$ du -s usr/bin/mariabackup
18M     usr/bin/mariabackup
$ xz < usr/bin/mariabackup|wc -c
4542540

所以我们可以看到单个文件是封装尺寸的三倍,并且无需特别努力即可压缩到比封装更小的尺寸。其他压缩效果甚至更好,压缩的 tar 文件能够利用多个包含文件的进一步冗余。

所以,是的,压缩可以解释几乎所有地方的差异。

答案2

那是全部直至压缩。参见示例包裹mariadb-server-10.1其中包含 76,605 kB 的文件,amd64但压缩至 5,208.2 kB...

请记住,此处使用的压缩是xz针对整个 tarball,因此可以使用文件之间的冗余来减小整体大小。包中提供的许多二进制文件都有公共部分。作为迈克尔·霍默回答表明,即使是单个二进制文件也能很好地压缩。

一方面,用于在安装前显示尺寸的信息是“安装大小”字段在包元数据中,它是在构建包时测量的,它很好地指示了包内容的实际大小,另一方面,也显示了下载的存档的大小。安装的大小不会尝试考虑安装期间使用的临时磁盘空间,它仅反映包中包含的文件的大小。

相关内容