Linux-image存储的是内核及其他系统运行的必要文件,在明白自己干什么之前,修改内核的风险非常大,进不去系统是正常的。
为升级npu驱动,我直接手动覆盖安装了linux-image-legacy-rockchip-rk3588_1.0.10_arm64.deb
,内核被连带更新到了5.10.160,导致无法启动。
一般X86下的Ubuntu不会有这个问题,内核采用滚动更新,而且一般会有保存数个版本的内核,系统运行和内核解藕,更换内核不至于无法启动。但Orangepi-5-plus及其他的开发板系统基本都是专用的,对应版本有对应内核,更换内核版本只能全新安装整个系统。
为了拯救我的数据库,我选择修复旧系统。
目前正在使用的系统镜像是是Orangepi5plus_1.0.4_ubuntu_jammy_server_linux5.10.110
,对应内核版本为5.10.110。
因为开发板则是直接本地安装的指定内核,无法通过apt安装内核文件,所以需要提前准备内核包本地安装。
修复无法启动的系统需要一个外部启动盘,先用额外TF卡制作一个系统盘,对于orangepi系列的开发板,直接使用balenaEtcher烧录镜像即可。
为方便起见,仍烧录Orangepi5plus_1.0.4_ubuntu_jammy_server_linux5.10.110
。
启动,进入系统,列出所有存储驱动器。
lsblk
此时已经在挂载至根分区的为现运行中的系统,剩余未挂载显然是旧盘,将旧系统盘根目录挂载至mnt,因为需要修复内核,注意挂载原boot分区至对应目录。
另外为了保证系统运行,还需要链接以下几个目录
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
以上三个目录分别对应设备文件、系统信息和进程信息,根据具体情况不链接也可。
接下来开始准备需要修复的软件包,使用dpkg-repack重新打包内核软件包,否则还要重新编译内核。
dpkg-repack packname
接下来转换根目录。
chroot /mnt
安装缺失的软件包修补即可。
dpkg -i packname
如果是Ubuntu官方系统,还需要更新grub。
update-grub