hama
2025年6月11日 15時07分
アプリケーションで/var/app/volums/プロジェクト名/以下に定期的にデータを保存しています。
電源遮断(電源ぶち切り)された場合、その時に書き込みを行っていたファイルが壊れる可能性は想定できますが、OS等起動に必要なファイルが壊れて再起ができなくなる可能性はあるのでしょうか?
その場合、B面は起動するのでしょうか?
電源断リスクと対策について知見をいただけると助かります。お手数をおかけしますがよろしくお願いいたします。
コメント
hama
at_dominique.m…
2025年6月11日 16時29分
hamaさん
お世話になっています、
マルティネです。
> アプリケーションで/var/app/volums/プロジェクト名/以下に定期的にデータを保存しています。
> 電源遮断(電源ぶち切り)された場合、その時に書き込みを行っていたファイルが壊れる可能性は想定できますが、OS等起動に必要なファイルが壊れて再起ができなくなる可能性はあるのでしょうか?
Armadillo Base OS の設計では、OS 起動に必要はファイルは読み取り専用のパーティションにしていますので、起動に関わるファイルの問題は原則としてありません。
OS以外の部分(コンテナイメージ、コンテナのデータ)は app パーティションに保存しています(btrfs ファイルシステム)。
こちらについては以下の設計です:
* ファイルシステムの完全な故障(マウントできない)は、btrfs の仕様としてありません(少なくとも eMMC を完全に読めなくなった故障以外の事例はありません)。細かい話は長くなりますが、データを変える際に同じ場所に書き込むのではなく、空き領域に書き込んで新しい位置に切り替えるので、電源切断等の際の化けは発生しません。
* コンテナイメージも読み取り専用のサブボリュームに保存されていますので、コンテナは必ず起動できます。
* /var/app/volumes データの分は、書き方によりますが、デフォルトでは metadata も基本的に保証されて data の保証はありません(デフォルトは data でも copy on write ですので化けることはないですが、fsync/syncfs 命令がなければ書き込んだ箇所が空に見える可能性はあります)
data も全体的に保証したい場合は fstab に flushoncommit オプションを追加できますが、スピードが落ちますので標準は「fsync で保護したいデータを保存してください」となっています(Linux アップストリムのデフォルトです)
> その場合、B面は起動するのでしょうか?
電源を連続で入れ直すと古いB面に戻ってしまう問題があったので、デフォルトではアップデート直後以外に自動的に B 面に戻りません。
B面を起動の安全として残したい場合は起動時などに動作確認を明確に行って、問題なければ「abos-ctrl rollback-clone」を実行して B面を同期するか、問題あれば「abos-ctrl rollback --reboot」を実行してB面に再起動する流れはできます。
よろしくお願いします