情況是這樣的,阿里云免費贈送了7天的安騎士碍彭,于是乎便想瘋狂地用安騎士來修補一把所有的漏洞晤硕,結(jié)果按照阿里云的建議的方法修補一個高危漏洞需要升級Kernel內(nèi)核時把服務器“整趴了”!好在之前有預感——把服務器當前狀態(tài)做了一個鏡像庇忌,才不至于把腸子悔青舞箍。
問題的產(chǎn)生
之前按安騎士的建議直接用命令yum update kernel
直接升級了Kernel,重啟服務器之后似乎并沒有生效皆疹,然后通過命令uname -a
查詢得知當前的系統(tǒng)內(nèi)核為:
Linux 3.10.0-123.9.3.el7.x86_64
還是原來的系統(tǒng)內(nèi)核疏橄,并沒有升級到最新的3.10.0-693.5.2.el7.x86_64
,然后通過以下命令來查看當前所有安裝的內(nèi)核:
cat /boot/grub2/grub.cfg |grep menuentry
可以看到確實已經(jīng)安裝上了略就,而且安裝了不止一個內(nèi)核软族,由此我便簡單地以為是沒有通過新內(nèi)核啟動到系統(tǒng),因此便直接修改linux啟動項到剛升級的新內(nèi)核残制,就此拉開了悲劇的序幕立砸,整個系統(tǒng)直接崩潰,重啟系統(tǒng)后顯示如下信息:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block
正在抓狂之際初茶,欣喜地看到了阿里云官方如何避免升級 Linux 實例內(nèi)核后無法啟動這根救命稻草颗祝,本來故事到這里就應該愉快地結(jié)束了的,但由于文檔教程上寫得太模糊恼布,再加上他們沒做過全版本的測試螺戳,而我的是2015年的centos7,所以硬是折騰了我近一天的時間折汞,好了倔幼,廢話不多說直接上解決方法吧。
升級方法
1爽待、按教程上寫的編輯系統(tǒng)配置文件损同,若配置文件中缺失下列內(nèi)容需要您手動加上翩腐,但這一步有沒有用還真不知,因為我找到dracut.conf.d/
這個目錄里后發(fā)現(xiàn)竟然是空的膏燃,不過我還是照做新建了一個文件virt-drivers.conf
茂卦,也沒時間做徹底的測試:
下面引用自文檔
CentOS 6 和 CentOS 7:
執(zhí)行 vi /etc/dracut.conf.d/virt-drivers.conf
添加 add_drivers+=" xen-blkfront virtio_blk "
CentOS 5:執(zhí)行 vi /etc/dracut.conf.d/virt-drivers.conf
添加 add_drivers+=" xen-vbd virtio_blk virtio_console "
2、更新內(nèi)核组哩,命令如下:
yum install kernel
提示:
因為我之前有執(zhí)行過yum update kernel
升級kernel的命令等龙,如果有錯可試著執(zhí)行下看;
另外伶贰,如果執(zhí)行yum update kernel
升級kernel的過程中出現(xiàn)部分包更新的錯誤(我就碰到了蛛砰,死活升不成功),導致中止的話可嘗試yum update
黍衙,記住暴备,這會一次性更新所有的軟件與工具及系統(tǒng)內(nèi)核,所以備好份做好鏡像们豌,備好份做好鏡像,備好份做好鏡像浅妆,重要的事情說三遍望迎,否則到時別哭,網(wǎng)絡出錯除外哈凌外!
3辩尊、檢查并確認 initrd / initramfs 文件包中是否已經(jīng)包含了 virtio-blk 和 xen-blkfront 驅(qū)動,非常重要康辑,是你重啟后能否進系統(tǒng)的關(guān)鍵摄欲,執(zhí)行的命令官方寫的是:
lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E 'virtio|xen'
但實際上這里的$(new-kernel-ver)
是個變量,執(zhí)行命令到/boot/
目錄疮薇,再列出文件可以看到你的系統(tǒng)內(nèi)核啟動相關(guān)文件胸墙,運行如下命令:
cd /boot/
ls
看到上面的initramfs-xxxx.img類似的文件了么?這便是我們需要的變量文件名按咒,所以我這里的命令是:
lsinitrd /boot/initramfs-3.10.0-693.5.2.el7.x86_64.img | grep -E 'virtio|xen'
-rw-r--r-- 1 root root 7624 Oct 21 05:44 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/block/virtio_blk.ko.xz
-rw-r--r-- 1 root root 12804 Oct 21 05:44 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/char/virtio_console.ko.xz
-rw-r--r-- 1 root root 14276 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/net/virtio_net.ko.xz
-rw-r--r-- 1 root root 7996 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/scsi/virtio_scsi.ko.xz
drwxr-xr-x 2 root root 0 Nov 30 19:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio
-rw-r--r-- 1 root root 4340 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio.ko.xz
-rw-r--r-- 1 root root 9488 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio_pci.ko.xz
-rw-r--r-- 1 root root 8136 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio_ring.ko.xz
從系統(tǒng)回顯的內(nèi)容看到文件中已經(jīng)包含了 virtio-blk 或 xen-blkfront 驅(qū)動即可迟隅,記住一定必須確認 virtio-blk 和 xen-blkfront 驅(qū)動在 initrd 中才可以重啟實例。
好了励七,祝升級順利~