首先介绍一下我的设置背景。我有 7 个硬盘,组成一个 raid 5(我知道,可以改成 raid 6,但这不是问题所在)阵列。除此之外,我还运行 LVM,并为 btrfs 分区。BTRFS 的版本是 3.1245。内核是 3.13.0-53-generic。我运行的是 Ubuntu 14.04.2 LTS
我刚刚通过一系列 lvextend/reduce 将数据从 ext4 迁移到 btrfs 分区。我使用 LVM 中的临时驱动器为我提供空间,以便在两个分区之间以较大的块移动数据。
周末它终于完成了,我准备删除 EXT4 分区并移除临时驱动器。
我使用该命令两次减少了 btrfs 的大小(以确保最后有足够的空白空间):
btrfs filesystem resize -950G
我匆忙之中(匆忙造成了很大的浪费......)输入了以下命令:
lvreduce -L 950G /dev/bigdisk/btrfs
代替
lvreduce -L -950G /dev/bigdisk/btrfs
当我尝试挂载文件系统时,我得到了:
wrong fs type, bad option, bad superblock on /dev/mapper/bigdisk-btrfs...
dmesg 给了我:
btrfs bad tree block start 12460867831478107890 3823471755264
btrfs bad tree block start 13567085538622844823 3823471755264
btrfs bad tree block start 12460867831478107890 3823471755264
btrfs bad tree block start 13567085538622844823 3823471755264
btrfs: failed to recover balance
btrfs: open_ctree failed
当我意识到它无法安装时,我惊慌失措地运行了:
lvextend -l +100%FREE /dev/bigdisk/btrfs
这并没有解决任何问题。通过谷歌搜索(应该先这样做),我找到了 vgcfgrestore 命令,我运行了该命令,找到了我的 950G 出错之前的备份并进行了恢复:
vgcfgrestore -f [Filename here] -v /dev/bigdisk
仍然没有爱,同样的错误信息。
我尝试使用恢复选项进行安装:
mount -orecovery,ro /dev/bigdisk/btrfs
同样的错误
我跑了:
btrfs rescue super-recover -v /dev/bigdisk/btrfs
返回的结果都是好的,没有坏的。“所有超级结果都是有效的,无需恢复”
我昨晚满怀希望地运行了块恢复程序,在准备此消息时,我刚刚从屏幕上清除了它 :(,但它表示它找到了一堆好的块,但无法修复。我会重新运行它并在完成后立即在此处发布输出。我运行了:btrfs rescue chunk-recover -v /dev/bigdisk/btrfs
我还能做什么?我备份了我的重要文件,但这个阵列包含我的 DVD/蓝光的翻录,我们有不少这样的文件。重新翻录这些文件的想法让我非常难过,这需要几个月的时间。磁盘阵列相当大,因此进行完整的磁盘备份是不切实际的(分区大小约为 12TB)
答案1
对于那些后来才发现这一点的人来说,将内核升级到 3.19 解决了所有问题。我升级、重新启动,并在启动时安装磁盘,没有错误。BTRFS 检查结果正常,清理也是如此。