これは非常に一般的な問題のように思えます。読み取り専用ルートから Linux を実行している組み込みシステムがあります。パーティション全体を上書きして、新しいソフトウェア イメージが利用可能になったときにインストールするアップデータ デーモンがあります。質問は、実行中のシステムからこれを行うための最適な方法は何ですか?
- 更新されたパーティションを
/dev/sdX
、現在 (読み取り専用) マウントされているルートに dd しますか? - 説明したように、現在のルートを
pivot_root
tmpfsに移動するここ? - 2 つのルート パーティションを使用し、更新のたびに「アクティブ」なパーティションを切り替えますか?
2 と 3 の欠点は、大量の RAM (2 の場合) またはディスク領域 (3 の場合) が必要になることです。実行中のシステムから読み取り専用のルート パーティションを上書きし、更新されたシステムに再起動する安全な方法はありますか?
答え1
そこで私がやったことは、1. のアプローチを採用したのですが、ファイルシステムの問題によりシステムが安定しなくなるという大きな問題に遭遇しました。マウントされたパーティションを上書きするのは良い考えではないと思います (驚くことではありませんが)。これを修正するために、2. のアイデア (pivot_root) を試しました。これは機能しますが、いくつか欠点があります。1 つは、更新が完了したら、実行中のプロセスのほとんどを停止するか、できるだけ早く再起動する必要があることです。最後に、3. のアイデアを試しましたが、唯一の欠点はディスク領域の「無駄」です。その他はすべてうまく機能しています。