谢谢IT之家网友酷屏用户1345881的线索投递!
谢谢IT之家网友鸢一雨音的投稿
写这篇文章是有诱因的。为了配置完全的沉静启动,笔者对自己的工作计算机上运行的Linux执行了不当的mkinitcpio操作,缘由是忽视了mkinitcpio.conf文件中的一处逻辑错误。这促使mkinitcpio生产了新的内核文件,但这个内核文件不能正常工作。重启的时侯linux培训学校,内核启动终止于Panic状态。
通常情况下,新内核不能正常工作时,可以通过使用initramfs内核文件的fallback版本来临时启动系统,甚至可以直接将fallback版本覆盖回家以回退修改,但此次要命的是,mkinitcpio同时更改了vmlinuz内核文件,但是vmlinuz没有fallback版本。对于通常用户,可以直接重装系统解决;并且笔者的工作站环境配置相当复杂,这意味着不仅可能损失我的工作文件之外,我还须要耗费大量额外的时间来重配开发环境。
注意:本教程之“修复”,指“尝试回退毁灭性的人为修改”,故不可用于恢复不知缘由的内核崩溃。
一、从LiveCD启动并查看c盘
凭借兼职Linux服务器运维那段时间积累的经验,我立刻想到可以用LiveCD启动来获得一个临时的、用于修补内核的Linux环境。
笔者使用的是ArchLinux64位版,所以我从从ArchLinux的LiveCD启动。正确步入LiveCD内建的root用户以后,我们须要查看自己的主硬碟的设备名。执行fdisk-l,在笔者的情况下,我的主硬碟、挂载至根目录的分区对应的设备文件是/dev/sdb2。
二、chroot至硬碟上的系统根目录
要chroot到硬碟上的系统根目录,并能正常调用硬碟上的系统组件对硬碟上的系统做出修改,我们首先要自动挂载硬碟上的根分区。执行(我的设备文件是/dev/sdb2):
mount/dev/sdb2/mnt
先不要急。这时侯chroot到/mnt似乎能步入硬碟上主系统的bash,可是你几乎不能正确完成任何复杂的任务,由于还有一些重要的目录没有挂载。我们执行指令,分别挂载proc目录、/sys目录、/dev目录和/run目录。步入/mnt,分别执行:
mount-tprocprocproc/
mount--rbind/syssys/
mount--rbind/devdev/
mount--rbind/runrun/
这种目录的作用分别是:
proc目录:虚拟的、Procfs格式的文件系统,用于储存进程状态文件(在Linux下,这种文件表面看上去都是文本文件,实际上是进程状态的文件映射);
/sys目录:对于ArchLinux,这是一个类似proc目录的、Sysfs格式的虚拟文件系统怎么看linux内核版本,用于存放联接到系统的设备文件;对于传统Unix和类Unix,它是一个指向内核代码树的软链接;
/dev目录:存储设备文件,例如你的硬碟就是/dev/sdXY之类的;
/run目录:储存近来的启动以后系统的部份信息;
挂载了这种东西然后,我们可以chroot到我们的主硬碟的根目录了:
chroot/mnt
懊悔药++。对于我来说,我只须要更改mkinitcpio.conf文件并重新执行mkinitcpio操作,能够重新生成正确的内核文件。通常的,假如是错误地更改了配置造成的内核Panic,这个环境可以解决大部份问题。
三、一些方法
1、许多配置文件在LiveCD里的那种系统里有正确的版本或范本,假若不记得正常的时侯是哪些样子的,可以参照一下它们;
2、对于ArchLinux,可以在不chroot到/mnt的情况下linux windows,直接使用pacstrap指令对/mnt这个挂载点进行软件包管理;
3、可以在两个tty下操作,这样在chroot到/mnt下以后仍然能从LiveCD的文件系统里向/mnt转移文件。
本教程应当对大部份Linux发行版都可用,希望能对部份Linux用户形成帮助。
广告申明:文内富含的对外跳转链接(包括不限于超链接、二维码、口令等方式),用于传递更多信息,节约甄选时间,结果仅供参考怎么看linux内核版本,IT之家所有文章均包含本申明。