快速修复一个Panic的Linux内核的技巧

感谢我们网友 鸢一雨音 的投稿

写这篇文章是有原因的。为了配置完全的静默启动,笔者对自己的工作计算机上运行的Linux执行了不当的mkinitcpio操作,原因是忽略了mkinitcpio.conf文件中的一处逻辑错误。这使得mkinitcpio生产了新的内核文件,但这个内核文件不能正常工作。重启的时候,内核启动中止于Panic状态。

一般情况下,新内核不能正常工作时,可以通过使用initramfs内核文件的fallback版本来临时启动系统,甚至可以直接将fallback版本覆盖回去以回退更改,但这次要命的是,mkinitcpio同时修改了vmlinuz内核文件,而且vmlinuz没有fallback版本。对于一般用户,可以直接重装系统解决;但是笔者的工作站环境配置相当复杂,这意味着除了可能损失我的工作文件之外,我还需要花费大量额外的时间来重配开发环境。

注意本教程之“修复”,指“尝试回退毁灭性的人为更改”,故不可用于恢复不知原因的内核崩溃。

一、从LiveCD启动并查看磁盘

凭着兼职Linux服务器运维那段时间积累的经验,我立即想到可以用LiveCD启动来获得一个临时的、用于修复内核的Linux环境。

笔者使用的是Arch Linux 64位版,所以我从从Arch Linux的LiveCD启动。正确进入LiveCD内建的root用户之后,我们需要查看自己的主硬盘的设备名。执行fdisk -l,在笔者的情况下,我的主硬盘、挂载至根目录的分区对应的设备文件是/dev/sdb2。

二、chroot至硬盘上的系统根目录

要chroot到硬盘上的系统根目录,并能正常调用硬盘上的系统组件对硬盘上的系统作出更改,我们首先要手动挂载硬盘上的根分区。执行(我的设备文件是/dev/sdb2):

mount /dev/sdb2 /mnt

先不要急。这时候chroot到/mnt虽然能进入硬盘上主系统的bash,但是你几乎不能正确完成任何复杂的任务,因为还有一些重要的目录没有挂载。我们执行指令,分别挂载proc目录、/sys目录、/dev目录和/run目录。进入/mnt,分别执行:

mount -t proc proc proc/

mount --rbind /sys sys/

mount --rbind /dev dev/

mount --rbind /run run/

这些目录的作用分别是:

proc目录:虚拟的、Procfs格式的文件系统,用于存放进程状态文件(在Linux下,这些文件表面看起来都是文本文件,实际上是进程状态的文件映射);

/sys目录:对于Arch Linux,这是一个类似proc目录的、Sysfs格式的虚拟文件系统,用于储存连接到系统的设备文件;对于传统Unix和类Unix,它是一个指向内核代码树的软链接;

/dev目录:储存设备文件,比如你的硬盘就是/dev/sdXY之类的;

/run目录:存放最近的启动之后系统的部分信息;

挂载了这些东西之后,我们可以chroot到我们的主硬盘的根目录了:

chroot /mnt

后悔药++。对于我来说,我只需要修改mkinitcpio.conf文件并重新执行mkinitcpio操作,就能重新生成正确的内核文件。一般的,如果是错误地修改了配置导致的内核Panic,这个环境可以解决大部分问题。

三、一些技巧

1、许多配置文件在LiveCD里的那个系统里有正确的版本或范本,如果不记得正常的时候是什么样子的,可以参照一下它们;

2、对于Arch Linux,可以在不chroot到/mnt的情况下,直接使用pacstrap指令对/mnt这个挂载点进行软件包管理;

3、可以在两个tty下操作,这样在chroot到/mnt下之后依然能从LiveCD的文件系统里向/mnt转移文件。

本教程应该对大部分Linux发行版都可用,希望能对部分Linux用户产生帮助。

(0)

相关推荐

  • Linux内核实现多路镜像流量聚合和复制的方法

    我们在进行安全性监控、测试的过程中,难免会遇到这样的问题:需要部署大量基于镜像流量的安全设备,如IPS,异常流量,数据库审计,流量分析等,可是交换机上可以做镜像流量的端口数量有限制,购买专业的设备又太 ...

  • Linux内核的文件预读详解

    Linux文件预读算法磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈。预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段 ...

  • 如何快速修复Win7系统

    Windows 7可能是微软迄今为止最好的桌面操作系统,但是偶尔出现一些问题还是在所难免的。这里教你如何快速修复出现问题的Windows 7系统,每个操作系统都有重新安装的可能,Windows 7也不 ...

  • Linux内核驱动fsync机制实现图解

    在Linux内核中的IO模型基本分为4类: 1、同步阻塞I/O 2、同步非阻塞I/O 3、异步阻塞I/O 4、异步非阻塞I/O 同步:应用显式地通过函数访问数据,在此函数返回时就会得到结果(成功或失败 ...

  • Linux内核的ioctl函数学习

    Linux内核的概念 Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x ...

  • 快速修复损坏的u盘的方法

    我们在将U盘从USB接口拔出时,如果忘记了执行卸载操作直接将U盘从USB接口拔出,或者执行卸载操作不彻底,或者由于错误操作,就有可能会导致U盘损坏,导致计算机不能识别U盘。 如果出现这种情况很多半人会 ...

  • unix/linux内核在系统里扮演什么

    unix/linux内核在系统里扮演什么角色? 不仅仅是FreeBSD系统,每一个操作系统都有一个内核---从MS-DOS、Windows到高级终端大型机,但是各种系统对内核的态度不同,有些系统花费了 ...

  • 减少Linux内核空循环,降低系统能耗技巧

    如果不花更多的时间看表,你将有更多充裕的时间。 通俗地讲,这就是Linux内核中一个重要变化的基本原理,编程人员希望这一变化能够提高Linux的效率。新版Linux操作系统将采用“tickless”( ...

  • 减少Linux内核空循环 降低系统能耗技巧 1

    如果不花更多的时间看表,你将有更多充裕的时间。 通俗地讲,这就是Linux内核中一个重要变化的基本原理,编程人员希望这一变化能够提高Linux的效率。新版Linux操作系统将采用“tickless”( ...