使用時にLinuxを上書きする

使用時にLinuxを上書きする

簡単に言えば、USBフラッシュドライブをDebianシステム(ARMボードのNANDメモリに取り付けられている)に接続し、システムの実行中にUSBフラッシュドライブのイメージでNANDを上書きしたいと思います。可能ですか?残念ながらUSBで起動できないので、「心臓切開手術」のようにしなければなりません。

ありがとう

編集:いくつかの追加情報

たぶん、いくつかの追加情報を追加すると便利です。 200以上のマザーボードを更新する必要があります。実際の手順は次のとおりです。

  1. マザーボードの電源を切る
  2. 箱を開けなさい
  3. microSD(Debianのインストールを含む)をボードスロットに挿入し、USBフラッシュドライブ(新しいボードのNANDイメージを含む)をボードのUSBポートに挿入します。
  4. オンボード電源
  5. ボードはmicroSDからDebianインストールを起動し、単純なddコマンドを使用してUSBスティックのイメージをボードのNANDに自動的にコピーします。gunzip -c /mnt/pendrive/hda.img.gz | dd of=/dev/nand完了すると、ボードの電源が切れます。
  6. 開発ボードの電源が切れたら、microSDとUSBフラッシュドライブを取り外します。
  7. ケースを再組み立てしてください
  8. アップデートされたDebianインストールでマザーボードの電源を入れます。

microSDスロットは外部からアクセスできないため、この手順が必要です。一度してみてください...問題ありません。 200回以上しましたか?こんな!

私はプロセスをスピードアップし、一般ユーザーがマザーボードを更新できるように、非常に簡単にしたいと思いました。問題が発生しても問題になりません。バックアップは不要で、ボードにデータがなく、配布中のソフトウェアだけが必要です。

私の目標は、次のことを行う新しいプログラムを作成することです。

  1. 開発ボードの電源が入っていて、Debian が稼働しています。
  2. ペンドライブを差し込む
  3. USBフラッシュドライブからスクリプトを起動します。このスクリプトは操作を実行し、gunzip -c /mnt/pendrive/hda.img.gz | dd of=/dev/nand完了後に開発ボードの電源を切ります。
  4. 更新されたDebianは、次回起動時にNANDから起動します。

この簡単なプログラムを使用すると、いくつかのUSBスティックを展開でき、ユーザーは200以上のマザーボードをすべてインポートすることなくマザーボードを更新できます。このプロセスがどこかで失敗し、Debianのインストールが破損した場合、ユーザーがボードを私にインポートすると、私は実際のプロセスに従います。

ボードにはインターネット接続がないため、リモートでログインして更新を開始することはできません。

答え1

プログラムを処理するために必要なすべてをtmpfsに入れてそこから実行することでこれを行うことができます。リスクがあるため、問題が発生した場合に備えてバックアップを準備する必要があります。

答え2

一度もやったことがなく、危険に見えますが可能です。

まず、現在実行中のすべてのサービスとすべてのプログラムを停止してからrsyncを実行します。

役に立つもう1つの方法は、作業中に正しいライブラリにアクセスできるように、まずUSB OSにルートを変更することです。

答え3

お客様のリクエストが変更されましたので、もう一度お返事いたします。

あなたの場合は、ash(ls mv cp rmなどのコアユーティリティ)、dd、vi、およびgzip / gunzipツールと静的にリンクされた特別なビジボックスを構築します。スクリプトを作成してUSBで実行すると(USBドライブはext *ファイルシステムでフォーマットされます。そうですか?)スクリプトは、updateコマンドを使用するときなど、コマンドを実行するときにフラッシュのbusyboxバイナリのみを使用します。よい: /mnt/pendrive/busybox gunzip -c /mnt/pendrive/hda.img.gz | /mnt/pendrive/busybox dd of=/dev/nand

アップデートを実行する前に、Business Box(対話型モードの場合)でシェルを実行して、exec /mnt/pendrive/busybox ash -lメモリ内のすべてのシェルを上書きします。上書きした後は使用できなくなるからです。あるいは、バッチモードで実行したい場合は、#!/bin/shlineを使用せずにBusiness Boxシェルへのフルパスを指定する必要があります。または、#!/mnt/pendrive/busybox sh次のように実行するときは、/bin/sh /mnt/pendrive/script.sh実際のビジボックスバイナリとして実行する必要があります/mnt/pendrive/busybox sh /mnt/pendrive/script.sh

更新する前に、更新中にNANDに書き込むことができるすべてのシステムアクティビティを分析して停止する必要があるため、一部のサービス(syslogを含む)が実行されている場合は、そのサービスを終了する必要があります。これには正しいツールを使用してください。たぶんそれを再生成するプロセスマネージャが実行されているかもしれません。

停電は直ちに発生し、サービスを削除または終了するスクリプトは実行しないでください。echo o >/proc/sysrq-trigger適切なrestart()システムコールをすぐに呼び出す適切なshutdownコマンドを使用してこれを実行できます。

ここでbusyboxに関する詳細情報を見ることができます。http://busybox.net/。実行安全のために(静的にリンクされたバイナリでも共有ライブラリは必要ありません)、musl libcを使用してbusyboxを構築します(http://www.musl-libc.org/)。

関連情報