2016-10-05 12 views
1

デバイスが起動している間にrootfsパーティションの内容を置き換えるにはどうすればいいですか?
debian版を削除したpine64(1GB)を使用していて、デバイスの実行中にrootfsパーティション内のすべてのファイルを置き換える工場出荷時のリセットスクリプトを書きましたか?常駐リストアファイルはtarまたはimgファイルです。私はすでに二つのアプローチデバイスの起動中にカーネルをリセットするには?

  1. を試みた
    画像からデバイス上のパーティションにパーティションをD-D
    sudo dd if=pine-debian.img skip=*start of rootfs partition* seek=*start of rootfs partition* of=/dev/mmcblk0
  2. 圧縮されたコンテンツを/ディレクトリに抽出します。両方のアプローチ後
    sudo tar -C/-zxvf pine-debian.tar.gz

、システムは、いないLSを任意のコマンドを認識することができます。これを解決する方法については、どんな助けもありがとうございます。デバイスの実行中にfsコンテンツを置き換える方法は?

答えて

1

理想的には、それぞれにrootfsのコピーを持つ2つのパーティションが必要です。現在使用されていないパーティションをddで作成し、ブートローダの設定を更新して、書き込まれたパーティションをルートとして指すようにすることができます。 swupdateは、このようなデュアルバンクのシナリオをサポートしていますが、U-Bootのネイティブサポートのみを備えています。別のブートローダを使用する場合は、スワップを実行するためのスクリプトを追加する必要があります。

実際にインプレイスを上書きする必要がある場合は、そのファイルシステムが現在使用中であるため、パーティションを直接上書きすることはできません。現在、一部のファイル、特にlibcが使用されているため、アンタリングも失敗します。あなたは--unlink-firstオプションをuntarコマンドに追加しようとすることもできますが、それが機能するかどうかはわかりません。

他の二つのオプション:

  1. 代わりにフルにrootfsを上書きする、Debianパッケージのアップグレードを使用します。彼らは、アップグレードを安全にするためのインストール前およびインストール後のスクリプトを持っています。
  2. (一時的な、小さな)RAM内のルートファイルシステムにスワップしてアップグレードを実行します。このルートファイルシステムには、ビジーボックスとアップグレードを実行するスクリプトが入っていなければなりません。すべてのプロセスを終了し、一時的なrootfsにpivot_rootを実行するか、またはkexec --initrd=...を使用してRAM内のルートファイルシステムを起動することができます。
関連する問題