刚刚经历了一次严重的系统崩溃,花了十几个小时才将系统恢复正常,处理过程中涉及很多以前没有接触过的内容,而且连续的出现了修复一个问题后导致了更严重的问题,于是将处理的过程记录下来作为经验以供参考。
起因是这样的,我的电脑上本来有一个windows和一个ubuntu,近些时间由于测(zi)试(ji)需(zuo)要(si),又装了一个修改过的debian,考虑到基本上用不到windows,就把原来windows 70g的分区格式化后装上了debian,这就产生了一个问题,就是启动引导的问题。
原来的双系统,是先有windows后装的ubuntu,因此,ubuntu的grub就可以将windows的MBR启动覆盖掉(windows8,ubuntu15.04都是UEFI引导),而同时grub支持多系统启动,于是我就可以愉快的使用双系统啦。
但是格式化windows盘装了debian后,我本以为debian的grub会覆盖掉ubunutu的,从而可以debian和ubuntu双系统自由选择(因为之前存在的系统的grub不会写入新系统,自然无法启动新系统,后来我才知道这个问题可以使用 sudo update-grub
这个指令解决),然而不知道什么原因,debian的grub并没有使用UEFI,而是写入了BIOS,使用legacy模式启动,这样默认的启动就还是ubuntu的grub,无法切换debian,于是想通过清除MBR的方式来迫使电脑使用debian的grub引导启动。
于是我将0柱面所在的扇区格式化,进BIOS看到UEFI的boot只剩下了Network boot,没有 SATA boot,启动,果然如我所料,键入debian的grub,可以实现双系统,但是ubuntu的启动时间由原来的不到十秒增长到了一分半左右,这肯定不是正常的速度,于是进入系统,使用指令
systemmd-analyse critial-chain
来查看启动日志
graphical.target @1min31s
└─multi-user.target @1min31s
└─arpwatch.service @1min30s
└─basic.target @1min30s
└─sockets.target @1min30s
└─rpcbind.socket @1min30s
└─sysinit.target @1min30s
└─systemd-backlight@backlight:intel_backlight.service @1.835s +5ms
└─system-systemd\x2dbacklight.slice @1.835s
└─system.slice @106ms
└─-.slice @97ms
可以看到,是在sysinit.socket处几乎停了90秒钟,再次打开系统,发现启动时出现下面一句话
A start job is running for dev-disk .....8da.device
我不知道8da是什么意思,猜测应该是sda8,想起将mbr抹去之后,各个分区在/dev 中的数字应该是会自动向前移动一位的,但是这之后grub自动更新,所以可以正确启动,google之,得到的结果是这一项与UEFI启动有关,猜想是mbr被格式化,导致UEFI启动不正确,进行错误检查。
于是进入 /etc/fsdsk
文件中将UEFI引导的相关内容注释掉变成
#/boot/efi was on /dev/sda2 during installation
#UUID=8419-9A79 /boot/efi vfat umask=0077 0 1
在进行启动,速度恢复正常,正要高兴,突然发现,本来是一个NTFS文件分区却被标示为了Swap无法读取,
我用 mount /dev/sda5 /media -t NTFS
进行挂在,提示no NTFS signature
实在没有办法,只能用unetool制作了一个winpe的启动修复盘,打开,用diskGenius,成功读取到了数据,但是并不能将swap重新转回ntfs,我只能采用下下策,把数据拷出到移动硬盘上,格式化这个分区,想要再把数据拷进去
但是当我格式化完成重新启动的时候,突然连grub都无法启动,直接进入了grub rescue,惊出我一身冷汗!这可能意味着整个硬盘的东西都没了
再次google之,得到解决办法使用
set root=(bd0,5)
set prefix=(bd0,5)/boot/grub
insmod normal
normal
成功引导启动,可是这时候进入debian却进入emergency mode,并且只能提供最基本的bash指令,连VIM都没有。。。。。
从上面信息来看,应该是grub没有跟随盘符变化更新,导致了主分区挂载不正确(分区在/dev下的“文件”名不是载入系统后分配的,而是在bios启动后就分配好了,因此对于两个系统来说是相同的)
然后我发现,没有vim, 但是有vi。。。。。
进入 /etc/default/grub
查看,发现debian的盘符不是用UUID定义,而是用文件名既 /dev/sda* 来定义的,我把错误的文件名全部改为正确的,正常启动!
再执行
sudo update-grub
sudo grub install /dev/sda
恢复正常!!!
(我着实是被各种毛病折磨的不轻,这已经是我用LInux以来第11次GUI界面崩溃了,第9次格式化硬盘,第3次使用pe进行恢复,虽然还是什么都不懂,然而多多少少有了那么一点经验)
(世界上没有比error,exception此类东西颈令人憎恶的,如果有,那就是依赖关系不满足和GUI界面崩溃)