我有一台配备 Samsung 840 500 GB SSD 的笔记本电脑,并且安装了 openSUSE 12.3,并使用 btrfs 作为文件系统。
几天前,我第一次从网络浏览器收到一条消息,称它无法保存书签文件。此后不久,我的计算机变得不稳定,无法再次正常启动。启动到实时系统并删除一些早期的快照(由 snapper 自动拍摄)修复了问题,以便我能够再次启动。
根据 df、btrfs filesystem show 和 btrfs filesystem df / 的报告,在崩溃之前,文件系统大约已满 70%。
我的印象是,当 df 和 btrfs 文件系统 df 一致认为文件系统有足够的剩余空间时,那么一切都应该没问题。 btrfs 文件系统的输出显示后删除快照是:
Label: none uuid: 9eeb0c9b-c419-49f1-8476-ea0f19d262b4
Total devices 1 FS bytes used 252.33GB
devid 1 size 449.61GB used 449.61GB path /dev/dm-1
使用的 FS 字节数低于崩溃之前(这符合预期,因为根据我的理解,快照已计入总数中),而使用的设备字节数 (449.61GB) 仍然显示为已满。
所以我的问题是,当使用的设备字节接近设备的总大小时是否应该被视为有问题?为了安全起见,我目前正在运行平衡操作,但我的印象是,使用的设备字节仅真正代表了到目前为止 btrfs 已声明的设备数量,并且 FS 字节使用值才是真正的衡量标准目前实际使用了多少。
由于平衡操作非常耗时,并且会使像三星 840 这样的基于 TLC NAND 的 SSD 遭受大量磨损,因此这一点很重要,并且这是 btrfs 的一个相当大的问题,需要定期进行此类操作才能保持稳定。
答案1
答案是“是”。给出了问题的公正描述这里
本质上,完整的设备意味着 btrfs 无法再分配更多“块”,并且可能处于无法分配更多元数据的位置。
如果 FS 字节使用值较低(如我的情况),则平衡操作可以解决问题。例如:
btrfs filesystem balance start -dusage=20 /
此命令将重新平衡(因此希望也回收一些设备空间)使用 20% 或更少的所有块。数字越大(0-100%),完成的工作就越多。
看来这可能会在未来的某个时间在后台处理,但据我所知,从 linux 3.14 开始,这仍然需要手动完成。