QEMUイメージを作成するときに書き込み中にコピーを無効にする必要があるのはなぜですか?

QEMUイメージを作成するときに書き込み中にコピーを無効にする必要があるのはなぜですか?

これアーチスウィキbtfsを使用するときは、ディレクトリ内のイメージの書き込み中にコピーを無効にすることをお勧めします。読み書きするファイルが多い場合、これは良い考えだと思います。 これ質問はこの考えを探ります。 VMWareは別のファイルを作成してスナップショットに書き込みますが、記録中にコピーを使用すると問題になる可能性があります。

QEMUを使用すると、VMがあるためファイルが開いているため、VMシャットダウン後の書き込みに問題がある可能性がありますが、VMシャットダウン後に遅いI/Oは問題にならないと思います。 QEMUに対してこの手順を実行すると、どのようなトラップを回避できますか?

また:この質問の画像がオリジナルであるとします。 qcow2にはすでにコピー書き込み機能があるため、信頼性の問題が発生する可能性がありますか?

ベストアンサー1

BTRFS での仮想マシンイメージのパフォーマンスの低下は、BTRFS の場合、大容量ファイルの書き込みによるものではなく、同じファイルへの書き込みです。この問題は多くのことから来ています。ランダム同じファイルに書き込みます。これはファイル全体で発生する書き込みです。

つまり、ランダム書き込みはBTRFSのCOWを妨げ、ファイルの断片化を引き起こし、結果として読み取りパフォーマンスが低下する可能性があります。画像ファイルがあれば使用できますfilefrag

これは単純なVMイメージの問題ではありません。これは、Firefoxで使用されるSQLiteデータベースなど、任意のファイルオフセットで作成されたすべてのファイルに影響します。

ソリューション/解決方法

BTRFSのファイル断片化に対して実行できるいくつかの作業があります。次のいずれかのオプションを選択します。

  1. nodatacowファイルシステム全体でCOWを無効にするマウントされたファイルシステムを使用します。これは本当ですが、必要な場合(スナップショットの作成など)でなければCOWを使用しないでください。
  2. chattr問題のファイルが含まれているディレクトリでCOWを無効にするために使用され、chattr既存のファイルでは機能しないため、ファイルを再生成します。
  3. btrfs fi defrag問題のあるファイルを定期的に実行してください。
  4. ファイルシステムを自動的に最適化するには、ファイルシステムをマウントしますautodefrag

最初の2つのオプション障害を負うCOW、後者の2つはCOWを許可しますが、後でクリーンアップします。 BTRFS COWとQEMU COWは邪魔しないでください。非常に遅いだけです。 :)

私の個人的な経験

SQLiteデータベースファイルを使用した経験に基づいて...

  1. nodatacow- テストされていません。
  2. chattr- とにかく結局は断片化したファイルだけですね。
  3. btrfs fi defrag- コンセプトテストのためにしばらくしてみました。
  4. autodefrag- 私はこれを非常にうまく使用しました。

QEMUイメージの場合は、イメージファイルの代わりにLVMボリュームを使用します。だから私はCOW問題をまったく扱いません。

リソース

COWがBTRFSでどのように機能するかをよりよく理解するには、読書をお勧めします。

おすすめ記事