私のbtrfs
メタデータがいっぱいです。 (私は次のように時間ごとのスナップショットを作成しています。btrbk
.)
btrfs
ファイルシステムメタデータに割り当てられたスペースを増やしたり拡張したりするには?
または自動拡張?
答え1
TL;DR メタデータ (btrfs が一般的な空間不足条件を経験しない場合)自動的に増加する。割り当てられていない空き領域がない場合、自動インクリメントはブロックされます。ただし、btrfs
必要以上のスペースがデータセクションに割り当てられている場合は、再割り当てできます。これをbalance
btrfs では -ing といいます。
サポートされているブロックデバイスに割り当てられていないメモリが十分であると仮定すると、ファイルbtrfs
システムのメタデータ部分は、OPが想定したように自動メモリを割り当ててメタデータを増減します。
したがって、答えは次のようになります。はい(メモリー/使用可能なスペースが不足していない場合btrfs
)、メタデータは次のように自動的にインクリメントされます。
40GB
(1)btrfsの初期割り当て設定(デバイスから)を見てみましょう。
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.49GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.33GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
(2) ご覧のとおり、メタデータを保存するためにファイルシステムに割り当てられたスペースは 1.55GiB であり、そのうち 1.33GiB なのでほぼすべて使用されます (OP の場合、おそらくこのようなことが発生したでしょう)
(3) 追加するメタデータを追加します。これを行うには、--reflink=always
コマンドオプションを使用して/ homeフォルダをコピーしますcp
。
$> cp -r --reflink=always /home /home.copy
(4) (/home に多くのファイルがあると仮定) ファイルシステムに多くの新しいデータが追加され、実際に使用するデータは余分な--reflink
スペースを使用しないため、書き込み中にコピーメカニズムを使用します。 。つまり、ほとんどのメタデータがファイルシステムに追加されます。私たちは別の外観を見ることができます
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.65GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.78GiB, used=2.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
ここでメタデータに割り当てられた空間は次btrfs
のようなことがわかる。自動的にスケーラビリティを高めます。
これは自動的に行われるため、通常はユーザーが検出しません。しかし、場合によっては、ほとんどの場合、ファイルシステム全体がいっぱいになります。このような場合は、btrfs
「トリム」を開始し、メタデータに割り当てられたスペースが自動的に増える可能性があります。たとえば、すべてのスペースがさまざまな部分(Data、System、Metadata、GlobalReserve)に割り当てられているためです。混乱しても、まだ明らかな余地があるかもしれません。たとえば、次のようになります。
$> btrfs filesystem df /
Data, single: total=38.12GiB, used=25.01GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
見てわかるように、システムではすべてが正常ですが、新しいファイルのデータのためのスペースがまだありますが、メタデータ(OPの場合のように)が低いため、割り当ては40GiB
やや外れました。ファイルシステムをサポートするデバイスには自動的にメモリを割り当てることはできません(合計クォータを追加すると38.12G+1.55G+..~= 40GiB)。balance
btrfs
ただし、ファイルシステムの一部に割り当てられた余分な空き容量があるため、data
btrfsのバランスを取ることが有用または必要です。バランスとは、すでに割り当てられているスペースを再割り当てすることを意味します。
OPの場合、何らかの理由で割り当ての様々なbtrfs
部分間で不均衡が生じたと仮定することができる。
残念ながら、原則として空のブロック(データに割り当てられている)を検索して、それをより良いユーザー(ほとんどの使い果たされたメタデータスペース)に渡す必要がある単純なコマンドは、空のブロックがsudo btrfs balance -dusage=0
見つからないため失敗する可能性があります。
したがって、開発者は、btrfs
スペースを確保するためにデータブロックを再配置する必要がある時点での使用制限を徐々に増やすことをお勧めします。
したがって、結果が次のような場合
$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks
再配置なし、何か措置を講じる必要がある
$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks <--(success)
btrfs
もう一つの答えは、ノードサイズの影響を示唆していました。他の回答で述べたように、ノードサイズはファイルmkfs.btrfs
システムの作成時に一度だけ設定されます。理論的には、ノードサイズをより低い値に変更できる場合(可能であれば)、メタデータサイズも小さくできます(ただしそうではありません!)。
ただし、ノードサイズは、どのような方法で割り当てられたメタデータスペースを拡張または増やすのにも役立ちません。代わりに、最初はスペースを節約するのに役立ちます。ただし、ノードのサイズが小さいからといってメタデータのサイズが小さくなるわけではありません。実際、いくつかの状況では、ノードはより多くの「リンク」を含むことができるので、ノードサイズが大きいほど、btrfsのツリー巡回長が短くなることを示すことができる。
答え2
~によるとbtrfs wikiに関するよくある質問、これは不可能で達成される可能性が低いです。
ファイルシステムを再生成せずにメタデータブロックサイズを変更できますか?
いいえ、ファイルシステムが作成されると、mkfs.btrfs -n SIZEに渡される値を変更できません。バックアップ/復元が必要です。コア機能の主要な更新が必要なので、実装されていない可能性があります。
既存のbtrfsファイルシステムをより大きなbtrfsファイルシステムに移行することもできます-n SIZE
。 btrfs RAIDとバランスを使用して既存のファイルシステムに追加し、古いファイルシステムを削除することもできます。
また、見ることができますほぼフルドライブの一部。
答え3
昨日はdf -h
ディスクがいっぱいになったことがわかりましたが、まだ4Gの空き容量があります。
Filesystem Size Used Available Use% Mounted on
/dev/sdb3 29.3G 25.9G 0 100% /mnt/sdb3
そのため、btrfs fi df /mnt/sdb3
メタデータがいっぱいになっていることを確認しようとしたメタデータの拡張を試みましたが、再び機能しました。
別のディスクに5Gファイルを作成してlosetup
ドライブとして使用する
dd if=/dev/zero of=/mnt/sda1/tmpBtrfs.img bs=1G count=5
losetup -v -f /mnt/sda1/tmpBtrfs.img
ディスクに追加してdf -h
利用可能な9Gを確認する
btrfs device add /dev/loop1 /mnt/sdb3
空きスペースを確保するためのバランス
btrfs bal start /mnt/sdb3
そして、今追加した5gディスクを削除します。
btrfs device delete /dev/loop1 /mnt/sdb3
losetup -d /mnt/sda1/tmpBtrfs.img
rm /mnt/sda1/tmpBtrfs.img
これにより、メタデータが自動的に拡張されます(使用量の約2倍)。