完整的 BTRFS 分区无法使用

完整的 BTRFS 分区无法使用

我遇到了一系列极其危急的情况。我在 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 个”,但什么都没有改变。

文件系统也可能已损坏。btrfsck返回的大多是小错误。

我几乎绝望了。这个系统对我来说很重要,但它似乎已经消失了。我能通过奇迹拯救它吗?

我有多台计算机、硬盘、 USB 驱动器以及所需的时间。

答案1

如果您有一个比当前硬盘存储空间更大的备用硬盘,您可以尝试:

  1. 从 LiveCD 启动(Fedora 或至少具有相同 btrfs 版本支持的版本会更好)
  2. 将 btrfs 文件系统复制到新硬盘
  3. 检测新的文件系统
  4. 使用 btrfs 文件系统调整大小来增加存储池中的空间量。
  5. 随着空间的增加,应该有“设备上剩余空间”,您可以删除任意数量的快照。

如果您仍然无法获得足够的空间,或者您没有具有更多存储空间的单个硬盘,但您有两个至少具有相同存储容量的驱动器,您可以尝试:

  1. 将 btrfs 文件系统复制到其中一块新硬盘上
  2. 配置新的 btrfs 文件系统以使用第二块硬盘中的新存储池
  3. 重新平衡(btrfs balance start.)
  4. 现在您应该有近一半的组合空间可用。

我不建议使用原始分区 + 另一个驱动器这种方法,因为如果您破坏了原始分区(例如,在重新平衡时)则可能没有其他恢复的机会。

如果您实际上并不介意快照中的数据,那么将内容复制到另一个 btrfs 分区或 ext4 分区,再次执行 mkfs 并将文件传回可能会更容易。

这种方式应该更快(如果您不介意快照的话),因为您不必修改元数据树(如果以只读方式安装)。

相关内容