昨天打开Sony S13P笔记本,想用Ubuntu提取DSDT,但进入Ubuntu时却出现了下面的错误,打回车则还是无法进入桌面,只能重新启动;再选择Debian、Suse、CentOS等几个Linux都是一样的错误,无法入到Linux系统桌面。
问题出在哪?一样的错误,那应该有共同的原因,我使用的UEFI的引导,而S13P并不是完整的UEFI,只是阉割版,多系统时只能启动\EFI\Microsoft\Boot\bootmgfw.efi,我用xorboot建立多系统引导,再改名放入刚才的地方,想起前几天Windows Server 2016更新了一次,更新时会将xorboot制作的引导改为微软自身的Bootmgfw.efi文件,使得全部系统都无法启动,当时一时激动将EFI分区先备份再格式化了,最后将备份复制到EFI分区,几个Windows系统都没问题,MacOSX10.12.5也正常,想不到Linux则不行。
Linux为什么不行?
因为Linux引导系统时是通过UUID来识别分区的!分区格式化后UUID便会发生变化,于是,原因找到!解决这个问题就简单了:
首先,用Ubuntu安装光盘或U盘启动电脑,进入终端,输入:sudo blkid 查看EFI(ESP)分区的UUID值,如图是4655-6C00
再打开原来的Ubuntu系统分区\var\log\boot.log 日志文件,此日志文件记录了系统启动过程中出现的种种问题,看到以下的字串:A start job is running for dev-disk-by\x2duuid-E209x2d8049,转换并翻译过来就是:启动工作于设备磁盘 UUID为E209-8049
两个一比较就明白,原来真的是UUID发生了变化,Linux启动程序找不到ESP文件,也无法找到启动必须加载的文件,因此出现了错误。
解决办法:
很简单,将EFI分区原来的UUID值修改回去即可,因为禅宗安装了10多个Linux系统,要一个个去修改Linux的话工作量有点大,这个方法是最快捷有效的。
但如何改UUID?查阅了很多资料,以为在Linux下可以搞定,但却都失败了。
于是,想起了Windows中的分区工具,最为强大的当数:Paragon Hard Disk Manager
打开软件,在EFI分区上右击,选择“Change Serial Number…”
在弹出的窗口中输入原来的UUID值:
搞定,重新启动电脑,选择Ubuntu,正常进入,其它的Linux也都可以正常启动了!
附:最新版的磁盘精灵DiskGenius 4.9.3.409也终于可以修改UUID了,方法如下:右击要修改的分区,选择“修改卷序列号”。