dracut /dev/disk/by-uuid/c0b2519b-d470-4a5c-b25a-54ca5bc783a2 does not exists问题解决方案
在物理机上面安装完物理机碰到下面这个错误:
刚看到这个问题,猜测是因为系统未正确安装,重新安装了一次还是出现同样的问题.开始怀疑不是系统安装问题,整理了下系统启动过程
- 当系统从固件接口启动(UEFI / BIOS)时,它的工作原理是找到可启动磁盘, 这一步正常
- 加载
bootloader
程序(grub
/ilo
),bootloader
程序启动内核和初始化内存镜像(initramfs
), 这一步应该也通过了 initramfs
的内部的工具负责将系统切换到SysVinit
/Systemd
,但是在启动服务前,需要加载根盘,读取根盘内的相关内容(从上述截图看,是加载根盘过程中,没有找到对应的根盘分区, 这地方出问题了)
出现该问题的最大可能是initramfs
中的工具箱根本就无法发现该分区,猜测grub
加载的内核并没有对应的驱动设备,我们的物理机使用的megaraid_sas.ko
驱动,参考了下dracut的官方文档,需要在/etc/dracut.conf文件中添加下列信息:
# additional kernel modules to the default
add_drivers+="ahci megaraid_sas mpt3sas mpt2sas aacraid"
重新构建一下内存镜像
- centos 6X
KERNEL_VERSION=`ls /lib/modules/ -1`
dracut --force /boot/initramfs-${KERNEL_VERSION}.img ${KERNEL_VERSION}
- centos 7X
KERNEL_VERSION=`ls /lib/modules/ -1`
dracut --force --fstab --early-microcode --kmoddir /lib/modules/${KERNEL_VERSION} --kver=${KERNEL_VERSION}
当然上述操作环境需要在livecd
环境或者恢复(rescue
)模式下, chroot
到目标根盘后执行
参考链接
- https://medium.com/devops-world/linux-boot-process-39b58198b791
- https://www.2daygeek.com/sysvinit-vs-systemd-cheatsheet-systemctl-command-usage/
- https://www.thegeekdiary.com/centos-rhel-6-how-to-rebuild-initial-ramdisk-image/
- https://wiki.gentoo.org/wiki/Custom_Initramfs
- https://wiki.ubuntu.com/Initramfs