开发者社区> 技术小胖子> 正文

11、系统初始化流程、拯救模式 学习笔记

简介:
+关注继续查看

POST --> BIOS (Boot Sequence) --> MBR(bootloader) --> Kernel (CentOS5: initrd, CentOS6: initramfs) --> /sbin/init (CentOS5:/etc/inittab, CentOS6: /etc/inittab, /etc/init/*.conf)


/etc/inittab:

CentOS5: 每一行定义一个操作

CentOS6: upstart 脚本

运行级别:

    0-6: 7个级别

0:关机

1: 单用户模式, 直接以root用户登录

2:多用户模式,不支持NFS文件系统

3:完全多用户模式,文本模式

4:预留级别

5:完全多用户模式,图形模式

6:重启


/sbin/init的配置文件:

每行定义一种操作

id:runlevels:action:process

id 操作的ID

runlevels 在哪些级别下执行此操作

action 动作

    initdefault 设置默认运行级别,无需定义操作 id:3:initdefault:

            sysinit 指定系统初始化脚本 si::sysinit:/etc/rc.d/rc.sysinit

            wait 等待系统切换至此级别时运行一次

            ctrlaltdel 定义组合键被按下时要运行的命令

            respawn 当指定操作进程被关闭时立即再启动一次    tty1:2345:respawn:/sbin/mingetty tty1

        process 操作


/sbin/init要完成的任务:

设定默认运行级别

指定系统运行的初始化脚本

启动指定级别下要启动的服务,并关闭需要停止的服务

/etc/init.d/ 系统服务脚本所在目录  

/etc/rc.d/rcN.d  (0-6) 根据系统服务脚本中的chkconfig配置,启动或关闭不同运行级别下需的服务

    S##         指定运行级别下需要启动的服务

    K## 指定运行级别下需要停止的服务

定义CtrlAltDel组合键的动作

初始化字符终端:

终端:对应的是设备

/dev/tty#, /dev/ttyS#, /dev/console, /dev/pts/#

调用:login-->/etc/issue

启动图形终端:

X-Window, 桌面管理器


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

设置主机名

打印文本欢迎信息

激活SELinux和udev

激活swap

挂载/etc/fstab定义的本地文件系统

检测根文件系统并对其以读写方式重新挂载

设置系统时钟

装载键盘映射

根据/etc/sysctl.conf设置内核参数

激活RAID和LVM设备

清理操作

MBR: 

    bootloader: 程序

LILO:LInux LOader

    不能引导位于1024 Cylinder以后的分区中的OS;

GRUB: GRand Unified Bootloader

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

    1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展

            2nd stage: 位于boot基本磁盘分区中,GRUB的引导程序

    boot分区大小:

    CentOS5: 100M

    CentOS6: 200M

                    /boot/grub/

    tage2: 配置文件

    grub.conf


Grub的功能:

1、选择要启动的内核或系统;

能隐藏选择界面

2、交互式接口

e: 编辑模式

3、基于密码保护

启用内核映像;

定义在相应的title下

传递参数(进入编辑模式)

定义在全局段中

[root@PXE init.d]# grub-md5-crypt

Password: 

Retype password: 

$1$fkAZP/$KZzg7EFMwUAlTbkamvmEz1

[root@PXE init.d]# 

[root@PXE init.d]# vim /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda3

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

password --md5 $1$fkAZP/$KZzg7EFMwUAlTbkamvmEz1

hiddenmenu

title CentOS (2.6.32-431.el6.x86_64)

password --md5 $1$fkAZP/$KZzg7EFMwUAlTbkamvmEz1

    root (hd0,0)

    kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=723934e6-0338-466e-a6d1-5f5db96b3728 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM

rd_NO_DM rhgb quiet

    initrd /initramfs-2.6.32-431.el6.x86_64.img

grub接口:

title: 操作系统或内核的标题

root: 设定内核文件所在的分区为grub的根

kernel: 定义要使用的内核文件,后面可附加传递给内核的启动参数

initrd: 指定为内核提供额外驱动等功能的ram disk或ram fs文件


init的级别1的表示方式:

1, s, single, S

单用户模式几乎不会启动任何服务,且不需要用户登录;但是会执行/etc/rc.d/rc.sysinit脚本;

如是连/etc/rc.d/rc.sysinit文件也不加载,则传递 emergency


运行级别的切换:

# init [0-6]


查看运行级别:

# runlevel

# who -r


grub.conf配置文件语法:

default=#: 指定默认启动的内核或OS;

timeout=#: 等待用户选择要启动的内核或OS的时长,单位为秒;

splashimage=/path/to/splashimage_file: 指定使用的背景图片

hiddenmenu: 隐藏菜单

title

root (hd0,0)

(Device, Part)

Device表示方式: 在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号 

Part表示方式:代表分区,从0开始编号

kernel

指定内核文件及传递给内核的参数

参数:ro root=/path/to/DEVICE quiet

initrd

文件:通常为cpio归档,并使用gzip压缩;通常以.img作为文件名后缀;


grub配置文件丢失:

mv /boot/grub/grub.conf /boot/grub/grub.conf.back

grub> root(hd0,0)

grub> kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/sda3

grub> initrd /initramfs-2.6.32-431.el6.x86_64.img

grub> boot



bootloader损坏:

dd if=/dev/zero of=/dev/sda bs=100 count=1

sync

此时需要挂载光盘进入紧急救援模式修复

Rescue installed system

Choose a Language OK

Keyboard Type OK

Setup Networking No

Rescue Continue

Rescue OK

Rescue OK

shell Start shell OK


第一种方式:

# grub

grub> root (hd#,#)

grub> setup (hd#)

grub> quit


第二种方式:

# chroot /mnt/sysimage

# grub-install --root-directory=/  /dev/sda

# exit

# reboot



启动流程:POST --> BIOS(boot sequence) --> GRUB(bootloader (stage1: mbr; stage2: grub目录中)) --> kernel (initrd) --> SHELL


HOST:宿主机,

Target: 目标机


基于HOST制作一个简单的可启动的Linux:

1、给目标磁盘分区、格式化(100M、1G )

两个:

宿主机上:/dev/sdb1, /dev/sdb2

/dev/sdb1 挂载至 /mnt/boot

/dev/sdb2 挂载至 /mnt/sysroot


2、安装grub至目标磁盘

# grub-install --root-directory=/mnt /dev/sdb


3、复制内核和initrd文件

# cp /boot/vmlinuz-VERSION  /mnt/boot/vmlinuz

# cp /boot/initramfs-VERSION.img  /mnt/boot/initramfs.img


4、创建目标主机的根文件系统

# mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}


5、移植bash等命令至目标主机的根文件系统,命令移植完需要sync同步


6、为grub提供配置文件

# vim /mnt/boot/grub/grub.conf

default=0

timeout=5

title MageEdu Little Linux

root (hd0,0)

kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash

initrd /initramfs.img


7、新建机器挂载硬盘测试


Linux的内核:单内核,支持动态装载和卸载

模块:/lib/modules/KERNEL_VERSION/


查看PCI设备的命令:

# lspci 


查看当前内核装载的模块:

# lsmod


查看某模块的详细信息:

# modinfo MOD_NAME


动态卸载某模块:

# modprobe -r MOD_NAME

# rmmod MOD_NAME


动态装载某模块:

# modprobe MOD_NAME

# insmod /path/to/module_file



/sbin/init

/etc/inittab, 

/etc/rc.d/rc.sysinit

设定默认运行级别

指定系统运行的初始化脚本

启动指定级别下要启动的服务,并关闭需要停止的服务

/etc/init.d/ 系统服务脚本所在目录  

/etc/rc.d/rcN.d  (0-6) 根据系统服务脚本中的chkconfig配置,启动或关闭不同运行级别下需的服务

    S##         指定运行级别下需要启动的服务

    K## 指定运行级别下需要停止的服务

# chkconfig --add SERVICE_NAME 添加服务到chkconfig

# chkconfig --del SERVICE_NAME 将服务移除chkconfig

# chkconfig SERVICE_NAME {on|off}         # chkconfig --level LEVEL SERVICE_NAME {on|off} 


服务脚本示例:


#!/bin/bash

#

# description: Test Service Script

# chkconfig: 2345 88 77

#


. /etc/init.d/functions


lockFile=/var/lock/subsys/tservice


start() {

if [ -e $lockFile ]; then

echo -ne "tservice is already started."

failure

echo 

return 5

else

echo -ne "Start tservice finished..."

touch $lockFile

[ $? -eq 0 ] && success

echo 

return 0

fi

}


stop() {

if [ -e $lockFile ]; then

rm -f $lockFile

echo -ne "Stop tservice finished..."

success

echo

return 0

else

echo -ne "tservice is not running..."

failure

echo

return 6

fi

}


restart() {

stop

start

}


status() {

if [ -e $lockFile ]; then

echo "tservice is running..."

else

echo "tservice is stopped..."

fi

}


usage() {

echo "Usage: tservice {start|stop|restart|status}"

}


case $1 in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;

*)

usage

exit 7

;;

esac





      本文转自开源殿堂 51CTO博客,原文链接:http://blog.51cto.com/kaiyuandiantang/1948933,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
流程控制 - PHP手册笔记
原文:流程控制 - PHP手册笔记 脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用。 elseif elseif和else if的行为完全一样,如果用冒号来定义if/elseif条件,那就不能用两个单词的else if,否则PHP会产生解析错误。
1129 0
yum管理包流程_学习笔记
时间:2017.12.03作者:李强参考:man,info,magedu讲义,万能的internet声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
669 0
大话存储系列7——文件系统和IO处理流程
1、文件系统 在早期的计算机系统中,每个程序都必须自己管理磁盘,在磁盘中放自己的数据,程序需要直接和磁盘控制器打交道。有多少个程序要利用磁盘,就有多少个磁盘交互启动接口。
1125 0
设计模式快速学习(二)抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
833 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础
SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础 1. SAS系统简介 1.1 SAS是先编译后执行的语言,data步标志着编译的开始。 数据指针:当前内存缓存区,输入数据所在位置。 PDV:Program Data Vector,在DATA步中所有涉及的变量被编程当前向量的一部分。 2. SAS编程基础 2.1 SAS逻
1562 0
CRM系统主要业务流程思维导图
【CRM五策略】           对客户进行分类,不是根据规模,而是根据和你的关系,越细腻越好;           不定期更新客户资料,信息越全面越好;           主动对客户进行关怀,拿出你的诚意和关爱;           定...
1482 0
磁盘及文件系统管理_学习笔记
时间:2017.12.01作者:李强参考:man,info,magedu讲义,神奇的internet声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
916 0
解决机器学习问题的一般流程
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 本期将针对机器学习的新朋友,为大家讲解解决机器学习问题的一般思路: 很多博客、教程中都对机器学习、深度学习的具体方法有很详细的讲解,但却很少有人对机器学习问题的流程进行总结,而了解解决机器学习问题的一般流程对于新手而言还是非常必要的,所以本文是非常适合机器学习入门者的一篇文章,它会让你对机器学习的整个流程有很好的理解。
1366 0
21117
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载