前言
在上一篇文章中,我介绍了如何将 Ubuntu 系统从 ext4 分区就地迁移到 btrfs RAID1 上。虽然这个过程相当冒险,但幸运的是一切顺利——系统成功迁移到了 RAID1 分区上,并且运行正常。然而不幸的是,在平稳运行了近 10 个月之后,其中一块盘突然出现了故障,直接掉盘了。虽然系统本身仍然在运行,数据也未丢失,但部分服务由于未知原因(可能是硬盘故障导致文件系统短暂不可用)受到了影响;在系统重启后,GRUB 也出现了错误提示,无法正常引导系统。
由于确实急需使用这台服务器,因此我决定首先以最快的速度将系统恢复到可用状态,即将 btrfs RAID1 修改为单盘模式,使用剩余的那块盘继续运行系统;然后再替换掉故障的那块盘,重新组建 RAID1。现将这个过程记录下来,不供模仿,仅资参考。
过程
准备工作
需要的内容:
- Live 环境(推荐使用 Ubuntu 桌面版的安装盘);
- 一台可以在过程中查找资料的设备;
- 充足的时间和耐心;
- 一点运气;
修改 btrfs RAID1 为单盘模式
首先启动到 Live 环境,打开终端,挂载还能访问的那块盘(在我这里是 /dev/nvme0n1p2);注意由于失去了一块盘,因此需要使用 -o degraded 选项来挂载:
| |
挂载成功后,首先进入 /mnt/btrfs 目录,确认文件都在。此处一定要备份重要的数据,由于我在服务器上唯一有价值的数据就是一些 Git 仓库了,因此我只做了 git push,将它们推送到了远程仓库上,就算是备份了。
然后使用 btrfs device usage 命令查看当前的设备使用情况,确认已经掉盘了:
| |
输出类似下面的内容:
| |
可以看见掉盘的是 btrfs RAID1 中的设备 ID 1,而设备 ID 2 仍然在正常使用中。接下来,我们需要将 btrfs RAID1 修改为单盘模式,使用剩余的那块盘继续运行系统。执行以下命令:
| |
经过漫长的等待之后,执行以下命令查看 RAID1 的状态:
| |
如果一切正常,应该能看到类似以下的输出:
| |
注意到上面输出中 RAID1 已经全部变为 single。至此,我们已经成功将 btrfs RAID1 修改为单盘模式了。接下来移除掉盘的设备:
| |
执行完毕后再次查看设备使用情况,确认掉盘的设备已经被移除:
| |
修复 GRUB 引导
GRUB 出现错误提示的原因,并不是它无法挂载降级后的 btrfs 文件系统,而是之前的 GRUB 配置文件中同时引用了两块盘,这导致 GRUB 无法找到已经掉盘的那块盘,从而报错。要解决这个问题,我们需要重新生成 GRUB 配置文件。
首先还是重新挂载 btrfs 分区,并且 chroot 回到原有的系统中(这里使用 UUID 挂载):
| |
然后更新 GRUB 配置:
| |
检查 GRUB 配置文件,确认已经不包含掉盘的设备路径了:
| |
重启系统
完成上述步骤后,重启系统,应该能够看到熟悉的 GRUB 菜单了,选择正常启动系统,应该能够成功进入系统了。
结语
至此,我们已经成功将 btrfs RAID1 修改为单盘模式,并且修复了 GRUB 引导,系统已经恢复到可用状态了。接下来我们还需要替换掉故障的那块盘,重新组建 RAID1,不过这部分内容就留在下一篇文章中再介绍了。
