我的系统是 Fedora 19 x86_64 w/3.10.7 内核。我正在尝试使用 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.40GB 的元数据空间。
这对我来说看起来像是一个错误。为什么此时根本没有大量写入的情况下,快照需要 0.6GB 的元数据空间?为什么 btrfs 无法使用剩余的 0.5GB 元数据空间?我尝试使用btrfs balance
,但它没有重新定位任何东西,所以我猜 FS 已经完美平衡了。是否可以以某种方式保留更多元数据空间? (可能我需要重新格式化整个分区,但我无法在mkfs.btrfs
手册中找到与元数据空间大小相关的任何内容)。我想我可以使用选项设置更大的节点大小-n
,但我不确定它是否有帮助。
答案1
嗯,BTRFS 快照默认不是只读的。我尝试使用它btrfs subvolume snapshot -r
来创建只读快照,这很有帮助。元数据空间不再短缺。