オーバーレイファイルシステムをインストールし、rsyncを使用して変更を同期することは機能しません

オーバーレイファイルシステムをインストールし、rsyncを使用して変更を同期することは機能しません

私はDietPi OSを実行するRaspberry Pi CM4を使用して組み込みアプリケーションを開発しています。可能な限り最長寿命を達成するために、MMCフラッシュへの書き込み回数をできるだけ減らしたいと思います。私のインストールには、/varディレクトリ全体(/var/logおよび/var/tmpの一般的な違反者だけでなく)にデータを頻繁に書き込むいくつかのアプリケーションがあります。 / varにあるこの新しいデータは仕事にとって重要ではないので、すべての/ varをoverlayfsとしてマウントし、シャットダウンスクリプトを使用して変更をディスクに一度同期させようとします。私のオーバーレイ部分はうまくいきます。これは私の起動スクリプトです。

#!/bin/bash
#Startup script to mount /var as an overlay to minimize eMMC writes

if mount | grep "overlay on /var type overlay"; then
  echo Mount Point at /var already exists, exiting.
  exit 1
else
  if [ ! -d "/var.tmpfs" ]
  then
     mkdir -p /var.tmpfs
  fi
  mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=256m,mode=0775 tmpfs /var.tmpfs
  mkdir -p /var.tmpfs/upper
  mkdir -p /var.tmpfs/work
  chown -R root:root /var.tmpfs
  chmod -R u=rwX,g=rwX,o=rX /var.tmpfs
  if [ ! -d "/tmp/realvar" ]
  then
   mkdir -p /tmp/realvar
  fi
  mount --bind /var /tmp/realvar
  sudo mount -t overlay -o rw,lowerdir=/tmp/realvar,upperdir=/var.tmpfs/upper,workdir=/var.tmpfs/work overlay /var
fi
exit 0

これにより、/ varに書き込まれたすべてのエントリに対するMMC書き込みは発生しませんが、overlayfsを介して書き込まれたデータは引き続き使用できます。最も難しい部分はうまくいくことです。今、計画された再起動/終了イベントが続くように、親ディレクトリの更新をディスクに同期させたいと思います。停電が発生すると、upperdirのすべてのデータが失われることを知っていますが、大丈夫です。

同期スクリプト:

#!/bin/bash
#Shutdown script to sync the contents of the temporary overlay to actual /var on disk

if [ -d "/tmp/realvar" ]
  then
    rsync -vaz --delete /var/ /tmp/realvar
fi
exit 0

上記のほとんどは非常に関連性がありますが、古いスレッドでLeonidMewとTobby Foxによって書かれています。/var/logs を tmpfs としてマウントし、時には overlayfs を使用して変更を保存します。

問題は、rsyncが機能しないため、その理由を理解できないことです。テスト用にオーバーレイを設定した後、/var/libにファイルを作成しました。次に、期待どおりに実行されるように見えるrsyncコマンド文字列を実行します。再起動しましたが、テストファイルが消えました。つまり、upperdirの内容は私が望む方法でディスクに書き込まれません。

興味深い観察:/var/libにテストファイルを作成した後、/var.tmpfs/upper/libと/tmp/realvar/libにすぐに存在します。私はそれがオーバーレイの「サブ」ディレクトリである/tmp/realvar/libにあることを望んでいません。これが関係しているかどうかはわかりませんが、奇妙なことであることがわかりました。

次のコマンドを使用して、すべてのアプリケーションが/ varオーバーレイを読み書きすることを観察し、私のオーバーレイが実際に機能していることを確認し、このコマンドの結果が変更されないことを確認しました。

cat /sys/fs/ext4/mmcblk0p2/lifetime_write_kbytes

私のrsync機能が機能しないため、再起動後に/ varのすべての変更が失われます。 / varにオーバーレイを適用し、DietPiを使用して最小インストールを実行した場合、MMCは起動後にゼロを記録しますが、/ etcで設定を変更するか、/ usrに含まれるアプリケーションを変更するとすぐに記録され、再起動後も保持されます。 / varオーバーレイで動作するようにrsyncを取得できる場合は、完全な組み込みファイルシステム構成を持つことになります。

どんなアイデアにも感謝します!

ベストアンサー1

おすすめ記事