btrfsメタデータを拡張する方法は?

btrfsメタデータを拡張する方法は?

私のbtrfsメタデータがいっぱいです。 (私は次のように時間ごとのスナップショットを作成しています。btrbk.)

btrfsファイルシステムメタデータに割り当てられたスペースを増やしたり拡張したりするには?

または自動拡張?

答え1

TL;DR メタデータ (btrfs が一般的な空間不足条件を経験しない場合)自動的に増加する。割り当てられていない空き領域がない場合、自動インクリメントはブロックされます。ただし、btrfs必要以上のスペースがデータセクションに割り当てられている場合は、再割り当てできます。これをbalancebtrfs では -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)。balancebtrfs

ただし、ファイルシステムの一部に割り当てられた余分な空き容量があるため、databtrfsのバランスを取ることが有用または必要です。バランスとは、すでに割り当てられているスペースを再割り当てすることを意味します。

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倍)。

関連情報