ENOSPC:なぜ `btrfsbalance`が必要なのですか?それは何をするためのものか?

iv id = “を取得しているときに、単一のデバイスファイルシステムでbtrfs balanceを実行する必要がありました。 daf4df6dc3 “>

実際に空き領域があったとしても。

なぜこれを実行する必要があるのですか?

天びんは実際に何をしますか?

回答

ほとんどの従来のファイルシステムとは異なり、BTRFSは2ステージのアロケーターを使用します。最初のステージでは、チャンクと呼ばれる大きな領域のスペースを特定の種類のデータに割り当てます。 、次に、第2段階では、これらの大きな領域内に通常のファイルシステムのようにブロックを割り当てます。チャンクには3つの異なるタイプがあります。

  • データチャンク:これらは通常のファイルデータを格納します。

  • メタデータチャンク:タイムスタンプ、チェックサム、ファイル名、所有権、権限、拡張属性など、ファイルに関するメタデータを保存します。

  • システムチャンク:これらは、他のすべてのチャンクが配置されている場所に関するデータを格納する特殊なタイプのチャンクです。

チャンクが割り当てられているタイプのデータのみを、そのチャンクに格納できます。 BTRFSで-ENOSPCエラーが発生する最近の最も一般的なケースは、ファイルシステムが既存のチャンクのデータまたはメタデータ用のスペースを使い果たし、新しいチャンクを割り当てることができないことです。これが当てはまるかどうかを確認できます。エラーをスローしたファイルシステムでbtrfs fi dfを実行しています。データまたはメタデータの行に、使用済みの値と大幅に異なる合計値が表示されている場合は、これが原因である可能性があります。

btrfs balanceが行うことは、アロケーターを介して物事を送り返すことです。これにより、チャンクのスペース使用量が圧縮されます。たとえば、両方のメタデータチャンクが2つある場合40%がいっぱいの場合、バランスをとると、80%がいっぱいの1つのメタデータチャンクになります。このようにスペース使用量を圧縮することにより、バランス操作で空になったチャンクを削除できるため、新しいチャンクを割り当てるためのスペースが解放されます。残高を実行した後にbtrfs fi dfを再度実行すると、残高によって不要になったチャンクが削除されたため、TotalとUsedの値が互いに非常に近くなっていることがわかります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です