解决某厂交换机无法“can’t load kernel”的问题
目录
故障现象描述
-
尝试升级交换机版本(这里应该因为某种原因导致升级失败)。
-
尝试进入所谓的
recover
模式 ,也就是FreeBSD
的loader
,并尝试使用install --format
将已有的文件系统重写(也叫格式化安装)。 -
这时候会得到如下错误:
1 2
panic: free: guard1 fail @ 0x45c40 from /.amd/svl-engdata1vs1/occamdev/build/freebsd/head/20160518.183540_fbsd-builder_head.327854/src/lib/libstand/dosfs.c:248 --> Press a key on the console to reboot <--
交易过程
此处省略砍价过程…
我:你文档是盲流子文档,有没有官方文档。
:这就是官方文档。
我:肯定不是,我自己找吧。
十分钟后,我确实遇到同样的错误,再次扯皮。
我:你这包不对吧?
:肯定对。
我:你有没有别的,img格式的。
:下载中。
这时基本是确定了包不对,文档也不是解决这个问题的文档,使用Google大法。基本定位是
loader
模式的状态下,并没有从USB
设备引导,由于对BSD不熟悉,但是应该原因类似GRUB
引导设备不对差不了多少😂。
我:拿到IMG包。
名词描述
load
模式
这个就是FreeBSD
内核引导的最后阶段,会检测控制台和磁盘,识别从哪块盘引导。
currdev
选择默认设备。
include
处理脚本文件。依次读取每个文件进入内存,然后将其中的每一行传递。
dd
convert and copy a file。
开搞
-
首先将img.gz包解压,并将其写入到usb设备(win直接解压就好):
1
gzip -d xxx.img.gz
-
确定USB是哪个,此处仅写Mac上的方法:
1 2
diskutil list # 找到你的usb,我这是disk2 diskutil umountDisk /dev/disk2 # 卸载
-
将img镜像写入usb设备(其他刻录软件也可):
1
dd if=/path/to/file.img of=/dev/disk2 bs=1m
-
拔掉USB。
-
接到某厂坏了的交换机。
-
插上什么
console
线。 -
通过COMx连上。
-
执行reboot(主要为了重新识别USB设备)。
-
进入
loader
模式后。1 2
set currdev="disk1s1a" # 设置引导设备为disk1s1a include /boot/loader.rc # 执行/boot/loader.rc脚本文件
结束
等待重写完成,就可以通过默认用户名:root
,密码:空,进入系统。