记录由于一次强制断电导致的服务器无法启动的恢复过程

From: 杂项

事件起源

年前的某天早上,还是一如既往的上班,解决bug,浮现问题; 正当修改调试代码,继续跑结果的时候,发现编译服务器一般公司编译是有专门的服务器的连不上了,好气啊,群中询问原因,说是隔壁的公司将’电闸’给拉下来蛋疼,服务器所在房间的电源是被别人控制的,发现后立马跑到隔壁将电闸拉了上来;; 恩恩,没事,就是一次非正常断电么,过了5分钟,编译服务器依然连不上,又是好气哦,询问说应该起来了啊。他们已经在用呢,尼玛,你们用的和我不是一台服务器啊,小跑至服务器放置房间,插上VGA,发现了坑爹的一幕;
屏幕上赫然显示的是“error: unknown filesystem grub rescue”… shit,由于年关将至,机房管理者请假回家了,只能自己撸起袖子干了… 文件系统应该是损坏了,没事,有哥哥在呢;
迅速找到一个U盘启动盘,启动了ubuntu 最小系统,想着修复一下文件系统不就OK了吗? 等等,不能这么贸然,那可是大家的编译服务器,代码都在上面呢; so.. 先将原盘数据备份吧,1个T的数据啊,找了一个大小一样的盘,开始了dd拷贝;
这一下等了足足3个小时;好吧,终于拷贝完了; 开始修复吧,mkfs.ext4 /dev/xxx .. 坐等完事儿。。。
修复完毕后,我转身就走了[就这么自信啊],过来等了许久,依然连不上。。。尼玛。。。又接VGA,发现屏幕上依然显示的是“error: unknown filesystem grub rescue” 。 冷汗直流,这下装B失败了;

为什么会如此? 我决定一探究竟,又将备份盘数据重新拷贝至修改失败的盘; 又是3个小时。。。。
这次先不修复,进入mini system 后,我开始思考原因; 使用fdisk -l 看到的是不对,分区起始和end不一致啊;

不像是文件系统损坏,像是分区表损坏了;

解决过程

这时候我突然想起,旁边也有一台服务器的配置和这台是一模一样的;
登录看看,发现服务器是做过LVM配置的,也就是文件系统之下并不是分区,而是LUN[Logic unit number],而我进入mini system 是执行lvs已然看不到LUN相关东西了;

冒着在重新拷贝一份数据的险,将没出问题的一台服务器的分区表给dd 一份出来
dd if=/dev/sdx of=/tmp/sdx bs=512 count=24

然后直接写入损坏的服务器的分区中
dd if=/tmp/sdx of=/dev/sdx

然后partprobe

重启。。。
进入mini system 执行lvs,发现分区回来了;

然后在使用U盘启动仅仅将操作系统重组就可以啦;

这件事儿告诉我们一个道理,数据一定要做备份,避免上述问题,其实可以考虑将LUN做备份
vgcfgbackup -f /dev/mapper/xx xx


By: Keven - 点滴积累

你可能感兴趣的:(virtualization)