[排错] Linux 解决启动时,某个盘挂不上或者报错 “Warning: dracut-initqueue timeout – starting timeout scripts”

报错代码

启动时某个盘挂不上

或者:

Warning: dracut-initqueue timeout - starting timeout scripts

分析

系统启动 initrd 的时间默认上限是 90 秒钟,如果 initrd 加载的时间超过 90 秒钟,则系统会报此错误。

导致 initrd 加载时间过多的原因有很多,例如系统根 “/” 目录需要加载的硬盘过多、系统根 “/” 目录的逻辑卷过多、根 “/” 目录的系统逻辑卷挂载格式是 /dev// (这是设备的链接文件,需要等待 udev 规则将其创建以后才能挂载)。

注意:当无法正常进入系统时可以进入救援模式后再使用可尝试的解决方法尝试解决问题


可尝试的解决方法一:系统根 “/” 目录不使用由多个硬盘组合而成的逻辑卷

(步骤略)

可尝试的解决方法二:将系统根 “/” 目录的挂载格式写成 /dev/mapper/<volume group>-<logical volume>

步骤一:将系统根 “/” 目录的挂载格式写成 /dev/mapper/<volume group>-<logical volume>

# vim /etc/fstab

(步骤略)

步骤二:重新制作 initrd,让修改后的挂载格式在 initrd(dracut)引导时生效

# mkinitrd

可尝试的解决方法三:延长系统等待 initrd 的时间上限

步骤一: 修改 /ETC/DEFAULT/GRUB 配置文件

# vim /etc/default/grub

在这一行里:

GRUB_CMDLINE_LINUX="......"

添加:

GRUB_CMDLINE_LINUX="...... systemd.default_timeout_start_sec=500s"

(补充:这里以将系统等待 initrd 的时间限延长到 500 秒为例)

步骤二:使刚刚的修改生效

# grub2-mkconfig -o /boot/grub2/grub.cfg

参考文献:

Linux 启动顺序

[步骤] Linux 救援模式的进入

步骤一:挂载官方镜像

(步骤略)

步骤二:登录拯救模式

2.1 选择通过光盘启动

(步骤略)

2.2 进入拯救模式

(步骤略)

2.3 登录拯救模式

rescue login:root

步骤三:在救援模式确定系统的根 “/” 目录分区

(步骤略)


补充:
1) 物理分区可以使用 lsblk 命令、fdisk -l 或 cat /proc/partitions 命令辅助确定
2) 逻辑分区还可以可以使用 pvs 命令、lvs 命令或 lvdisplay 命令辅助确定

步骤四:在救援模式将系统的分区挂载到救援模式的 /mnt 目录

4.1 在救援模式将系统的根 “/” 分区挂载到救援模式的 /mnt 目录

tty1:rescue:~ # mount <root spartition> /mnt


补充:
1) 如果是物理分区,系统的根 “/” 分区就在救援模式的 /dev/ 目录里,例如救援模式的 /dev/sda1
2) 如果是逻辑分区,Rocky Linux & RHEL 的系统根 “/” 分区就是救援模式里的 /dev// 例如救援模式里的 /dev/vg/lv,openSUSE & SLES 的系统 “/” 分区就是救援模式里的 /dev/mapper/- 例如救援模式里的 /dev/mapper/vg-lv

4.2 在救援模式将救援模式的 /dev 目录关联到救援模式的 /mnt/dev 目录

tty1:rescue:~ # mount --rbind /dev /mnt/dev


补充:
1) 此时所有对救援模式的 /mnt/dev 目录的访问都会变成对救援模式的 /dev 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.3 在救援模式将救援模式的 /proc 目录关联到救援模式的 /mnt/proc 目录

tty1:rescue:~ # mount --rbind /proc /mnt/proc


补充:
1) 此时所有对救援模式的 /mnt/proc 目录的访问都会变成对救援模式的 /proc 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.4 在救援模式将救援模式的 /sys 目录关联到救援模式的 /mnt/sys 目录

tty1:rescue:~ # mount --rbind /sys /mnt/sys


补充:
1) 此时所有对救援模式的 /mnt/sys 目录的访问都会变成对救援模式的 /sys 目录的访问
2) 步骤 4.2、步骤 4.3 和步骤 4.4 也可以用以下命令代替:

tty1:rescue:~ # for i in proc sys dev; do mount --rbind /$i /mnt/$i ; done

4.5 在救援模式将救援模式的 /run 目录关联到救援模式的 /mnt/run 目录 (选做)

tty1:rescue:~ # mount --rbind /run /mnt/run

(补充:此时所有对救援模式的 /mnt/run 目录的访问都会变成对救援模式的 /run 目录的访问)

步骤五:将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

5.1 将当前的根 “/” 目录从救援模式的根 “/” 目录切换到系统的根 “/” 目录

tty1:rescue:~ # chroot /mnt

(补充:这里以 /mnt 作为系统根 “/” 目录为例)

5.2 在系统模式挂载所有需要开机自动挂载的目录

bash-4.3# mount -a

5.3 在系统模式确认当前根 “/” 目录下的目录

bash-4.3# ls
bin boot dev home lib lib64 mnt opt proc root run sbin selinux srv sys tmp usr var

(补充:这里显示的是常见的 Linux 根 “/” 目录 下的目录)

步骤六:重启系统

6.1 从当前系统的根 “/” 目录切换回救援模式的根 “/” 目录

bash-4.3# exit

6.2 重启系统

tty1:rescue:~ # reboot

[步骤] Linux GRUB2 排错模式的开启

步骤一:修改 /ETC/DEFAULT/GRUB 配置文件

# vim /etc/default/grub

在这一行里:

GRUB_CMDLINE_LINUX="......"

添加:

GRUB_CMDLINE_LINUX="...... systemd.default_timeout_start_sec=500s"

步骤二:使刚刚的修改生效

# grub2-mkconfig -o /boot/grub2/grub.cfg

[CONTENT] System local ports batch occupation

Content One: Occupy system local ports manually

# startport=33000;endport=34000;for i in $(seq $startport $endport);do nc -lk $i &;done

(Add: Take start port is 33000 and end port is 34000 as an example here)

Content Two: Release all ports which are opened manually (kill all nc command processes)

# for i in $(ps -aux | grep nc | grep '\-lk' | awk '{print $2}');do kill $i; done

随笔 19

文字本只是安静且简单的符号,却在历史书里描绘着一个个悲壮的真理

雅典为了自己的民主制度勇敢向前,君士坦丁为了自己的生活方式孤独伫立。人类现代文明的先驱,起源现代科学最多的古典文明,在生命的最后一刻依旧在用孤军死战的方式,向世界展示什么比生命更值得珍视

宣扬人权高于王权和教权的文艺复兴,论证自由、平等、博爱的启蒙运动,用公平公正让人们通过科技艺术创新进行自我成就的实现。一场场充满魔法的科技革艺术命空前提升着人类的生活质量,击碎了中世纪专制制度的所有谎言

推动社会思潮的力量,从来都在每个人自己的手中。面对邪恶时,哪怕只是一句最微弱的反对声,甚至只是用沉默在抗议,都能给这个世界带来意想不到的希望