Linux系統啟動時,Grub報錯找不到設備
更新時間 2024-11-14 11:35:57
最近更新時間: 2024-11-14 11:35:57
分享文章
現象
Linux系統啟動時,Grub報錯找不到設備,如下圖:
原因
這一般是由于grub的配置文件錯誤,找不到/boot分區,從而報錯。
解決方法
進入系統,重新生成grub的配置文件即可。grub一般會從當前系統中獲取信息,生成正確的配置文件。
1. 進入系統
若因為故障導致無法進入系統,可參考下面的方法進入系統。
重啟系統,在grub啟動菜單(見下圖)出現時按“c”,進入grub shell。
這是grub shell的界面。grub shell是個類似linux shell的環境,可以在這里手動配置,進入系統。
grub> ls # 查看目前都有哪些設備,下面是樣例輸出
(proc) (hd0) (hd0,gpt5) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)
grub> ls (hd0,gpt3)/ # 可以查看文件系統中都有哪些文件,從而找到/boot分區。/boot分區下一般會有vmlinuz-xxx和initramfs-xxx文件
lost+found/ efi/ grub2/ grub/ initramfs-3.10.0-957.el7.x86_64.img System.map-3.
10.0-957.el7.x86_64 config-3.10.0-957.el7.x86_64 symvers-3.10.0-957.el7.x86_64.
gz vmlinuz-3.10.0-957.el7.x86_64 ...
grub> root=(hd0,gpt3) # 設置root變量為/boot分區,后面可避免重復輸入/boot分區的位置
grub> linux /vmlinuz-3.10.0-957.el7.x86_64 root=UUID=c74bd658-cd12-414f-80c6-0200fe5a6685 # 指定linux啟動用的內核,UUID用來指定根分區。可以ls查看分區內容確定根分區,用ls -l獲取分區(或分區上文件系統)的UUID。
grub> initrd /initramfs-3.10.0-957.el7.x86_64.img # 指定linux啟動的內存文件系統,需要和內核版本匹配。
grub> boot # 啟動系統
需注意,linux/initrd命令最為常用,但有些系統使用linux16/initrd16或linuxefi/initrdefi命令來指定linux內核和內存鏡像。如果linux/initrd命令沒有用,可以在grub shell中用命令 cat $root/grub2/grub.cfg查看原grub.cfg,以確定使用何種命令。
2. 更新grub.cfg
linux系統啟動后,登錄進入系統。執行下面命令重新生成grub.cfg。
## 備份舊grub.cfg文件,以防萬一
GRUB_CFG=$(find /boot -name "grub.cfg")
cp -v $GRUB_CFG /root
## 更新grub.cfg
# 對centos/redhat/rocky/openEuler等發行版
grub2-mkconfig $GRUB_CFG
# debian/ubuntu等發行版
update-grub
更新grub.cfg后,請重啟測試是否修復了問題。