initramfsのサイズ削減と生成時間の短縮
以前紹介した「initramfs」の改善が「Ubuntu 23.10」で取り込まれます。サイズ削減と生成時間の短縮
今回行われた改善は「initramfs」のサイズ削減と、「initramfs」の生成にかかる時間の短縮です。
以前紹介した内容は以下を参照してください。
実際にストレージにインストールされた「Ubuntu」を起動するために、「initramfs」が利用されています。
例えばユーザーが「Ubuntu」を暗号化してインストールした場合、パスフレーズを入力してロックを解除してもらう必要があります。
ロックを解除しないとそもそもストレージにインストールされた「Ubuntu」にアクセスできません。
この時ユーザーにパスフレーズの入力を促す画面を表示する必要がありますが、この役割は「initramfs」が担っています。
そのため「initramfs」にはGPUドライバーなど、様々なPCやマシン上で必要なデバイスドライバーが広範に含まれています。
「Linux kernel」は圧縮された「initramfs」を扱えるため、通常「initramfs」は生成時に「xz」や「lz4」、「zstd」等で圧縮されます。
またそれぞれの圧縮方法には、圧縮レベルなど圧縮に関連するパラメーターがあります。
これは「zstd -19」では、「initramfs」は生成に時間がかかりすぎてしまうためです。
しかし圧縮レベルを変更した結果、今度は「initramfs」のサイズが大きくなり、メモリー不足など他の不具合を呼び込むことになりました。
加えて起動時間も短縮されています。
そこで「zstd」で圧縮されたファームウェアファイルに対応した「Linux kernel」がバックポイーとされる予定です。
以前紹介した内容は以下を参照してください。
initramfs
「initramfs」は「Ubuntu」を起動するために一時的に利用されるファイルシステムです。実際にストレージにインストールされた「Ubuntu」を起動するために、「initramfs」が利用されています。
例えばユーザーが「Ubuntu」を暗号化してインストールした場合、パスフレーズを入力してロックを解除してもらう必要があります。
ロックを解除しないとそもそもストレージにインストールされた「Ubuntu」にアクセスできません。
この時ユーザーにパスフレーズの入力を促す画面を表示する必要がありますが、この役割は「initramfs」が担っています。
そのため「initramfs」にはGPUドライバーなど、様々なPCやマシン上で必要なデバイスドライバーが広範に含まれています。
initramfsは圧縮できる
「initramfs」はデバイスドライバーなど他のファイルを含むアーカイブファイルです。「Linux kernel」は圧縮された「initramfs」を扱えるため、通常「initramfs」は生成時に「xz」や「lz4」、「zstd」等で圧縮されます。
またそれぞれの圧縮方法には、圧縮レベルなど圧縮に関連するパラメーターがあります。
Ubuntu 22.04 LTS以降の圧縮方法と課題
「Ubuntu 22.04 LTS」以降、デフォルトの圧縮方法及び圧縮レベルが「zstd -1」に変更されました。これは「zstd -19」では、「initramfs」は生成に時間がかかりすぎてしまうためです。
しかし圧縮レベルを変更した結果、今度は「initramfs」のサイズが大きくなり、メモリー不足など他の不具合を呼び込むことになりました。
状況を改善しよう
というわけで課題に対処するため、今回様々な改善が施されました。事前圧縮
カーネルモジュールとファームウェアファイルを事前に圧縮しておき、「initramfs」の生成時にそれらの圧縮済みファイルを圧縮せずに取り込むように変更されました。- Ship kernel modules Zstd compressed
- compress firmware in /lib/firmware
- Do not re-compress compressed kernel modules and firmware files
処理の移行
一部の処理が「Bash」から「dracut-install」に変更されました。ストレージに保存しない
さらに中間生成されるメインのCPIOアーカイブをストレージに保存しないように変更されました。というわけで
これらの改善により「initramfs」のサイズが削減され、「initramfs」の生成にかかる時間も短縮されています。加えて起動時間も短縮されています。
Ubuntu 22.04 LTSの対応
さて現状「Ubuntu 22.04 LTS」は「zstd」で圧縮されたファームウェアファイルに対応しておらず、このままだとアップグレードの失敗時に問題が発生する可能性があります。そこで「zstd」で圧縮されたファームウェアファイルに対応した「Linux kernel」がバックポイーとされる予定です。