空き容量がある場合でも、単一のデバイスbtrfs balance
ファイルシステムで実行する必要があります。ENOSPC
なぜこれを実行するのですか?
体重計は実際に何をしますか?
答え1
ほとんどの既存のファイルシステムとは異なり、BTRFSは2段階のアロケータを使用します。最初のステップでは、特定のタイプのデータにブロックと呼ばれる大きなスペース領域を割り当て、2番目のステップでは、通常のファイルシステムのように、これらのより大きな領域内にブロックを割り当てます。ブロックには3つのタイプがあります。
データブロック:一般的なファイルデータを保存します。
メタデータブロック:タイムスタンプ、チェックサム、ファイル名、所有権、権限、拡張属性などを含むファイルのメタデータを保存します。
システムブロック:これは、他のすべてのブロックの場所に関するデータを格納する特別な種類のブロックです。
ブロックに割り当てられたデータタイプのみをブロックに保存できます。現在のBTRFSで-ENOSPCエラーが発生している場合、最も一般的なシナリオは、ファイルシステムが既存のブロックのデータまたはメタデータスペースの両方を使用して新しいブロックを割り当てることができないことです。エラーが発生したファイルシステムで実行して、btrfs fi df
これらのケースを確認できます。 「データ」または「メタデータ」行に「使用済み」値と大きく異なる「フル」値が表示される場合、これが原因である可能性があります。
することは、btrfs balance
アロケータを介してコンテンツを再送信するだけです。これにより、圧縮ブロック内のスペースが使用されます。たとえば、2つのメタデータブロックが40%埋められている場合、バランスをとると、そのブロックが80%埋められた1つのメタデータブロックになります。このようにスペース使用量を圧縮することで、バランス操作は現在空のブロックを削除し、新しいブロック割り当てのためのスペースを解放します。 Balanceを実行してから再実行すると、btrfs fi df
Balanceが不要になったブロックを削除するため、「Total」と「Used」の値が互いにはるかに近いことを確認できます。