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
然后就正常玩啦。