0. 概述

上周准备迁移工作电脑的 OS,所以就 dd 了一下系统盘到另外一个盘,然后今天就悲剧了,发现系统起不来。

场景是这样的,之前我的主力开发系统是 CentOS,但是基于 CentOS 的 GUI 太不友好了,各种小毛病,所以我就寻求其他的 OS,最终选择了 Manjaro。但是毕竟这个 CentOS 也用了将近 2 年了,所以担心一下子覆盖掉会丢失很多有用的数据,于是我就找了一个 SSD,通过外挂的形式接入我的办公电脑,然后在这块 SSD 上安装 Manjaro。

经过半年的使用之后,发现可以切换系统了,之前的系统也没啥数据被用到了(其实整个过程也就一些 SSH key 被用到了),其他的开发软件啥的配置都是云同步的,所以无需配置。

于是,我就准备以最简单粗暴的 dd 方式将 OS 从外挂 SSD 迁移到开发机的内置 SSD 上,因为我的外挂 SSD 还一直挂着,所以我觉得这种方式应该很稳了,结果,过了一个周末开机就翻车了。

1. grub 无法识别

一开机,我就看到了 grub rescue:,这就很尴尬了,所以还是先看下能不能先救一下:

[[email protected]]# ls
(hd0) (hd0,msdos1) (hd0,msdos2) (hd1) (hd1,msdos1) (hd1,msdos2)
[[email protected]]# ls (hd0,msdos1)
(hd0,msdos1)  unknown filesystem
[[email protected]]# ls (hd0,msdos2)
(hd0,msdos2)  unknown filesystem 
[[email protected]]# ls (hd1,msdos1)
(hd1,msdos1)  unknown filesystem 
[[email protected]]# ls (hd1,msdos2)
(hd1,msdos2)  unknown filesystem

这是网上的自救方法,很显然,我这里用不上了。这里有个奇怪的地方就是,明明我的挂在 SSD 没有做啥操作,居然也不能被识别,这个不能理解。

埋怨是没有用的,只能尝试自救咯。于是找了一些安装 Manjaro 的指导,了解到安装完之后有一步设置 grub 的步骤,于是我就尝试一下。

2. 自救

于是,我就找了一台健康的机器(一大早到了公司,结果又灰溜溜得回家了),将外挂的 SSD 挂在到这健康的机器上,然后查看一下盘符:

[[email protected]]# lsblk
sda      8:0    0 111.8G  0 disk 
├─sda1   8:1    0   103G  0 part /
└─sda2   8:2    0   8.8G  0 part [SWAP]
sdc      8:0    0 111.8G  0 disk 
├─sdc1   8:1    0   103G  0 part /
└─sdc2   8:2    0   8.8G  0 part [SWAP]

然后尝试构建 GRUB 记录:

[[email protected]]# grub-install /dev/sdc
[[email protected]]# grub-install --recheck /dev/sdc
[[email protected]]# update-grub

然后将这块 SSD 重新挂载回我的开发机器:

[[email protected]]# (grub rescue: ls)
(hd0) (hd0,msdos1) (hd0,msdos2) (hd1) (hd1,msdos1) (hd1,msdos2)
[[email protected]]# (grub rescue: ls (hd1,msdos1)

居然识别出来 ext 文件系统了,那下面就简单了:

[[email protected]]# set root=(hd1,msdos1)
[[email protected]]# set prefix=(hd1,msdos1)/boot/grub
[[email protected]]# insmod normal
[[email protected]]# normal

然后就正常玩啦。

3. Ref