Centos6启动

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) -->
rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/.conf) --> 设定默认
运行级别 --> 系统初始化脚本 rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端

1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息---grub_stage1
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备grub_stage1.5,2
4.核心执行init程序,并获取默认的运行信息  /etc/inittab
5.init程序执行/etc/rc.d/rc.sysinit文件 系统初始化脚本
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local,默认的,自己编写的服务脚本也可以放在这边
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机

grub

grub0.97:grub legacy
grub legacy:
stage1: mbr
stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)
grub2.x:grub2
识别硬盘设备
(hd#,#)
hd#: 磁盘编号,用数字表示;从0开始编号
#: 分区编号,用数字表示; 从0开始编号
(hd0,0) 第一块硬盘,第一个分区
手动在grub命令行接口启动系统
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot

配置文件:/boot/grub/grub.conf

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

init

正常级别下,最后启动一个服务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在指定运行级别脚本后运行

Centos7

和centos6的开机启动变化不大.grub阶段的配置文件有了一些变化

UEFi或BIOS初始化,运行POST开机自检
选择启动设备
引导装载程序:grub2
加载装载程序的配置文件:/boot/grub2/grub.cfg
加载initramfs驱动模块:/boot/initramfs-3.10.0-693.el7.x86_64.img
加载内核:/boot/vmlinuz-3.10.0-693.el7.x86_64
内核初始化:systemd
执行initrd.target所有单元,包括挂载/etc/fstab
从initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
如果启动图形界面systemd执行graphical需要的服务

grub

/etc/default/grub:grub模板配置文件

GRUB_TIMEOUT=5  #grub菜单选项超时时间
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved  #grub菜单默认选择的title
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"  #向内核传递的cmdline参数
GRUB_DISABLE_RECOVERY="true

/boot/grub2/grub.cfg 配置文件可有以下命令生成

grub2-mkconfig -o /boot/grub2/grub.cfg 

实验1、破解root口令,并为grub设置保护功能

1).进入单用户模式 在 GRUB 启动菜单里使用 “e” 操作按键进入 CentOS 的启动菜单向界面 ,移动光标至“kernel”配置项一行,在末尾加入single,ctrl+x,然后进入bash#页面
2).进入单用户模式后,不需要输入用户名和口令,系统启动完成后将直接获得管理员 root 的权限,控制台的提示符为“#”,需要以rw方式挂载/ mount -o remount rw /
3).输入passwd命令,键入两次新密码即可完成更改。破解root口令
4).vi /boot/grub/grub.conf
password --md5 passwd #grub-crypt 键入两次新密码即可完成生成MD5加密密码passwd,下次系统进入grub引导需要密码才能进入

实验2、破坏本机grub stage1,而后在救援模式下修复之

1).reboot后按下ESC,即可通过光盘引导,进入救援环境mbr446字节被破坏,备份数据到/data/mbr,采用dd命令
2)dd if=/data/mbr of=/dev/sda1 bs=1 count=446

实验3、删除vmlinuz和initramfs文件后无法启动,两种方法恢复之

reboot后按下ESC,即可通过光盘引导,进入救援环境

mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
chroot /mnt/sysimage   #切换/
mkinitrd /boot/initramfs-`uname -r`.img `uname -r `
cp /mnt/cdrom/isolinux/vmlinuz  /boot/vmlinuz-`uname -r`
sync
sync #写入磁盘

方法二、

mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.e16.x86_64.rpm --root=/mnt/sysimage/ --force
ls /mnt/sysimage/boot

实验4、增加新硬盘,在其上制作能单独运行kernel和bash的系统

1.前期准备及环境
VM14,Centos6.9
一块新虚拟硬盘sdb,一个cmd_copy脚本
为系统加一块虚拟硬盘,20G,如果是在虚拟机开机加的硬盘需要扫描一下硬盘:

echo '- - -' > /sys/class/scsi_host/host2/scan 
#!/bin/bash
bincopy(){
    if which $1 &> /dev/null ;then
        local bin_cmd=`which --skip-alias $1`
        local dir_cmd=`dirname $bin_cmd `
        [ -d ${chroot}${dir_cmd} ] || mkdir -pv ${chroot}${dir_cmd}
        [ -f ${chroot}${bin_cmd} ] || { cp $bin_cmd ${chroot}${dir_cmd}; action "cp $bin_cmd ${chroot}${dir_cmd}" ; }
        return 0
    else
        echo "$1 is not found"
        return 1
    fi
}
libcopy(){
    ldd $(which --skip-alias $1)|grep -Eo "/[^[:space:]]+" |while read line ;do
        local lib_dir=`dirname $line`
        [ -d ${chroot}${lib_dir} ] || mkdir -pv ${chroot}${lib_dir}
        [ -f ${chroot}${line} ] || { cp $line ${chroot}${lib_dir}; action "cp $line ${chroot}${lib_dir}" ; }
    done
}
source /etc/init.d/functions
chroot=/mnt/sysroot
[ -d $chroot ] || mkdir -pv $chroot

while : ;do
    read -p "please input a command you want to copy:" cmd
    [[ $cmd =~ ^q(uit)?$ ]] && break
    bincopy $cmd 
    if [ $? -eq 0 ]; then
    libcopy $cmd 
    fi
done

2.为/dev/sdb分区,创建相应的内核文件,根文件

fdisk /dev/sdb
mkfs.ext4 /dev/sdb1  #/dev/sdb1对应/boot /dev/sdb2对应根 /
mkfs.ext4 /dev/sdb2
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
grub-install --root-directory=/mnt /dev/sdb
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
cat >> /mnt/boot/grub.conf <

3.在新的虚拟机上实现定制的简单linux系统
添加/dev/sdb对应的虚拟硬盘文件,到新的centos系统上,开机即可完成启动
加载网卡模块

insmod /lib/e1000.ko
ifconfig etth0 192.168.1.9/24

LINUX系统开启故障排错及linux-4.16.8内核编译安装,虚拟机实验(非生产环境)_第1张图片
LINUX系统开启故障排错及linux-4.16.8内核编译安装,虚拟机实验(非生产环境)_第2张图片
ps:博主开始用的是一张快照虚拟硬盘,搞了半天都没成功,在新的机器上老是报错找不到文件error:15 file not found,换了一张新硬盘瞬间搞定。

实验5、在U盘上定制linux,使其可启动系统,并具有网络功能

实验6、删除/etc/fstab和/boot目录的所有文件,并恢复之

1).reboot后按下ESC,即可通过光盘引导,进入救援环境
fdisk -l  #查找对应的根在那个硬盘分区
mkdir /mnt/rsroot
mount /dev/sda2 /mnt/rsroot
cat >> /mnt/rsroot/etc/fstab < /boot/grub.conf
default=0
timmeout=5
title linux
    root(hd0,0)
    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda3
    initrd /initramfs-2.6.32-696.el6.x86_64.img

ps:/boot/grub的配置文件:除了grub.conf ,splash.xpm.gz,系统干净的情况下,其他文件可以不存在;2.经过grub-install 后,/boot/grub所有文件都和启动相关,不可破坏

实验7、编译安装kernel,启用支持ntfs文件系统功能

实验环境:VM14,Centos7.5-minial.
下载 linux-4.16.8.tar.xz

tar -xvf linux-4.16.8.tar.xz
cd linux-4.16.8
cp /boot/config-3.10.0-862.el7.x86_64 .config
yum gruopinstall "Development Tools"
yum install ncurses bc openssl-devl -y
make menuinstall  #报错的可以安装一下,yum install ncurses ,基于curses的文本窗口 ,第一次编译安装的时候,yum gruopinstall "Development Tools"
#  General setup  --->  Local version - append to kernel release ---> enter,修改内核版本号相关参数
#  File systems  --->   DOS/FAT/NT Filesystems  --->  NTFS file system support ,修改linux可以支持NTFS文件系统
#  exti 保存
make -j [#]  ##代表cpu数量,越多编译速度越快,最后大概生成10-11G文件,全部编译
#报错penssl/bio.h  openssl/opensslv.h ,yum -y install openssl-devel。
{
#只编译某子目录中的相关代码
cd /usr/src/linux
#make dir/
#只编译一个特定的模块
cd /usr/src/linux
#make dir/file.ko
make drivers/net/ethernet/intel/e1000/e1000.ko
}
make modules_install
#cp 相关模块到/lib/mouduls
make install
#安装bzImage为/boot/vmlinuz-VERSION-RELEASE
#生成initramfs文件
#编辑grub的配置文件
make clean #清理大多数编译生成的文件,但会保留config文件等
make mrproper #:清理所有编译生成的文件、config及某些备份文件
make distclean #mrproper、patches以及编辑器备份文件
reboot #开始新内核之旅吧
#下面是设置新内核默认启动选项
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg  
------>
    0 : CentOS Linux (4.16.8-1.0-honglinux) 7 (Core)
    1 : CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)
    2 : CentOS Linux (0-rescue-dbd0937f568d41af9d5e7a4d63e62a1e) 7 (Core)
grub2-set-default 0
grub2-editenv list   -----> saved_entry=0
reboot