关于troubleshooting

1. /etc/inittab 丢失或错误, 丢失的情况下要进rescue模式, chroot /mnt/sysimage, rpm -Va /etc/inittab; 显示missing, rqm -qf /etc/inittab 查找文件所属的rpm包initscripts,然后通过光盘或者是网络安装此软件包.注意加上--force选项。 如果是错误的话, 会 有多种情况, 比如initdefaults设置错误,机器一直的重启。 此时的修复工作不需要rescue模式, 只要启动的时候动态调整启动选项,加上运行级别启动,然后查找文件中的错误。

2. /boot/grub/grub.conf 错误。 错误的特征就是启动的时候显示grub 的命令行。要正确的修复就必须对/boot/grub/grub.conf的书写格 式非常的熟悉, 而且要能够子集手写出来。在grub命令下打下文件中引导的几个命令, root (hd0,0) ; kernel /vmlinuz-XXXXX-img; initrd initrd-XXXXX.img; 在这个过程中要特别注意tab键的使用, 可以帮助我们解决很多的问题
3. /etc/fstab 丢失或错误。 启动的时候会提示输入root密码对磁盘进行检查。 输入密码, 因为此时硬盘是只读的, 所以要重新mount -o remount /dev/sdaXX / ; 然后fdisk -l 查看分区情况, 然后e2label将各个分区的卷标设置正确。 最后vi /etc/fstab, 当然这就需要你还能手写fstab文件了。 然后重启即可.
4. 一些重要文件的丢失, 比如mount, bash等,解决的方法仍然是以rescue方式进入, rpm -Vf XXX 查询文件是否损坏, rpm -qf 查询属于哪个软件包, 然后安装. 另外还要保证分区是以可读写



今天我自己做了几个实验,首先是删除initrd文件,然后当然rescue,mkinitrd了。这个简单。

然后把内核给删了,rescue,现配个yum源装也行,装的时候先yum remove kernel,再yum install kernel.也可以把kernel下下来,

rpm -Uvh --force kernel.xxxx.rpm

然后又把grub给删了,这个费了点劲,重启了好多次才整好。进入rescue, grub-install /dev/sda

然后手动编辑grub.conf

#vi /boot/grub/grub.conf

                default 0
                timeout 3
                title linux
                        root (hd0,0)
                        kernel /vmlinuzxxx    ro root=LABEL=/ rhgb quiet
                        initrd /initrd.xxx.img
#ln -s /boot/grub/grub.conf /boot/grub/menu.lst
这样reboot就好使了。

还有删除boot分区的,现在没有试,完事再补充吧。


备注:
#rpm -qf查询某个文件属于哪个包
#rpm -Va校验某个包

--force选项忽略包冲突




LINUX的启动流程
1:硬件读取引导扇区
2:加载LILO或者Grub
3:加载内核
4:挂装根文件系统
5:启动init,一切进程的“祖父”
6:读取/etc/inittab文件
7:读取rc.sysinit文件
8:运行rcX.d下的文件(文件都是init.d下的符号链接)
其中有一个xinetd的超级进程,调用/etc/xinetd.conf配置文件,从配置文件中知道读/etc/xinetd.d文件,结束后调用Miggetty
9:读取/etc/rc.d/rc.local 文件

启动引导工具引导并运行核心
分为两个独立的阶段
第一阶段:存放在启动扇区
第二阶段;/boot目录下的文件
在Linux中常用的启动引导工具
grub
lilo

第一阶段即BIOS从启动扇区中读入IPL(初始化程序引导工具)这一过程。因为MBR的空间太小,所以启动引导工具往往还需要从其他地方进一步读入数据,即所谓第二阶段。这通常是一个可以做选择的交互界面。

GRUB:Grand Unified Bootloader
被广泛地用于替代lilo
支持在启动时使用命令行模式
支持md5加密保护
可以从ext2/ext3、ReiseFS、JFS、FAT、minix及FFS文件系统上启动
其配置文件为/boot/grub/grub.conf
更动grub.conf即可立时生效
如果硬盘上的MBR被更动过,可以用
    /sbin/grub-install /dev/hda来重安装grub


grub.conf的范例:
timeout=10      #等待10秒自动进入默认操作系统
splashimage=(hd0,0)/grub/splash.xpm.gz #grub启动背景画面
default=0       #默认进入第一个标题
title Red Hat Linux (2.4.20-18)   #Red Hat Linux标题
root (hd0,0)      #根文件系统位置
kernel  /vmlinuz-2.4.20-18 ro root=LABEL=/ #核心位置与核心加载参数
initrd  /initrd-2.4.20-18.img   #启动initrd ram盘
title windows      #另一个操作系统的标题
rootnoverify (hd0,1)    #操作系统存放在hd0,1上,不要在grub里mount
chainloader +1     #从hd0,1的第一个扇面启动

内核模型
单片型内核
单片型内核将各种硬件支持、网络协议与文件系统管理都编译入一个单一的文件中。
模块型内核:
模块型内核则允许计算机在使用到某一项功能的时候自动加载,防止了核心臃肿,是大部分情况下的标准构建。

默认核心存放路径:/boot
核心版本命名规则
主版本号、次版本号、补丁级数
Red Hat附加参数:发布号
显示当前系统的内核信息#uname -r
核心RPM包
kernel-..rpm
预编译核心及模块
kernel-source-..rpm
核心源代码,需要人工编译出核心并安装
kernel-.src.rpm
    www.kernel.org上发布的原始核心源代码包,需要build出arch包再使用

vmlinuz
是可引导的、压缩的内核。“vm”代表 “Virtual Memory“, Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。
vmlinuz的建立有两种方式:     (1) 编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性。    (2) 内核编译时通过命令make bzImage创建 (单独编译内核映像,不编译驱动模块,生成内核映像bzImage)

Initrd
initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。
initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。#mkinitrd   initrd-版本号.img   版本号

核心启动流程
检测硬件设备
设备驱动初始化
将根分区以只读方式挂载
载入初始进程(一般是init)

init从/etc/inittab中读取数据并初始化
init运行级别
系统启动脚本
执行运行级别对应目录下的脚本
设置热键
定义UPS设备脚本
在虚拟控制台上循环开启getty进程
定义runlevel 5时的X显示管理器

init定义了0~6这7个运行级别
运行级别可以被指定于:
系统启动时作为核心加载参数被指定
未被指定的情况下,系统启动时从/etc/inittab中读取
在系统运行中,root用户键入init [0-6]来指定。
用户可以用/sbin/runlevel来查看当前的运行级别

•系统的运行级别默认情况下为:
•0:关机
•1/S/emergency:单用户模式,通常用于维护系统
•2:多用户模式但无网络
•3:多用户模式(字符界面)
•4:用户定义,未定义情况下与3相同
•5:X11(包括网络)
•6:系统重启

/etc/rc.d/rc.sysinit是系统启动用的脚本
从/etc/sysctl.conf中读取核心参数
设置系统时钟
载入keymap
激活swap分区
设置主机名
检查根文件系统并挂载
加载Raid设备
激活磁盘限额
检查并挂载其他文件系统
清除失效锁及PID文件

每一个运行级别都对应一个目录
/etc/rc.d/rcX.d
目录内存放的,即当前运行级别需要开启的服务脚本
对应/etc/rc.d/init.d/目录下的链接
链接文件开头是S,表示启动;开头是K,则表示关闭。
切换运行级别,即运行这个目录里所有的脚本
用户可以通过ntsysv调整当前运行级别的开关服务,或用chkconfig,调整某一运行级别下的开关服务。

/etc/rc.d/rc.local
在运行级别目录下被最后一个调用
一般系统用户将针对此台计算机的开机定制设置写入其中,而非/etc/rc.d/rc.sysinit。




posted @ 2009-05-06 08:08  冷月X  阅读(237)  评论(0编辑  收藏  举报