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、このコマンドがインストールするパッケージの1つ、5,704kiBです(amd64から)。設置されたサイズは45,347kiBで、サイズの約8倍で、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

だから私たちは見ることができます単一ファイルパッケージサイズの3倍のサイズで、特別な努力なしにパッケージよりも小さいサイズに圧縮できます。他の圧縮ははるかに良いです。圧縮tarファイルは、複数のインクルードファイルの追加の冗長性を利用できます。

はい。圧縮はほとんどどこでも違いを説明できます。

答え2

それはみんな圧縮されるまで。例を見るmariadb-server-10.1パッケージ76,605kBファイルが含まれていますが、amd645,208.2kBに圧縮されています...

xzここで使用されている圧縮はタールボール全体のものであるため、ファイル間の冗長性を使用して全体のサイズを縮小できることに注意してください。パッケージに提供される多くのバイナリには共通部分があります。 〜のようにマイケル・ホーマー~の回答単一のバイナリファイルもうまく圧縮できることを示しています。

一方、設置前の寸法を表示するために使用される情報は次のとおりです。「インストールサイズ」フィールドパッケージをビルドするときに測定されるパッケージメタデータは、パッケージコンテンツの実際のサイズをよく表すと同時に、ダウンロードしたアーカイブのサイズも表示します。インストールサイズは、インストール中に使用される一時ディスク容量を考慮せず、パッケージに含まれるファイルのサイズのみを反映します。

関連情報