GRUB启动故障排除和内核编译

如何进入光盘应急系统(以下修复操作仅适用于GRUB legacy, 不适用于GRUB2):

步骤一:给主机挂上安装光盘, 或者有相应启动镜像的硬盘分区(可移动的分区)

201609122049001

步骤二:开机时选择CDROM先启动

201609122017002步骤三:进入光盘启动界面选择应急救援模式

201609122018001步骤四: 不选择设置网络接口, 直接读取磁盘分区并以读写方式挂载

201609122018002 201609122018003 201609122019001 201609122019002 201609122019003步骤五: 选择shell进入bash中对磁盘进行其他操作, 操作完成后用exit退出到此界面并选择重启选项重启电脑, 并且移除光盘.

GRUB故障之一:

/boot/目录下grub.conf文件丢失

处理方法:

  1. 在grub命令行模式下, 先root (hd0,0)指定启动分区所在磁盘, 然后使用kernel /vmlinuz-xxxx
    root=/dev/sda1指定内核和启动分区. 最后指定initrd /initrd-xxxx.img, 然后输入boot启动.
    如遇故障可重新进行步骤一, 并且修改root=/dev/sda1中的选项. 这时候能进入系统中, 然后进行与方法二中创建文件内容相似的操作,
    保存后写入文件中. 下次重启即能正常进入系统.

  2. 使用光盘进入应急系统中, 在原目录中新建文件, 格式如下

default=0

timeout=3

title=linux

root (hd0,0)

kernel (hd0,0)/vmlinuz-xxxx root=/dev/sda1

initrd (hd0,0)/initrd-xxxx.img

文件保存到/boot/grub/grub.conf , 然后退出应急系统重启

GRUB故障之二:

/boot下initrd文件(或initramfs)丢失

处理方法:

  1. 使用光盘进入应急系统,
    进入位于/mnt/sysimage/boot/目录下使用命令mkinitrd 命令, 稍等片刻即生成initrd文件,
    然后检查/mnt/sysimage/boot/grub/grub.conf 文件中对应条目下的名称是否与所创建文件的文件名一致.201609121958001

  2. 从光盘boot目录下拷贝同名文件到/mnt/sysimage/boot/目录下, 前提是内核版本与光盘中内核版本相同, 如果不同会出现问题导致无法启动.

GRUB故障之三:

vmlinuz文件丢失

处理方法:

  1. 进入光盘应急系统中, chroot到/mnt/sysimage/,
    然后挂载光盘至/mnt目录下, 进入/mnt/Packages/目录下覆盖安装kernel包, 使用命令为rpm -ivh
    –replacepkgs kernel-VERSION.rpm 安装完成后会在/boot目录下自动生成相应版本的vmlinuz文件.
    (前提是内核版本未更新, 和光盘中的内核版本一致)201609122042001

  1. 与之二中第二种方法一致, 复制文件.

GRUB故障之四:

GRUB stage1_5和stage2丢失

处理方法:

  1. 进入光盘应急系统中, 使用命令grub-install /dev/sda对分区进行grub安装, 安装完成后会自动生成对应文件201609122020001如图所示, 在对应目录下生成了所需文件, 至此, 我们只需退出shell 并且重启机器, 修复后的第一次重启系统会重新配置一次, 然后再重启一次就能进入系统了.

  2. 从相同配置的机器上拷贝到对应目录下(不推荐, 不同主机间的硬件配置可能不同, 造成的问题无法追溯, 使用方法一即时生成更加安全)

GRUB故障之五:

磁盘bootloader扇区出错, 即引导磁盘前446字节被擦写

解决方法:

  1. 与之四的方法一相同

GRUB故障之六:

/boot分区丢失, 或所有文件丢失

解决方法:

  1. 结合之前的方法, 先进入光盘应急系统, 然后进行之四的方法一, 再进行之三的方法一, 再进行之二的方法一, 再进行之一的方法一, 完成后检查配置文件和相应文件的对应关系, 然后退出应急系统重启主机.

内核编译和内核模块

linux的内核是宏内核架构, 把大部分功能集成在了内核上, 然后又吸取了微内核的优点, 把非必需的驱动做成模块,
在需要的时候加载至内核中, 由于linux支持的硬件和平台众多, 通用内核通常会具有一些用不上的功能和模块,
此时就需要工作人员对内核进行定制化编译来达到提升内核运行效率和减少其他驱动出错造成系统错误的机会.

从kernel.org官方站点下载同主线最新的内核模块, 笔者用的archlinux , 内核版本为4.7.2 下载了最新版本的4.7.3版本的内核源代码进行编译和安装. 编译之前组安装下开发工具(development tools)

201609122110001下载后对源代码的压缩文件进行解压, tar xf linux-4.7.3.tar.xz

解压完成后进入目录, 然后使用命令make menuconfig 对内核编译的配置文件进行自定义, 定义完成后, 保存配置文件退出

配置过程中:

[ ] : 表示不进行编译

[M] : 表示以模块的形式进行编译

[*] : 编译进内核中

然后使用命令make [-j 2 ]  -j是指定几个处理器进行编译操作, 操作过程中会产生大量中间文件, 需留足空间.

然后使用make modules_install 对模块进行编译, 编译完成后, 使用make install正式编译内核文件.

编译完成后, 会自动在/boot目录下生成对应文件并修改启动的配置文件, 在原有内核选项下加上新的内核启动选项.

由于编译过程过长, 所以在此就不演示了.

具体步骤如下:

make menuconfig

make -j 2

make modules_install

make install

modprobe 命令:

对内核模块进行装载或卸载

装载: modprobe mod_name

卸载: modprobe -r mod_name

modinfo 命令:

查看模块信息

modinfo mod_name

201609122155001

insmod 命令: 指定内核模块进行装载

insmod [ filename ] [module options ]

insmod `modinfo -n exportfs`

insmod `modinfo -n mod_name`

rmmod 命令: 卸载指定内核模块(未运行的)

rmmod [ mod_name ]


/proc目录:

内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

参数:只读:输出信息

可写:可接受用户指定“新值”来实现对内核某功能或特性的配置

/proc/sys

(1) sysctl命令用于查看或设定此目录中诸多参数

201609122156001

sysctl -w path.to.parameter=VALUE

sysctl -w kernel.hostname=mail.magedu.com

(2) echo命令通过重定向方式也可以修改大多数参数的值

echo “VALUE” > /proc/sys/path/to/parameter

echo “websrv” > /proc/sys/kernel/hostname

sysctl命令:

默认配置文件: /etc/sysctl.conf

(1) 设置某参数

sysctl -w parameter=VALUE

(2) 通过读取配置文件设置参数

sysctl -p [/path/to/conf_file]

内核中的路由转发:

/proc/sys/net/ipv4/ip_forward

常用的几个参数:

net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all

vm.drop_caches

/sys目录:

sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性. udev通过此路径下输出的信息动态为各设备创建所需要设备文件, udev是运行用户空间程序

专用工具: udevadmin, hotplug

udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/usr/lib/udev/rules.d目录下

ramdisk管理

ramdisk文件的制作:

(1) mkinitrd命令

为当前正在使用的内核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)201609121958001

(2) dracut命令

为当前正在使用的内核重新制作ramdisk文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

uname 命令:

uname 输出系统信息

-n : 显示节点信息

-r : 显示发行版本

-a : 显示所有信息

201609122153001

原创文章,作者:M20-石俊,如若转载,请注明出处:http://www.178linux.com/45947

(1)
M20-石俊M20-石俊
上一篇 2016-09-12
下一篇 2016-09-12

相关推荐

  • 7-26第三课-帮助和bash基础命令

     命令:     1.获取帮助 内部命令     #help COMMAND     #man COMMAND 外部命令     # COMMAND …

    Linux干货 2016-07-29
  • awk命令详解

    简介: wak是一个强大的文本分析工具,也可以叫做报告生成工具。相对于grep的查找,sed的编辑,awk在对其数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格 为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk有三个不同的版本:awk,nawk,gawk。我们目前所使用的awk一般指gawk,gawk是AWK和GN…

    Linux干货 2016-11-28
  • 第十二周作业

    1、请描述一次完整的http请求处理过程;     1)建立或处理连接:接收请求或拒绝请求;     2)接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程;接收请求的方式通常是并发访问响应模型;     3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息,解析后的报文…

    2017-03-27
  • linux中常用文本处理工具

       在linux文件系统中经常会使用到文本处理工具,这里简单介绍几种文本处理工具: 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep , egrep 文件查看命令:cat, tac,rev,more,less   cat命令是用户经常使用的用来查看文本…

    Linux干货 2016-08-07
  • HA Cluste 的配置:keepalived:vrrp协议 主备模型

    keepalived:vrrp协议 主备模型 第一步配置出始环境: 准备两节点: 主节点:172.18.57.7 long1 备节点:172.18.57.8 long2 (1) 各节点时间必须同步; 同步时间: ~]# yum -y install chrony ~]# vim /etc/chrony.conf ~]# systemctl start chr…

    Linux干货 2017-05-15
  • Linux基础知识(三)

     本文的主要内容是:  1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  2、取出最后登录到当前系统的用户的相关信息。  3、取出当前系统上被用户当作其默认shell的最多的那个shell。  4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全…

    Linux干货 2016-10-03

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 10:12

    写的很好,示例清晰,结构明了,赞一个