linux-系统启动和内核管理

一、Linux 组成及启动过程

Linux: kernel+rootfs
   kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能  
   IPC:Inter Process Communication
       消息队列、semperphor、shm
       socket
   运行中的系统环境可以分为两层:内核空间、用户空间
  用户空间:应用程序(进程或线程)
  内核空间:内核代码(系统调用)
   
   rootfs: 程序和glibc
   库:函数集合, function,  调用接口(头文件负责描述)
      过程调用:procedure ,无返回值
       函数调用:function
   程序:二进制执行文件
内核设计流派:
单内核(monolithic kernel):Linux
    把所有功能集成于同一个程序
微内核(micro kernel) :Windows, Solaris
    每种功能使用一个单独子系统实现

内核

Linux 内核特点:
支持模块化:.ko (内核对象)
    如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
组成部分:
核心文件:/boot/vmlinuz- VERSION -release
ramdisk :辅助的伪根系统    CentOS 5: /boot/initrd- VERSION -release.img    CentOS6,7: /boot/initramfs- VERSION -release.img
模块文件:/lib/modules/ VERSION -release

Centos6 启动流程

image

1. 加载BIOS的硬件信息,获取第一个启动设备。2. 读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。4. 核型执行init程序并获取运行信息。5.Init 执行/etc/rc.d/rc.sysinit 文件。6. 启动核心的外挂模块(/etc/modprobe.conf)。 
7.Init执行运行的各个批处理文件(scripts).8.Init 执行/etc/rc.d/rc.local.9. 执行/bin/login程序,等待用户登录。10. 登录之后开始以Shell控制主机。

(一)启动流程

1、 POST :Power-On-Self-Test,加电自检
BIOS功能的一个主要部分。负责 完成对CPU 、主板、内存 、硬盘 子系统、显示子系统、串并行接口、键盘、CD-ROM 光驱等硬件情况的检测 。ROM :BIOS ,Basic Input and Output System保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等。RAM :CMOS互补金属氧化物半导体,保存各项参数的设定按次序查找引导设备,第一个有引导程序的设备为本次启动设备
2、bootloader:引导加载器引导程序
windows: ntloader ,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
         
LILO :LInux LOaderGRUB: GRand Unified Bootloader
      GRUB 0.X: GRUB Legacy,
      GRUB 1.X: GRUB2
功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后吧系统控制权移交给内核;
MBR:
446:  bootloader, 
64 :  分区表, 
2  :  55AA
GRUB:
primary bootloader  : 1st stage
   filesystem driver: 1.5 stage
secondary bootloader :2nd stage ,分区文件
3、kernel:
自身初始化:
    探测可识别到的所有硬件设备
    加载硬件驱动程序(可能借助于ramdisk加载驱动)
    以只读方式挂载根文件系统
    运行用户空间的第一个应用程序:/sbin/init
ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
    ramdisk --> ramfs  提高速度
    CentOS 5: initrd, 工具程序:mkinitrd
    CentOS 6: initramfs, 工具程序:mkinitrd, dracut
系统初始化:
POST --> BootSeq uence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init (systemd)
4、启动用户空间的第一个执行程序init
/sbin/init CentOS6 之前
init 程序配置文件的类型:
SysV: init, CentOS 5 之前
    配置文件:/etc/inittab    
Upstart: init,CentOS 6
    配置文件:/etc/inittab, /etc/init/*.conf
    
Systemd :systemd, CentOS 7
    配置文件:/usr/lib/systemd/system
             /etc/systemd/system
运行级别:为系统运行或维护等目的而设定;0-6 :7 个级别
0 :关机1 :单用户模式(root 自动登录), single,  维护模式2:  多用户模式,启动网络功能,但不会启动NFS ;维护模式3 :多用户模式,正常模式;文本界面4 :预留级别;可同3 级别5 :多用户模式,正常模式;图形界面6 :重启
   
/etc/inittab 修改默认启动级别
vim /etc/inittabid:5:initdefault:
默认级别: 3, 5切换级别:init #查看级别:runlevel ; 
            who -r
[root@lvasu cron.d]# runlevelN 5[root@lvasu cron.d]# who -r
         运行级别 5 2016-09-11 09:34
init 初始化
init 读取其初始化文件:/etc/inittab1、初始运行级别(RUN LEVEL)2、系统初始化脚本3、对应运行级别的脚本目录4、捕获某个关键字顺序5、定义UPS 电源终端/ 恢复脚本6、在虚拟控制台生成getty7在运行级别5 初始化X
CentOS 5 的inittab 文件
配置文件:/etc/inittab
每一行定义一种action 以及与之对应的processid:一个任务的标识符runlevel:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;action:在什么条件下启动此任务process:任务      
action:
        wait: 切换至此级别运行 一次
        respawn:此process 终止,就重新启动之
        initdefault :设定默认运行级别;process 省略
        sysinit :设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit        ca::ctrlaltdel:/sbin/shutdown -t3 -r nowEXAMPLE:           id:3:initdefault:si::sysinit:/etc/rc.d/rc.sysinit    
l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1...l6:6:wait:/etc/rc.d/rc 6
CentOS 6 /etc/inittab和相关文件
/etc/inittab
    设置系统默认的运行级别
    id:3:initdefault:
/etc/init/control-alt-delete.conf/etc/init/tty.conf/etc/init/start-ttys.conf/etc/init/rc.conf/etc/init/prefdm.conf
CentOS 7 systmd
init程序:systemd
配置文件:/usr/lib/systemd/system
           /etc/systemd/system     完全兼容SysV脚本机制;因此,service命令依然可用,建议使用systemctl命令控制服务# systemctl {start|stop|restart|status} name [service]

启动流程

/etc/rc.d/rc.sysinit:  系统初始化脚本
    (1)  设置主机名
    (2)  设置欢迎信息
    (3)  激活udev 和selinux
    (4)  挂载/etc/fstab 文件中定义的文件系统
    (5) 检测根文件系统,并以读写方式重新挂载根文件系统
    (6)  设置系统时钟
    (7)  激活swap设备
    (8)  根据/etc/sysctl.conf 文件设置内核参数
    (9)  激活lvm 及software raid 设备
    (10)  加载额外设备的驱动程序
    (11)  清理操作
说明:rc N –> 意味着读取/etc/rc.d/rcN.d/
K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
脚本框架
for srv in /etc/rc.d/rcN.d/K*; do$srv stop
donefor srv in /etc/rc.d/rcN.d/S*; do$srv startdone

chkconfig命令

chkconfig 命令
查看服务在所有级别的启动或关闭设定情形:
chkconfig [--list] [name]
添加:
首先需要添加脚本,服务脚本位置
    
SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
  
chkconfig --add name
chkconfig --add testsrv
脚本    
#!/bin/bash#LLLL表示初始在哪个级别下启动,- 表示都不启动# chkconfig: LLLL SS KK 
    1st  SS:表示启动的次序  88
    2rd  KK:表示关闭的次序  22#descrition:test service   
 EXAMPLE:         
#!/bin/bash#chkconfig:35 88 22#description:test service
删除:
chkconfig --del name
chkconfig --del testsrv
修改指定的链接类型(下次开机生效)
chkconfig [--level levels] name <on|off|reset>
    --level LLLL:  指定要设置的级别;省略时表示2345
chkconfig --level 35 testsrv
ntsysv 命令
GUI服务管理
ntsysv --level=3

xinetd 管理的服务(超级守护进程)

service  命令:手动管理服务
service 服务 start|stop|restart
service --status-all
瞬态(Transient )服务被xinetd 进程所管理
进入的请求首先被xinetd 代理
配置文件:/etc/xinetd.conf 、/etc/xinetd.d/<service>
与libwrap.so 文件链接
用chkconfig 控制的服务:
     chkconfig tftp on

启动流程(注意)

注意:正常级别下(2-5),最后启动一个服务S99local 没有链接至/etc/rc.d/init.d 一个服务脚本,而是指向了/etc/rc.d/rc.local 脚本,
不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local 文件中
• /etc/rc.d/rc.local 在指定运行级别脚本后运行
• 可以根据情况,进行自定义修改1:2345:respawn:/usr/sbin/mingetty tty12:2345:respawn:/usr/sbin/mingetty tty2
...6:2345:respawn:/usr/sbin/mingetty tty6
mingetty 会自动调用login 程序x:5:respawn:/etc/X11/prefdm -nodaemon
总结:
/sbin/init --> (/etc/inittab) -->  设置默认运行级别-->运行系统初始脚本、完成系统初始化-->(关闭对应下需要关闭的服务启动需要启动服务 -->  设置登录终端
    
CentOS 6 init 程序为: upstart,  其配置文件: /etc/inittab, /etc/init/*.conf法 ,配置文件的语法  遵循upstart 配置文件语法格式,和CentOS5 不同

(二)grub legacy

CentOS 6 启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot -->/sbin/init -->(/etc/inittab, /etc/init/*.conf) -->设定默认运行级别 -->  系统初始化脚本 rc.sysinit -->  关闭或启动对应级别的服务 -->  启动终端
grub: GRand Unified Bootloader
grub 0.x: grub legacy
grub 1.x: grub2
grub legacy:    stage1: mbr    stage1_5: mbr 之后的扇区,让stage1 中的bootloader能识别stage2 所在的分区上的文件系统
    stage2 :磁盘分区(/boot/grub/)
配置文件:/boot/grub/grub.conf <– /etc/grub.conf
stage2及内核等通常放置于一个基本磁盘分区
功用:
(1)  提供启动菜单、并提供交互式接口
    a:内核参数
    e: 编辑模式,用于编辑菜单
    c: 命令模式,交互式接口
(2)  加载用户选择的内核或操作系统允许传递参数给内核可隐藏启动菜单
(3)  为菜单提供了保护机制
为编辑启动菜单进行认证
为启用内核或操作系统进行认证
grub 的命令行接口
help:  获取帮助列表help KEYWORD:  详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE: :
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的
内核文件;额外还可添加许多内核支持使用的cmdline 参数
例如:max_loop=100 selinux=0 init=/path/to/init
initrd /PATH/TO/INITRAMFS_FILE:  设定为选定的内核
提供额外文件的ramdisk; 
boot:  引导启动选定的内核
cat /proc/cmdline 内核参数
内核参数文档:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt
rpm -ql kernel-doc
识别硬盘设备 :
(hd#,#)hd#:  磁盘编号,用数字表示;从0 开始编号#:  分区编号,用数字表示;  从0 开始编号(hd0,0)  第一块硬盘,第一个分区
手动在grub 命令行接口启动系统:
grub> root (hd#,#)grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot

image

grub legacy 配置文件

配置文件:/boot/grub/grub.conf   
default=#:  设定默认启动的菜单项;落单项(title) 编号从0 开始timeout=# :指定菜单项等待选项选择的时长splashimage=(hd#,#)/PATH/TO/XPM_FILE :菜单背景图片文件路径hiddenmenu :隐藏菜单
password [--md5] STRING:  启动菜单编辑认证
title TITLE :定义菜单项“标题”,  可出现多次
root (hd#,#) :grub 查找stage2 及kernel 文件所在设备分区;为grub “根”kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] :启动的内核
initrd /PATH/TO/INITRAMFS_FILE:  内核匹配的ramfs 文件
password [--md5] STRING:  启动选定的内核或操作系统时进行认证

grub 加密

加密命令
grub-md5-crypt 
    
openssl passwd -l -salt "abcd"
破解root 口令:
启动系统时,设置其运行级别1进入单用户模式 :
    (1)  编辑grub 菜单( 选定要编辑的title ,而后使用e 命令);
    (2)  在选定的kernel 后附加    1, s, S 或single 都可以;
    (3)  在kernel 所在行,键入“b” 命令

grub 安装

安装grub:
(1) grub-install (all)
安装grub stage1 和stage1_5 到/dev/DISK 磁盘上,并复制GRUB到 相关文件到 DIR/boot 目录下
   
grub-install --root-directory=DIR /dev/DISK
(2) grub   (stage1)
grub> root (hd#,#)grub> setup (hd#)***grub 命令安装需要依赖于**1_5文件,当删除/boot/grub文件夹时,无法安装

image

(三)救援环境

在根文件系统无法使用时需要,如/bin/mount 删除
对系统没有特殊要求
从光盘引导(boot.iso 或者安装光盘#1) )
从USB 盘(由boot.iso 制作)引导
文件系统重组
Anaconda 将会询问是否应该挂载文件系统
/mnt/sysimage/*
/mnt/stage2$PATH 包括硬盘的目录
文件系统节点
提供系统特定的设备文件
mknod 了解major/minor #’s

系统配置文件丢失修复

系统在引导期间,很重要的一个过程就是init进程读取其配置文件/etc/inittab ,启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab误删除或修改错误,Linux将无法正常启动。此时,只有通过救援模式才可以解决此类问题。
有备份文件的恢复办法:
进入救援模式,执行chroot 命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/etc、/boot等要进行备份),直接将备份文件拷贝回去,退出重启即可。如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf 及/etc/passwd的文件修改错误,也可以直接修正恢复。假设有备份文件/etc/inittab.bak ,则在救援模式下执行:    
sh-3.1# chroot /mnt/sysimagesh-3.1# cp /etc/inittab.bak /etc/inittab
没有备份文件的恢复办法
如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复,首先查找到/etc/inittab 属于哪一个RPM包 
# chroot /mnt/sysimage# rpm -qf /etc/inittabinitscripts-9.03.49-1.el6.centos.x86_64
退出chroot 模式 :# exit挂载存放RPM包的安装光盘(在救援模式下,光盘通常挂载在 /mnt/source 目录下):
# mount /dev/sr0 /mnt/source
CentOS6 系统的RPM 包存放在光盘Package目录下,另外,因为要修复的硬盘系统的根目录在/mnt/sysimage 下,需要使用--root选项指定其位置。覆盖安装/etc/inittab文件所在的RPM包:
# rpm -ivh –replacepkgs | force /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm
其中的rpm命令选项“--replacepkgs”表示覆盖安装,执行完成后,即已经恢复了此文件。
如果想只提取RPM 包中的/etc/inittab文件进行恢复,可以在进入救援模式后,执行命令:
# rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm|
cpio -idv ./etc/inittab
# cp etc/inittab /mnt/sysimage/etc
    
注意此命令执行时不能将文件直接恢复至/etc目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整 的路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage 目录下相应位置即可

二、自制linux 系统

分区并创建文件系统
fdisk /dev/sdb
分两个必要的分区/dev/sdb1 对应 /boot 
/dev/sdb2 对应根 /
mkfs.ext4 /dev/sdb1
挂载boot
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
安装grub
grub-install --root-directory=/mnt /dev/sdb
恢复内核和initramfs 文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot
建立grub.conf 文件
Vim /mnt/boot/grub.confkernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
chroot /mnt/sysroot
创建一级目录
mkdir /mnt/sysroot
mount /dev/sdb2 /mnt/sysroot
mkdir –pv
/mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
复制bash和相关库文件

三、内核编译

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

(一)、内核组成部分:

kernel:内核核心,一般为bzImage ,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE; ;
kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N[M]: M[*]: Y辅助文件:ramdisk
initrd
initramfs
模板文件:config-2.6.32-642.el6.x86_64

内核版本

运行中的内核:
uname 命令:
    uname - print system information
    uname [OPTION]...
        -n:  显示节点名称;        -r:  显示VERSION-RELEASE;        -a:  显示所有信息

(二)、内核模块命令

lsmod 命令:
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules 文件
modinfo 命令:
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
    -n:  只显示模块文件路径    -p:  显示模块参数    -a: author    -d: description    -l: licenselsmod |grep xfs;modinfo xfs

内核模块管理

modprobe 命令:
装载或卸载内核模块
modprobe [ -C config-file ] [ modulename ] [ module parame-ters... ]配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf
modprobe [ -r ] modulename...
depmod 命令:
内核模块依赖关系文件及系统信息映射文件的生成工具
   
装载或卸载内核模块:insmod 命令:指定模块文件,不自动解决依赖模块    insmod [ filename ] [ module options... ]    insmod `modinfo –n exportfs`
    lnsmod `modinfo –n xfs`rmmod
    rmmod [ modulename ]    rmmod xfs
    rmmod exportfs

/proc 目录

/proc 目录:
内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
参数:只读:输出信息
     可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
/proc/sys
(1) sysctl 命令用于查看或设定此目录中诸多参数
sysctl -w path.to.parameter=VALUEsysctl -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=1  开启路由转发功能  (linux路由或者vpn服务)
net.ipv4.icmp_echo_ignore_all=1  禁止ping
vm.drop_caches  清除缓存
vm.drop_caches详细文档To free pagecache:
* echo 1 > /proc/sys/vm/drop_cachesTo free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes:
* echo 3 > /proc/sys/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)
(2) dracut 命令
为当前正在使用的内核重新制作ramdisk 文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)

(三)、编译内核

前提:
(1)  准备好开发环境
(2)  获取目标主机上硬件设备的相关信息
(3)  获取目标主机系统功能的相关信息
例如: 需要启用相应的文件系统
(4)  获取内核源代码包
www.kernel.org

开发环境准备

包组(CentOS 6): :
    Server Platform Development
    Development Tools
目标主机硬件设备相关信息:
 CPU:    #cat /proc/cpuinfo    #x86info -a
    #lscpu

硬件设备

PCI 设备:
    lspci
        -v        -vv    lsusb
        -v        -vv    lsblk 块设备
了解全部硬件设备信息
    hal-device

内核编译安装系统

安装开发包组
下载源码文件
.config :准备文本配置文件make menuconfig :配置内核选项make [-j #]make modules_install :安装模块make install  :安装内核相关文件
    安装bzImage 为/boot/vmlinuz-VERSION-RELEASE
    生成initramfs 文件
    编辑grub 的配置文件

编译安装内核实例

tar xf linux-3.10.67.tar.xz -C /usr/srccd /usr/srcln -sv linux-3.10.67 linuxcd /usr/src/linuxcp /boot/config-$(uname -r) ./.configmake menuconfigmake -j 2make modules_installmake install
reboot

编译内核

(1) 配置内核选项
支持“更新”模式进行配置:make help
(a) make config:基于命令行以遍历的方式去配置内核
中可配置的每个选项
(b) make menuconfig :基于curses 的文本窗口界面
(c) make gconfig :基于GTK (GNOME )环境窗口界面
(d) make xconfig :基于QT(KDE) 环境的窗口界面
支持“全新配置”模式进行配置
(a) make defconfig:基于内核为目标平台提供的“默认
”配置进行配置
(b) make allyesconfig:  所有选项均回答为“yes“
(c) make allnoconfig:  所有选项均回答为"no“
(2) 编译
全编译:make [-j #]编译内核的一部分功能:
    (a)  只编译某子目录中的相关代码:    # cd /usr/src/linux
    # make dir/
    (b)  只编译一个特定的模块:    # cd /usr/src/linux
    # make dir/file.ko
    例如:只为e1000 编译驱动:    #make drivers/net/ethernet/intel/e1000/e1000.ko

编译内核

如何交叉编译内核:
编译的目标平台与当前平台不相同;# make ARCH=arch_name
要获取特定目标平台的使用帮助
# make ARCH=arch_name help# make ARCH=arm help

内核编译

在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:
# make clean:清理大多数编译生成的文件,但会保留config 文件等# make mrproper:  清理所有编译生成的文件、config及某些备份文件# make distclean :mrproper 、patches 以及编辑器份文件

实验

一、破坏或删除/boot引导的相关文件及修复
1、删除stage1文件,恢复系统(症状:计算机会认为无OS)
1、删除stage1文件# dd if=/dev/zero of=/dev/sda bs=1 count=446 # hexdump -C -n 512 /dev/sda

image

2、恢复   ***重启进入boot菜单选择,选择CDrom驱动器

imageimage

***进入救援模式rescue,选择非网络模式

imageimage

***我们所使用的磁盘被挂载在/mnt/sysimage目录下

image

***切换根目录 
    # chroot /mnt/sysimage
   ***grub修复命令    # grub-install /dev/sda

image

***修复完成,执行两次exit,reboot重启计算机    # exit
    # exit

image

2、删除stage1.5,恢复系统(症状:开机BIOS直接黑屏)
1、删除stage1.5文件# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1# hexdump -C -n 2048 /dev/sda

image

2、恢复
光盘启动,进入rescue模式   ***切换根目录 
    # chroot /mnt/sysimage
   ***grub修复命令    # grub-install /dev/sda
   ***修复完成,执行两次exit,reboot重启计算机

image

3、删除grub文件夹
1、删除/boot/grub文件
# rm -rf /boot/grub
# ls /boot

image

2、恢复
光盘启动,进入rescue模式   ***切换根目录 
    # chroot /mnt/sysimage
   ***grub修复命令    # grub-install /dev/sda

image

***首次启动,需要填写grub配置信息

image

4、删除vmlinuz、initramfs (通过安装光盘直接修复)
1、删除/boot/vmlinuz、initramsfs文件# rm -f /boot/{vmlinuz、initrams}# ls /boot
   2、恢复
光盘启动,进入rescue模式   ***切换根目录 
    # chroot /mnt/sysimage
   ***挂载CDrom    # mkdir /mnt/cdrom
    # mount /dev/cdrom /mnt/cdrom
    *** 复制文件    # cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r` 
    # mkinitrd /boot/initramfs-`uname -r`.img   `uname -r`
   ***修复完成,执行两次exit,reboot
删除vmlinuz、initramfs (通过救援光盘网络修复)
2、恢复
光盘启动,进入rescue模式   ***切换根目录 
    # chroot /mnt/sysimage
   ***挂载CDrom    # mkdir /mnt/cdrom
    # mount /dev/cdrom /mnt/cdrom
    *** 复制文件    # cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r` 
    # mkinitrd /boot/initramfs-`uname -r`.img   `uname -r`
   ***修复完成,执行两次exit,reboot
5、删除/boot
1、删除/boot文件# rm -fr /boot/
    2、恢复
光盘启动,进入rescue模式 ***安装kernel包# mkdir /mnt/cdrom# mount /dev/cdrom /mnt/cdrom# rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm --root=/mnt/sysimage --replacepkgs|force ***  切换根目录
chroot /mnt/sysimage***   修复
grub-install /dev/sda*** 编辑grub.conf
vim /boot/grub/grub.conf
6、普通磁盘分区删除删除/boot 和/etc/fstab
1、删除/boot、/etc/fstab文件# rm -fr /boot/# rm -r /etc/fstab
   2、恢复
光盘启动,进入rescue模式***检查/ 
    blkid;fdisk -l
    mkdir /mnt/sda2
    mount /dev/sda2 /mnt/sda2***编辑fstab文件,重启让系统自动挂载
    vi /mnt/sda2/etc/fstab
    /dev/sda1 /boot ext4 defaults 1 1 
    /dev/sda2  /  	ext4 defaults 1 2
    reboot***光盘启动,进入rescue模式,挂载/mnt/sysimage
    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    chroot /mnt/sysimage*** 安装kernel包
    rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm  --replacepkgs|force 
***修复grub 
    grub-install /dev/sda
***编辑grub.conf文件
    vim /boot/grub/grub.conf
    default=0
    timeout=3
    title wanglinux
    root (hd0,0)
    kernel /vmlinuz.... root=/dev/sda2
    initrd /initramfs .

image

7、逻辑卷情况下,删除/boot 和/etc/fstab
1、删除/boot、/etc/fstab文件# rm -fr /boot/# rm -r /etc/fstab
   2、恢复
光盘启动,进入rescue模式***检查逻辑卷,并激活
    lvscan
    vgchange -ay 
    mount /dev/vg0/root /mnt/sysimage***编辑fstab文件,重启让系统自动挂载
    vi /mnt/sysimage/etc/fstab
    /dev/sda1 /boot ext4 defaults 1 1 
    /dev/vg0/root  /  	ext4 defaults 1 2
    /dev/vg0/usr /usr 
    /dev/vg0/var /var   
    reboot***光盘启动,进入rescue模式,挂载/mnt/sysimage
    mkdir /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    chroot /mnt/sysimage***安装kernel包
    rpm -ivh /mnt/cdrom/Packages/kernel-2*.rpm  --replacepkgs|force 
***修复grub
    grub-install /dev/sda
***编辑grub.conf配置文件
    vim /boot/grub/grub.conf
    default=0
    timeout=3
    title wanglinux
    root (hd0,0)
    kernel /vmlinuz.... root=/dev/vg0/root
    initrd /initramfs .
8、恢复文件/boot/initramfs
# chroot /mnt/sysimage# mkinitrd /boot/initramfs-`uname -r`.img `uname -r` # exit;exit;reboot   退出救援模式并重启计算机

image

9、root密码丢失破解
1. centos怎么让进入GRUB 菜单界面
 Linux开机引导的时候,按键盘上的e 就可以进入进入GRUB菜单界面。           
2.在出现GRUB引导画面时(CentOS(2.6.18-274**)),按字母e键,进入GRUB编辑状态。

image

3.把光标移动到kernel那一行,再敲入“e”进入命令行编辑,在kernel 一行的最后加上空格single,回车敲入“b”,启动系统,即进入单用户模式,

image

4、修改密码

image

二、通过grub.conf配置文件,改变引导菜单属性
1、给引导菜单更换背景图片
yum install ImageMagick
win.jgpconvert -resize 640x480 -colors 14 win.jpg win.xpm

image

gzip win.xpm

image

vim /boot/grub/grub.confsplashimage=(hd0,0)/boot/grub/back.xpm.gz

image
image

2、给单用户模式和系统引导添加密码
单用户模式密码   title之上
 password --md5
 系统引导密码    title之下
 password --md5

image

生成密码
 grub-md5-crypt 
 openssl passwd -l -salt "abcd"
单用户模式密码

image

系统引导密码

image

3、kernel内核参数更改
添加loop设备
    max_loop=20    增加
关闭启动中的图形界面
    rhgb quiet    删除
禁用selinux    selinux=0     增加

image

image

4、开机启动grub界面,可编辑kernel菜单
三、自制linux系统
1、分区并创建文件系统
fdisk/dev/sdb
分两个必要的分区/dev/sdb1对应/boot /dev/sdb2对应根/
     # mkfs.ext4 /dev/sdb1
# mkfs.ext4 /dev/sdb2

image

2、挂载boot
# mkdir /media/boot
# mount /dev/sdb1 /media/boot 
3、安装grub
grub-install --root-directory=/media/  /dev/sdb

image

4、建立grub.conf:
vim /media/boot/grub/grub.confdefault=0timeout=0title lvasu
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-642.el6.x86_64.img

image

5、恢复内核和initramfs文件
cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /media/boot/
cp /boot/initramfs-2.6.32-642.el6.x86_64.img /media/boot

image

6、创建一级目录
mkdir /media/sysroot
mount /dev/sdb2 /media/sysroot
mkdir –pv /media/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}

image

7、vim /media/sysroot/etc/fstab
/dev/sda1 /boot ext4 defaults 1 1/dev/sda2  /    ext4 defaults 1 2
  8、复制bash和相关库文件     
9、复制相关命令及相关库文件
如:ls,cat,vim,df,mount,umount,rpm,reboot,hostname,halt,poweroff,quit

image

完成

image

四、内核编译
1、tar xf linux-3.2.82.tar.xz -C /usr/src2、cd /usr/src3、ln -sv linux-3.2.82 linux4、cd /usr/src/linux

image

5、cp /boot/config-$(uname -r) ./.config6、make menuconfig

image

7、make -j 28、make modules_install9、make install

image

10、reboot

imageimage

原创文章,作者:lvasu,如若转载,请注明出处:http://www.178linux.com/49152

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-26 10:14

    知识点分类的很好,但是图片是从别的网站上来的,我们网站是会屏蔽掉的,所以需要你重新上传