我遇到了一系列极其危急的情况。我在 Fedora 20 机器上安装了 snapper。它创建了大约 20 个快照。我的 btrfs 分区现在充满了 snapper 子卷。我的分区变得不可写(已满)。操作系统现在无法启动(甚至无法启动到运行级别 1)。
我试过了(当时操作系统仍可启动)
- 杀死 snapper,删除文件
- 由于快照,空间未恢复。
- 重新启动到运行级别 3
- 失败(启动挂起)
- 重新启动到运行级别 1,发出 snapper delete N
- 失败(Snapper 需要 dbus)
- 操作系统无法启动。
然后我尝试:
- 制作 Fedora 20 live stick 并从中挂载
- 尝试 rm 和 true > 文件文件
- 失败。快照中的文件重复
- 尝试在快照中删除
- 失败。快照是只读的
- 尝试 btrfs 子卷删除快照 (.snapshots/N/snapshot)
- 失败。提示“设备上没有剩余空间”
- 尝试 btrfs 子卷删除父子卷(“.snapshots”)
- 失败。它显示“目录不为空”
- 尝试 btrfs fi balance . -dusage=5
- 失败。表示已被弃用
- 尝试 btrfs balance start 。
- 失败。提示“设备上没有剩余空间”
- 尝试 btrfs balance start . -dusage=5
- 失败。显示“完成,必须重新定位 90 个区块中的 0 个”,但什么都没有改变。
- 尝试 rm 和 true > 文件文件
文件系统也可能已损坏。btrfsck
返回的大多是小错误。
我几乎绝望了。这个系统对我来说很重要,但它似乎已经消失了。我能通过奇迹拯救它吗?
我有多台计算机、硬盘、 USB 驱动器以及所需的时间。
答案1
如果您有一个比当前硬盘存储空间更大的备用硬盘,您可以尝试:
- 从 LiveCD 启动(Fedora 或至少具有相同 btrfs 版本支持的版本会更好)
- 将 btrfs 文件系统复制到新硬盘
- 检测新的文件系统
- 使用 btrfs 文件系统调整大小来增加存储池中的空间量。
- 随着空间的增加,应该有“设备上剩余空间”,您可以删除任意数量的快照。
如果您仍然无法获得足够的空间,或者您没有具有更多存储空间的单个硬盘,但您有两个至少具有相同存储容量的驱动器,您可以尝试:
- 将 btrfs 文件系统复制到其中一块新硬盘上
- 配置新的 btrfs 文件系统以使用第二块硬盘中的新存储池
- 重新平衡(btrfs balance start.)
- 现在您应该有近一半的组合空间可用。
我不建议使用原始分区 + 另一个驱动器这种方法,因为如果您破坏了原始分区(例如,在重新平衡时)则可能没有其他恢复的机会。
如果您实际上并不介意快照中的数据,那么将内容复制到另一个 btrfs 分区或 ext4 分区,再次执行 mkfs 并将文件传回可能会更容易。
这种方式应该更快(如果您不介意快照的话),因为您不必修改元数据树(如果以只读方式安装)。