btrfs、スナップショットからバックアップするときに発生する悪名高いENOSPCエラー

btrfs、スナップショットからバックアップするときに発生する悪名高いENOSPCエラー

私のシステムは、3.10.7カーネルを含むFedora 19 x86_64です。 btrfsスナップショットを使用して、次のようにバックアップしようとします/

#!/bin/bash
btrfs subvolume snapshot / /snap/
tar -cvf - /snap 2>/dev/null | /opt/bup/bin/bup split -n nb -vv
btrfs subvolume delete /snap

残念ながら、このプロセス中にシステムの空き容量が不足します。btrfs filesystem df /実際に空きスペースがあると報告します。

[root@cellar ~]# btrfs filesystem df /
Data: total=107.21GB, used=75.06GB
System, DUP: total=8.00MB, used=20.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=3.50GB, used=3.00GB
Metadata: total=8.00MB, used=0.00

ただし、個々のファイルを作成または削除することはできません。スクリプトを実行するたびに、これは100%再現可能です。通常、重要でないアイテムをランダムに削除しようとすると、30分ほど試みた後にこの状況から回復できます。問題の原因はメタデータスペースが不足しているようです。スナップショットがない場合、私のシステムは約2.39〜2.40 GBのメタデータスペースを使用します。

これは私にとってバグのようです。一括書き込みがまったくありませんが、スナップショットに0.6 GBのメタデータスペースが必要なのはなぜですか? btrfsが残りの0.5GBのメタデータスペースを使用できないのはなぜですか?を使ってみましたbtrfs balanceが、何も再配置されていないので、FSはすでに完璧にバランスを取っているようです。より多くのメタデータスペースを予約することは可能ですか? (パーティション全体を再フォーマットする必要があるかもしれませんが、マニュアルでmkfs.btrfsメタデータスペースのサイズに関する情報を見つけることができません)-n

答え1

さて、BTRFSスナップショットはデフォルトでは読み取り専用ではありません。読み取り専用のスナップショットを作成するために試してみましたが、btrfs subvolume snapshot -r多くの役に立ちました。メタデータスペースは不足していません。

関連情報