web-dev-qa-db-ja.com

実行中のLinuxルートファイルシステムの置き換え

実行中のPCでルートファイルシステムを置き換えるbashスクリプト可能な方法を考え出そうとしています。システムは、ext4 rootfsとスワップパーティションを備えたMBRパーティションディスクを使用しますが、残念ながら、LVM/BTRFSまたはそのような便利なものは使用しません。 grub/kernel&initrd/systemdを使用して最小限のDebianディストリビューションを実行しています。

問題のPCに物理的にアクセスすることはできません。キオスクソフトウェアを実行しており、独自のツールを使用して、バイナリを含むtarballと更新シェルスクリプトをPCにプッシュできます。私の計画は、この更新システムを使用してrootfsを置き換えようとすることです。

私の考えは基本的に次のように要約されます。

  • Initrdを実際のrootfsにswitch_rootせず、代わりに(おそらくddを使用して新しいイメージを書き込む)カスタムバージョンに置き換えてから、新しいシステムで再起動します

  • (どういうわけか!)ライブシステムからある種の一時ファイルシステムにswitch_rootしてから、上記のddを実行して再起動します

  • 上記と同じですが、initプロセスを新しい一時的なfsにpivot_rootして、上記のように実行します。

私はpivot_rootとswitch_rootの機能に精通しておらず、現在遊んでいます-これは以前に行われたことは確かですが、検索して解決策が見つかりませんでした!

6
Hygrinet

このStack Exchangeの回答 を参照してください。受け入れられた答えは このリンク を指しています。これは、pivot_rootを使用して一時的なメモリ内ルートファイルシステムを作成する方法を説明しています。これにより、ルートファイルシステムを変更、サイズ変更、置換、またはその他の方法で混乱させることができます。再起動せずに。

4
agtoever