從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平台。解決步驟如下:
- 重新啟動,在Grub選單裡面選擇救援核心(rescue kernel)來開機。因為救援核心支援大多數硬體,開機比較不會出問題。救援核心的選項大約會長得像
CentOS Linux (0-rescue-xxxxxxxxxxxxxxx) 7 (Core) - 開機後,用下列指令進行initramfs映像檔重建
- cd /boot
- dracut -f initramfs-3.10-0-xxx.yyy.x86_64.img
- reboot
- 重新開機,應該就能順利開機
initramfs指的是initial RAM filesystem,也就是開機吃到kernel之後要用module方式載入的驅動程式與一些相關的設定會放在這個filesystem上。通常這個initramfs是個gz壓縮檔,是個開機時使用的臨時文件系統,並且包含init scripts。
上述的dracut處理開機的initramfs,會根據目前的硬體來加入大量驅動程式。比較好的做法是先把原來的initramfs另外存一份,因為-f會直接修改而不備份。古老製作開機initramfs的指令是mkinitrd,另外做完之後通常會搭配grub2-mkconfig等相關指令。
參考資料
- Centos7 开机提示dracut-initqueue timeout:
這篇還有用lvs確認LVM的名稱沒有跑掉 - centos調整grub的順序:
felo.ai產生的文件,用grub2-set-default指令指定開機核心 - 建立一個新的起始用 RAM 磁碟映像:假如你更換了主機板,或者把硬碟移至另一個系統,它可能會由於起始用的 RAM 磁碟映像(CentOS 6 用 initramfs,CentOS 5 用 initrd)內欠缺合適的驅動程式而無法啟動
- mkinitrd和dracut指令的差別與比較:felo.ai產生的說明
- Linux開機進入emergency mode:這是最常進入emergency mode的情況,但不適合本次的處理
_EOF_
沒有留言:
張貼留言