解决因U盘标签问题导致的U盘安装Linux系统失败
前言
我在使用U盘制作、安装Centos系统时遇到了一个问题,现象是进不了安装界面,在等待超时后提示以下信息,然后就进入了临时的linux shell。
dracut-initqueue : Warning: dracut-initqueue timeout - starting timeout scripts
然而同样的镜像文件如果刻录成光盘安装就没有问题,甚至可能换个U盘安装也没有问题。上网搜索有各种解决方法,总体说的是对的,但在细节上说得不够准确。个人推测发帖者根据原文分析并找到了原因,事后想要记录一下就直接Copy原文,并没有做更细的总结,这也是促使我发表本文的原因。以下记录我已在Centos7.8 + 工控机和服务器,便携机环境下实验过。
问题分析
导致该问题的原因,是因为不同格式的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键进入修改的,直接回车开始安装。
使用Linux 刻录优盘
1 | yum install -y createrepo mkisofs dosfstools syslinux |
【Linux】Linux环境下制作ISO镜像与刻录U盘_mkisofs制作启动iso镜像_道非凡的博客-CSDN博客
createrepo:用于对软件包生成分组索引信息(不重做镜像不需要)
syslinux:使用该包中的isohybrid工具,将标准ISO文件转换成混合ISO,以便写入USB存储设备(不重做镜像不需要)
mkisofs:制作镜像文件(不重做镜像不需要)
dosfstools:主要利用该工具包中的mkfs.vfat
对U盘进行格式化
格式化优盘
1 | mkfs.vfat -I /dev/sde |
写入镜像
首先在Linux系统中打开终端,使用dd
命令,格式如下:
**注意:**使用
dd
命令刻录完成后使用sync
进行同步一下,不然有的刻录虽然成功了,但是数据没有同步,也会导致安装失败
1 | dd if=CentOS-7-x86_64-Minimal-2003.iso of=/dev/sdb &&sync |
注意,此时是看不了进度的。可另开一个窗口,输入下面命令
1 | kill -USR1 `pidof dd` |
此时原窗口就会显示:
1 | [root@host-10-11 ~]# dd if=CentOS-7-x86_64-Minimal-2003.iso of=/dev/sdc |
制作完成后
1 | [root@host-10-11 ~]# blkid |
可以挂载
1 | [root@host-10-11 ~]# mount /dev/sdc4 /media/ |