2024年8月17日 星期六

虛擬機移轉,出現dracut-initqueue timeout無法正常開機

從VMware ESXi的VM拿到CentOS的虛擬硬碟檔vdi,用VirtualBox轉成Hyper-V可以用的虛擬硬碟檔vhd檔,設定好之後沒辦法正常開機。有通過Grub開機,但進入了busybox的emergency mode,會看到下列警告訊息:

dracut - initqueue[xxx]: Warning: dracut-initqueue timeout - starting timeout scripts
Warning: /dev/centos/root does noet exist
......
Warning: /dev/mapper/centos-root does not exist


這是因為開機需要initramfs映像檔根據舊的虛擬平台ESXi建立,並不支援搬移過去的Hyper-V平台。解決步驟如下:

  1. 重新啟動,在Grub選單裡面選擇救援核心(rescue kernel)來開機。因為救援核心支援大多數硬體,開機比較不會出問題。救援核心的選項大約會長得像
    CentOS Linux (0-rescue-xxxxxxxxxxxxxxx) 7 (Core)

  2. 開機後,用下列指令進行initramfs映像檔重建
    1. cd /boot
    2. dracut -f initramfs-3.10-0-xxx.yyy.x86_64.img
    3. reboot
  3. 重新開機,應該就能順利開機


initramfs指的是initial RAM filesystem,也就是開機吃到kernel之後要用module方式載入的驅動程式與一些相關的設定會放在這個filesystem上。通常這個initramfs是個gz壓縮檔,是個開機時使用的臨時文件系統,並且包含init scripts。

上述的dracut處理開機的initramfs,會根據目前的硬體來加入大量驅動程式。比較好的做法是先把原來的initramfs另外存一份,因為-f會直接修改而不備份。古老製作開機initramfs的指令是mkinitrd,另外做完之後通常會搭配grub2-mkconfig等相關指令。

參考資料

_EOF_

沒有留言:

張貼留言