admin

Linux学习笔记(8)
#今天刚好看到鸟哥的私房菜第20章的linux启动流程#我的PC上装的ubuntu 16.04 LTS ,服务器上...
扫描右侧二维码阅读全文
23
2018/06

Linux学习笔记(8)

#今天刚好看到鸟哥的私房菜第20章的linux启动流程

#我的PC上装的ubuntu 16.04 LTS ,服务器上装的是Centos 

#那么我这里就结合二者起来说说

 

今天我用df -h 命令查看了一下我的Ubuntu 下的挂载情况,发现只有一个/ 根目录,而/home /usr 等都没有,这大概和我当时取默认值安装有关把 然后我发现/是挂载在/sda 上的 顿时明白这里的/sda 是机械硬盘SATA(IDE接口的是hda),奇怪的是我的/boot 挂载在固态硬盘上,难道是因为我当时选的是与windows boot manger 共存吗?莫非是ubuntu 的boot sector装到了固态上把windows的boot sector 覆盖?可是这样怎么进入windows?

然后我就翻到鸟哥的第20章,大概看看了,总结如下:

PC启动的顺序:

首先是加载BIOS

再找到由BIOS读到的第一个可启动设备的MBR区(MBR区很小,400多k)

然后加载MBR区中的boot lodaer

boot loader 把对应的内核加载到内存中,由此可知每一个操作系统需要有自己独立的boot loader

但是每一个启动设备,也就是每一块硬盘只有一个MBR区,这就意味着当我们只有一块硬盘时最好先装windows再装ubuntu,这样ubuntu的boot loader会覆盖原先在MBR中的windows的boot loader,然后用ubuntu 引导windows

为什么ubuntu能引导windows?(以下是单硬盘情况)

ubuntu在分配时,boot sector(启动引导扇区) 和MBR 中都会有一个boot loader,而windows也有自己的一个boot loader ,然后系统加载MBR中ubuntu的boot loader的时候(windows 的boot loader被覆盖) ,该boot loader可以指向windows 引导扇区中的boot loader,也可以进入ubuntu 引导扇区中的boot loader,当然也可以直接进入ubuntu

 

接下来谈谈启动过程中加载的一些文件

打开有些配置文件我们有时候会发现所有的东西都被注释掉了,这种情况一般只是为了兼容

Centos

开机先执行init进程,init进程主要参考/etc/inittab中的内容

目录/etc/rc.d比较重要,其中有rc.sysinit,rc1,rc2,rc3 等文件,根据不同的run level(假设现在的run level 为5) 那么就会由/etc/rc.d/rc5取得/etc/rc5.d这个目录(/etc/rc5.d中大多为软链接文件,以S(K)+数字开头,数字代表的是执行的优先顺序(一般rc.local作为自定义的是最后执行),然后由/etc/rc5.d 提供指向去加载/etc/init.d 中对应的服务脚本

Ubuntu

Ubuntu 中没有/etc/inittab 配置文件,发挥对应作用的是目录/etc.init

与centos相对应地,在init时Ubuntu 会从/etc/init.d/rS中取得/etc/rc5.d,后续的操作大概和centos相似

具体可以参考博客具体可以参考https://blog.csdn.net/heqiyu34/article/details/18793857

值得注意的是,以.d命名的一般是一个目录,比如这里的init.d

各个版本的init其实大同小异 殊途同归

内核与内核模块
内核:/boot/vmlinuz 或 /boot/vmlinuz-version
内核源码: /usr/src/linux 或 /usr/src/kernels
内核模块: /lib/modules/version/kernel

内核的模块化,模块可包含一些硬件的驱动程序等,可以是由厂商提供,也可以是linux本身就支持

boot-loader grub

 

ubuntu中的grub是在/boot/grub目录中的一个grub.cfg文件

在centos 中是 /boot/grub/menu.lst (服务器上的centos系统没有安装grub menu list)
该文件中:
default: 默认启动选项(可以修改这个来默认进入windows)
timeout 等待的时间,
hiddenmenu 启动时是否显示菜单

有需要的时候我们可以为grub中的菜单选项加上密码

先用grub-md5-crypt再输入密码得到加密后的md5密码,然后复制到menu.lst 下的centos选项下 password --md5 ...

但是用户在grub下按e进入edit可以破解这个方式,想要不被破解可以把上面这一行放到顶部,然后在centos下加上一行lock

忘记root密码怎么办?

有人可能会认为忘记root密码只能重装,实则不然

解决方法:

进入grub菜单,点e进入详细设置,把尾部改为single 大概如下

grub eidt > kernel ............ rhgb quiet single

按下enter + [b] 启动就可以进入单用户维护模式

在此模式下系统会以root的权限给你提供一个shell ,此时用passwd 修改root密码即可,然后用init 5进入 X 窗口界面即可(顺便一提,init 0表示关机 init 6 表示重启)

原理:

强制内核进入runlevel 1,默认不需要密码可以取得一个root的shell

如果init配置文件发生错误(相当严重了),那么上述方法就会失效,因为run leve1也需要先去读取/etc/inittab 中的对应配置,但这样也不是误解的,我们只需告诉内核不要执行init即可!,改为调用bash

解决方法:

在上面那一行把single 改为init=/bin/bash

这个时候根目录被挂载为只读,其它目录并未挂载

然后用mount -o remout,rw / 把根目录重新挂载为可读写,

用mount -a 参考/etc/fstab的内容重新挂载文件系统,此时就又可以启动救援工作修改root的密码了!

 

Last modification:March 13th, 2019 at 07:06 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment