解决因U盘标签问题导致的U盘安装Linux系统失败
前言
我在使用U盘制作、安装Centos系统时遇到了一个问题,现象是进不了安装界面,在等待超时后提示以下信息,然后就进入了临时的linux shell。
dracut-initqueue : Warning: dracut-initqueue timeout - starting timeout scripts
然而同样的镜像文件如果刻录成光盘安装就没有问题,甚至可能换个U盘安装也没有问题。上网搜索有各种解决方法,总体说的是对的,但在细节上说得不够准确。个人推测发帖者根据原文分析并找到了原因,事后想要记录一下就直接Copy原文,并没有做更细的总结,这也是促使我发表本文的原因。以下记录我已在Centos7.3 + 工控机环境下实验过。
问题分析
导致该问题的原因,是因为不同格式的U盘对标签支持的长度不一样。很可能使用fat32或exfat格式,无法支持镜像里超长的标签。我们将U盘插在windows下,看到U盘的标签名为
CentOS 7 x8
而打开/isolinux/syslinux.cfg搜索“LABEL=”,看到的都是
CentOS\x207\x20x86_64
其中\x20代表空格,这两处不一致导致无法正确引导进入安装界面。而如果是DVD刻录的,可以看到光盘的标签就是“CentOS 7 x86_64”,而U盘则可能是被截短后的标签。
解决办法
问题分析完了,解决办法有三种
1.使用DVD刻录安装
这种做法什么都不需要修改,前提是你安装系统的设备有光驱
2.修改修改syslinux.cfg
该配置文件在U盘里/isolinux/目录下,把"hd:LABEL=CentOS\x207\x20x86_64"这里修改为正确的U盘标签名。例如这里修改为:
hd:LABEL=CentOS\x207\x20x8
配置里有多处hd:LABEL=,我都进行了修改,保存后按照正常流程安装即可。这种改法有几个坑需要注意: - 空格问题,\x20 为空格 - 不修改syslinux.cfg里的配置,而是在windows下修改U盘标签
这么做思路没问题,但是有个坑是windows如果修改了标签名,会自动转成大写,造成的结果和原先一样,依旧是两边不匹配。而且一旦修改了U盘标签,就改不回小写了,这时候最好的做法就是两边同时修改为CENTOS7这样全大写、没有空格这样简单的标签名。
这种做法一劳永逸,之后使用该U盘安装不必再做修改和配置注:U盘系统里,还有一个/isolinux/isolinux.cfg,这个在刻录前有用,刻录后修改也不生效。注意别修改错了。 2)大小写问题,在windows下如果修改lable后有可能会被强制转为大写(有时重启系统才能发现) 所以保险起见,将标签,和该cfg都修改为CENTOS7这样没有歧义的名称。
3.在安装时修改
这么做的好处是不会修改原本U盘里的任何内容。在安装系统步骤走到安装选择菜单时,通过键盘上下键,选择 Install CentOS 7(但是不回车) ,然后修改 按 e 键(或者tab键,可以看提示,不同版本不一样),进入修改状态,将 hd:LABEL=后面的内容修改为U盘实际的标签名例如标签名是别截断后的CentOS 7 x8,那么这里修改为
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64.check quiet为 vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x8 quiet
最后,通过按e键进入修改的,按Ctrl+x开始安装。如果通过tab键进入修改的,直接回车开始安装。