您的位置:首页 > 运维架构 > Linux

小c学Linux(12)--centos 6.5 grub引导详解

2018-04-02 15:46 483 查看
系统运行级别:

0-6:7个级别
0:关机
1:单用户模式,直接以root用户登录
2:多用户模式,不支持NFS文件系统
3:完全多用户模式,文本模式,不启动图形界面
4:预留级别
5:完全多用户模式,图形模式
6:重启


bootloader

grub简介

MBR里的446个字节的引导程序。

grub:

1. 1st stage 位于MBR中,为了引导2nd stage

2. 1.5 stage 位于boot基本磁盘分区中,识别内核文件所在分区

3. 2nd stage 位于boot基本磁盘分区中,grub真正的引导程序

grub三大功能:

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


选择要启动的内核或系统

hiddenmenu:隐藏选择界面(默认)

交互式接口

e:进入编辑模式

设置密码保护

进入选择内核界面需要密码

系统启动需要密码

一般用户的电脑装完机后是没有设置grub密码保护的,我们可以通过单用户模式,直接以root用户登陆,破解管理员密码。开机按任意键进入grub界面



e
键进入编辑模式



编辑kernel,在后面空格+1



保存按
b
以root用户直接登录

passwd
修改root用户密码



密码修改成功。
init 3
修改运行级别,系统重启,用修改的密码登陆,成功。

所以当我们忘记root密码,只要没有设置grub还是能够通过这种方式找回来的。

grub设置密码保护



将得到的
md5码
写入grub.conf配置文件。

全局下
password --md5 md5码


titile下
password --md5 md5码


grub配置文件

/etc/boot/grub/grub.conf




default=#:指定默认启动的内核或os
timeout=#:等待用户选择要启动的内核或os的时长,单位为秒钟
splashimage=   :指定使用的背景图片
hiddenmenu:隐藏菜单
password --md5 md5码 设置内核界面的密码
title. 操作系统或内核的标题
root(hd0,0)设定内核文件所在的分区为grub的根
(Device Part)
Device(磁盘)表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始
part表示方式:代表分区,从0开始编号
kernel.  定义要使用的文件,后面可以附加传递给内核的启动参数
指定内核文件及传递给内核的参数
参数:ro root=设备文件,quiet 静默模式输出
initrd. 指定为内核提供额外驱动等功能的ram disk或ram fs文件
文件:通常为cpio归档,并使用gzip压缩,通常以.img作为文件后缀
password --md5 md5码 设置系统进入密码


模拟grub损坏

破坏bootloader
dd if=/dev/zero of=/dev/sda bs=100 count=1
,**bootloader**446字节,100<446

使用光盘镜像修复,进入bios将光盘作为启动项

chroot /mnt/sysimage/
将系统根挂载至/mnt/sysimage下

grub
进入grub命令行

root (hd0,0) setup (hd0)
如果提示
root command not found


5没有成功,则:
grub-install --root-directory=/ /dev/sda


–root-directory=/ : 这是/boot的父目录,也就是系统根目录

sysn同步到磁盘

exit保存退出

reboot重新启动

ok

利用grub给第二块磁盘制作一个简单可启动的linux

fdisk -l /dev/sd[a-z]
查看一下有几块磁盘

fdisk /dev/sdb
分区

mke2fs -t ext4 /dev/sdb1,sdb2


mount /dev/sdb1 /mnt/boot


mount /dev/sdb2 /mnt/sysroot


创建grub:
grub-install --root-directory=/mnt /dev/sdb


创建根文件系统:
mkdir -pv  /mnt/sysroot/{etc/rc.d,dev,var,lib,lib64,bin sbin,sys,tmp}


复制bash,ls,mkdir命令到制作的系统上/mnt/sysroot

#!/bin/bash
#
#DESCRIPTION : MOVE COMMAND
#VERSION : 1.0
#author : xiaoc

copy(){
for i in $*;do
dir=`dirname $i`
[ -d /mnt/sysroot$dir ] || mkdir -p /mnt/sysroot$dir
[ -f /mnt/sysroot$i ] || cp $i /mnt/sysroot$dir/
done
}

main(){
ldd_path=`which ldd`
while true;do
read -p "Enter a command : " command
[[ "$command" == "quit" ]] && echo "quit" && exit 0
command_path=`which --skip-alias $command 2> /dev/null`
if [[ -x $command_path ]];then
copy `$ldd_path $command_path | grep -o "/[^[:space:]]\{1,\}"`
copy $command_path
else
echo "not a command"
fi
done
}
main


复制linux内核和initrd到/mnt/boot下

cp /boot/vmlinuz-Version  /mnt/boot/vmlinuz


cp /boot/initramfs-Version.img /mnt/boot/iniyramfs.img


链接一下bash
ln -sv bash sh
因为很多内置脚本都是访问sh

配置grub.conf文件,用制作的sdb重启,完成

vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title
root(hd0,0)
kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
initramfs /initramfs


系统初始化脚本:`/etc/rc.d/rc.sysinit

设置主机名:
打印文本欢迎信息
激活SELinux和udev
激活swap
挂载/etc/fstab定义的本地文件系统
实现检查根文件系统并对其以读写重新挂载
设置系统时钟
装载键盘映射
根据/etc/sysctl.conf设置内核参数
激活RAID和LVM设备
清理操作


以上仅在centos 6.5上可行….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: