rsyncを使用してtarからファイルを回復する

rsyncを使用してtarからファイルを回復する

組み込みデバイスのソフトウェアアップグレード機能を作成しています。現在のルートファイルシステムをアップグレードする方法は、新しいrootfs.tar.gzファイルを入手してルートファイルシステムに抽出することです(既存のファイルを上書きして新しいファイルを追加)。ただし、新しいパッケージに存在しないファイルは削除されません。

これで、既存のすべてのファイルをrm -rfとして実行し、新しいrootfs tarファイルを抽出する必要があります。これは大きな仕事のように見え、時間もかかります。おそらく変更された唯一のものは設定ファイルです。

代わりに、.tar.gzファイルの内容をディレクトリに同期できるようにしたいです。ある種の仲介者を介さずにこれが可能ですか(つまり、一時ディレクトリにtarを抽出してrsyncを実行せずに)。

答え1

自分で好きなことをする方法はありません。コメントで述べたように、アーカイブマウントオプションかもしれませんが、独自の制限があります(そのうちの1つは、カーネルを構築するときに有効になっている特定の設定オプションに依存することです)。

しかし、2つの選択肢が浮上しています。

  1. 使用スカッシュFSgzipで圧縮されたtarファイルの代わりに画像。これはカーネルによって直接インストールすることができ、多くの場合、実際には同等の圧縮tarファイルよりも小さくなります。その後、インストールされているSquashFSイメージでrsyncを使用できます。 Buildrootを使用して実際にルートファイルシステムをビルドする場合は、そのイメージを直接ビルドすることを選択できます。

  2. ルートパーティションを1つだけ使用せず、2つを使用してください。初期インストールを実行するときは、両方のパーティションにすべてのデータを書き込み、パーティションの1つからのみ起動するようにブートローダを設定します。システムをアップグレードするときは、別のパーティションを確認し、そこからルートアーカイブを抽出し、そのパーティションから起動するようにブートローダを更新して再起動します。提案どおりに更新を実行するよりも時間がかかりますが、次のようないくつかの大きな利点があります。

    • 特定の機能を中断するアップグレードをすぐにロールバックできます。古いファームウェアを再インストールする必要はなく、別のルートパーティションから起動するようにブートローダを更新して再起動するだけです。
    • これはシステムを非常に困難にします。アップデートが完了した後にのみブートローダをアップデートするため、アップデートプロセス中に電力損失が原因で部分ルートファイルシステムから起動しないことが保証されます。
    • RAIDなしでストレージハードウェアの静的データ破損を回復できます(ただし、信頼性の高いデバイスが必要な場合はRAIDを真剣に検討する必要があります)。現在のバージョンが「不良」であることがわかっている場合は、一時的に古いバージョンにロールバックして新しいバージョンを再インストールしてください。
    • ダウンタイムが短くなります。戦略を立てるには、デバイスが機能的にオフラインの間、ほぼすべての作業を完了する必要があります。そうしないと、更新プロセス中に不明な欠陥が発生する可能性があります。この方法により、アップデートに必要なダウンタイムをデバイスの再起動に必要な時間に短縮できます。

関連情報