initramfsの圧縮方法を再検討
2023年7月8日、以下で「initramfs」の圧縮方法が再検討されています。initramfsのサイズを軽減しながら生成時間を短縮したい
本提案の目的は「initramfs」のサイズを小さくしながら、「initramfs」の生成時間も短縮したいとのことです。昨年「initramfs」の圧縮形式が「zstd」に変更され、圧縮レベルが-1に変更されました。
これにより「initramfs」の生成にかかる時間が短縮され、以下の問題が改善されました。
しかし以前と比べ「initramfs」のサイズが大きくなったため、以下の問題が引き起こされることになりました。
また「/bootパーティション」を利用している場合、「/bootパーティション」のサイズによっては「initramfs」の肥大化によりすぐに空き容量が足りなくなってしまう可能性もあります。
かと言って「initramfs」のサイズ軽減を優先し「xz -9」のような圧縮率の高い方法を採用すると、「initramfs」の生成に長い時間がかかるようになり、また生成時に多くのメモリーが必要になってしまいます。
「Raspberry Pi Zero」のようなハードウェアでは厳しいでしょう。
なんとかしたい
というわけで以下の方法が提案されています。- カーネルモジュールとファームウェアのdebパッケージ構築時に、xz -9で圧縮されたカーネルモジュールとファームウェアを含むcpioアーカイブを作成する
- 「mkinitramfs」がそのcpioアーカイブを検出し利用する
この場合「initramfs」は以下のような構成になります。
- AMD64ではAMD/Intelマイクロコードを含むcpioアーカイブ
- メインのcpioアーカイブはzstd -1で圧縮される
- カーネルモジュールとファームウェアはxz -9で圧縮される
この方法により従来と比べて「initramfs」の生成時間とサイズを削減できますが、カーネルのビルドに時間がかかるようになります。
またパッケージのサイズが大きくなります。
コストをかける場所を変えるということですね。
もう一つの提案
上記の提案を受けもう一つの方法が提案されています。- カーネルモジュールとファームウェアのdebパッケージ構築時にそれらをzstd -19で圧縮する
これによりパッケージサイズを節約できる - それらの圧縮ファイルを圧縮されていない別のinitrdに収めるようにinitramfs-toolsを修正する
(メインの圧縮されたcpioアーカイブからそれらの圧縮ファイルを分離し、圧縮されていないもう一つのcpioアーカイブにそれらの圧縮ファイルを収める)
これにより「initrd(initramfs)」の作成時間の短縮とサイズの削減が可能になるとのことです。
またPCやマシンの起動時に実際に起動に必要なカーネルモジュールとファームウェアのみが展開されるため、起動時間の短縮にも期待できるとのことです。