2025/10/03 18:56 Alpine Linux Diskless Mode

やっほー、ロボ子!今日はAlpine LinuxのDisklessモードについて話すのじゃ!

Disklessモードですか、博士。それはOS全体をRAMにロードして実行する技術ですよね?

そう!その通り!Disklessモードは、高速で電力消費も少ないから、とってもエコなのじゃ!

なるほど。ディスクの不要なスピンアップや摩耗も削減できるんですね。

そうそう!それに、Alpine Linuxでは、カスタム構成やパッケージのインストールを再起動後も保持できるのがすごいところなのじゃ!

`lbu`(Local Backup Utility)とローカルパッケージキャッシュを使うんでしたっけ。

さすがロボ子、よく知ってるのじゃ!`setup-alpine`スクリプトで`disk=none`を指定して、`setup-lbu`と`setup-apkcache`で設定を保存するのじゃ。

ということは、読み取り専用のインストールメディアではなく、カスタマイズ可能なブートデバイスを作成できるんですね。

その通り!永続ストレージに内部ディスクを使う場合は、`/etc/fstab`にエントリを作って、パーティションをマウントするのじゃ。

ファイルシステムはext4を使うのが推奨されているようですが、btrfsやxfsだと何か問題があるんでしょうか?

どうやらAPKOVLのロードで問題が発生する可能性があるらしいのじゃ。あと、extlinuxが64bit featureで起動できない問題もあるから、`mkfs.ext4`に`-O ^64bit`を追加する必要がある場合もあるみたい。

細かい注意点が多いんですね。ジャーナリングを無効にすると書き込み操作を減らせる、と。

`mkfs.ext4 -O ^has_journal,^64bit /dev/sdXY`を使うのじゃ。でも、パーティションを`/boot`にマウントできないバグがあるから、`/media/sdXY`にマウントするのじゃ。

ふむふむ。カスタマイズ可能なブートデバイスを使う場合は、USB-StickやSDCardにAlpine Linuxをインストールするんですね。

そう!そして、`apkovl`ファイルとローカルパッケージキャッシュを保存するのじゃ!

`setup-alpine`を実行して、ローカル構成とパッケージキャッシュを保存するパーティションを選択するんですね。

`setup-lbu`と`setup-apkcache`でストレージとパッケージキャッシュを設定して、`lbu status`で変更されたファイルの数を確認、`lbu commit`で変更をコミット!

`<hostname>.apkovl.tar.gz`ファイルが作成されたことを確認する、と。

rootファイルシステムのサイズは`tmpfs`としてマウントされ、デフォルトで利用可能なRAMの50%が割り当てられるのじゃ。`rootflags=size=300M`カーネルパラメータでサイズを調整できるのじゃ。

Disklessモードでは、ネットワークが開始されるまでリモートリポジトリが利用できないから、ローカルストレージデバイス上の`local package cache`が重要になるんですね。

その通り!ローカル構成やシステム状態は、APK Overlay (`apkovl`)ファイルとして保存され、ブート時にロードされるのじゃ。

`lbu commit`コマンドで`apkovl`ファイルを更新するんですね。

Webサーバーから`apkovl`をロードすることもできるのじゃ!`apkovl`カーネルブートパラメータでURLを指定するのじゃ。

Disklessシステムのアップグレードは、パッケージのアップデート後に`lbu commit`を実行、カーネルのアップグレードには`update-kernel`スクリプトを使うんですね。

`update-kernel`スクリプトは、カーネル、モジュール、ファームウェアパッケージをアップグレードする際に、initfsイメージを生成し、ブートファイルを更新するのじゃ。

`mkinitfs`パッケージが必要で、RAMが少ないデバイス向けには`TMPDIR`環境変数で一時ディレクトリを指定できるんですね。

カーネルオプションのドキュメントは、`mkinitfs-doc`パッケージをインストールして、`man mkinitfs-bootparam`を実行すると見れるのじゃ。

Disklessモード、奥が深いですね。博士、今日はありがとうございました。

どういたしましてなのじゃ!ところでロボ子、Disklessモードで動くロボットって、もはやただの箱なのでは…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。