Btrfs:圧縮とnodatacowの優先順位付け+自動化

Btrfs:圧縮とnodatacowの優先順位付け+自動化

圧縮が有効なbtrfsパーティションをマウントしました/

mount -o subvol=@,defaults,noatime,nodiratime,compress=zstd,space_cache=v2 /dev/mapper/archlinux /mnt

特定のフォルダでCoWメカニズムを無効にしたいと思います。たとえば、次のようになります。

  • 私のVMディスクを含むフォルダ
  • SQLiteデータベースを含むことができるすべてのフォルダ(主にブラウザ用)

これは何ですか?btrfs ドキュメント状態:

圧縮が有効になると、nodatacow と nodatasum は無効になります。

しかし、それも指摘しています。

nodatacow または nodatasum が有効な場合、圧縮は無効になります。

相互排他的であることに同意しますが、chattr +Cフォルダに設定するとどちらが優先的に適用されるのか疑問に思います。私の変更は永久的ですか?または、そのオプションを使用してパーティションを再マウントすると、次回の起動時に上書きされますかcompress?私の直感では、これが優先順位になると言いますが、chattr +Cこれを確認する文書が見つかりません。

2番目の質問は、新しく作成されたすべてのSQLiteデータベースでCoWを自動的に無効にする方法はありますか?最初は、ファイルシステム全体でSQLiteデータベースを検索して設定するシステムタイマーを作成したかったのですchattr +C。しかしそれからchattr のマニュアルページ私は以下を読んだ。

すでにデータブロックを持つファイルに設定すると、ファイルに割り当てられているブロックが完全に安定しているかどうかはわかりません。

chattr +Cしたがって、デフォルトでは空でない既存のファイルには使用しないでください。\.(sqlite|db)SQLiteマジックバイトで終わるか、SQLiteマジックバイトを持つファイルがCoWを使用しないようにファイルシステムに接続する方法はありますか?それとも、ターゲットアプリケーションをインストールする前にNoCoWフォルダを手動で作成する必要がありますか? XまたはYアプリケーションがSQLiteバックエンドを使用しているかどうかは必ずしもわかりません。アプリケーションがSQLiteを使用していることがわかるたびに、NoCoWを設定するためにすべてのアプリケーションデータを削除することは非常に不便です。このプロセスを自動化する方法をどのように提案しますか?

編集する:

chattr +CSQLiteを使用するパッケージをインストールするときにそれを設定することがDeployment Managerの責任であると思いますか?

関連情報