実行時のルートディレクトリの交換

実行時のルートディレクトリの交換

私は組み込みLinuxシステムを開発しています。システムは通常、マザーボードを起動できるUSBスティックに書き込まれるISOファイルを生成することによってインストールされます。

インストールが自動的に(たとえば、一晩)実行されるようにするには、既存のシステムの実行中にボードにインストールできるようにしたいと思います。

マイインストールは、busyboxとインストールスクリプトを含むinitrdファイルと、インストールするルートファイルシステムの残りの部分を含む.tar.gzアーカイブの2つの部分に分けられます。

  1. ブートローダはカーネルをロードし、それをinitrdにポイントしてカーネルを起動します。
  2. initrdインストールスクリプトは、ターゲットドライブ/ dev / sdaをマウントしてフォーマットし、ブートローダをインストールし、最後に.tar.gzとinitrdからルートファイルシステムをコピーします。

今私は欲しい

  1. install.iso をホストからターゲットデバイスにコピーします。 (大丈夫です)
  2. 上記のインストール手順に従ってください。

私の問題は、現在実行中のシステムを新しいシステムに置き換える方法がわからないことです。現在のインストールのルート(/)を削除してinitrdに置き換える必要があるとします。しかし、方法がわからないと思います!

ベストアンサー1

私はあなたが望むものを達成するためのさまざまな方法を考えることができます。これらすべてにはある程度のリスクと困難が伴います。最大のリスクは、インストールが間違っているか中断された場合に手動インストールが必要な起動できないシステムになることです。

私の主なアイデア(ブートローダーなどによって異なります)は、現在使用しているプロセスを正確に使用することです。既定では、新しいインストールイメージをコンピュータに永続的に保存されているUSBスティックにコピーします。その後、再起動し、正常に起動してインストールします。

これは次のように異なります。

  1. ハンズフリー設置。私はあなたがこれを持っていると仮定します。そうでなければ、一晩再インストールすることは問題ではありません。
  2. ブートローダには、USBまたはローカルファイルシステムの起動を自動的に選択する機能があります(または再起動する前にアプリケーションレベルのコマンドを介して)。
  3. 最後に、USBデバイスの代わりにローカルボードから起動するようにブートローダを設定するか、単にUSBデバイスの内容を消去または起動できないようにしてブートローダがクラッシュするようにする必要があります。

別のアプローチは、マザーボードに2つのブート/ルートパーティションを置き、未使用のパーティションにインストールし、再起動後にブートローダに別のパーティションを起動させることです。 chroot環境を使用して、インストーラが最初から起動したと思うように強制できます。しかし、これは環境に大きな変化になり、速いペースで勝つことはできません。

おすすめ記事