0

SDカードを内蔵した組み込みLinuxデバイスで作業しています。このデバイスは、デバイスを開いてSDカードを取り出さなくても更新可能である必要があります。目標は、ユーザーがUSBフラッシュドライブを使用してデバイスを更新できるようにすることです。内蔵SDカードを新しいSDカード画像で完全に上書きしたいのですが。

私の最初の考えは、ルートファイルシステムをアンマウントし、次のような効果をもたらすものを使用することでした。

dd if=/mnt/flashdrive/update.img of=/dev/sdcard 

ただし、「login」や「systemd」などのプロセスはまだルート上のリソースを使用しているため、ルートファイルシステムを実際に正しくアンマウントすることは難しいようです。たとえば、ログインを強制終了するとすぐに、更新スクリプトも強制終了されます。

もちろん、rootをアンマウントせずにいつでもddを使用できます。しかし、これはかなりばかげているようです。:P

また、システムが実際にルートファイルシステムをマウントする前に、このロジックを実行するようにシステムのinitスクリプトを変更することも考えていました。

このタイプの更新を実行するための正しい/簡単な方法はありますか?私はそれが以前に行われたことを想像します。

ありがとうございました!

4

3 に答える 3

1

マウントが読み取り専用であっても、マウントされたファイルシステムのイメージを再作成することは良い考えとは思えません。

検討:

  • 実際のルートファイルシステムとして(圧縮イメージから初期化された)RAMディスクを使用しますが、ファイルシステムの最も重要なツールを除いてすべてがその下にマウントされており、アップグレードするためにドロップできます。ほとんどのLinux実装は、メインディスクファイルシステムをマウントする前に、ブートプロセスの早い段階でこれを実行します。アップグレードを実行するために再起動することは、オプションである可能性があります。

  • SDカードはとにかく必要以上に大きい可能性があります。2つのパーティションを用意し、アップグレードするたびにそれらを交互に使用します。または、アップグレード/リカバリを実行するために起動するメンテナンスパーティションを用意します。

  • 実際にファイルシステムをイメージ化するのではなく、個々のファイルをアップグレードします。

于 2012-10-27T21:19:17.593 に答える
0

次のいずれかまたは両方を試してください。

  1. 最初にシングルユーザーモードにします。telinit 1

または

  1. 再マウント/読み取り専用として:mount -o remount,ro /

実行する前にdd

于 2012-10-27T20:33:08.260 に答える
0

個人的に私はあなたのように何かをすることは決してありませんが、それは可能です。

Linuxシステムは、起動するたびにそれを実行します。実際、カーネルは最初にinitrdをマウントし、すべてのモジュールをロードし、その後pivot_root、実際の/をマウントするために呼び出します。

pivot_rootシェルから使用できるコマンドでもあります。実行したほうがよいman 8 pivot_rootですが、アイデアを与えるために、次のようなことを行うことができます。

mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root

最後にもう1つ、ソフトウェアのアップグレードを実行するこの方法は非常に弱いです。他の解決策を検討してください。

于 2012-10-29T08:35:05.293 に答える