浅谈centos启动那点事儿

linux系统启动首先从BIOS开始检测硬件信息=》开始启动引导程序。读取MBR(磁盘上第0磁道第一个扇区)也就是Master Boot Record 即主引导记录。MBR记录了预启动信息和分区表信息。然后将grub(作用:设定内核映象在磁盘分区的位置)信息复制到内存中。为启动内核做准备。===》加载内核。内核初始化产生一个PID为1的init进程。

由于内核运行起来是毫无用途的,需要一个系统能够定义,管理和控制init进程的行为,并负责组织和运行完成初始化的工作,从而让系统进入一个用户设定的运行模式中,这个系统就是init系统。

init(为英语:initialization的简写)是 unix和 类Unix 系统中用来产生其它所有进程的程序。它以守护进程的方式存在,其进程号为1。Linux系统在开机时加载Linux内核后,便由Linux内核加载init程序,由init程序完成余下的开机过程。

init 的运行方式历经: sysvinit  , upstart ,  systemd

早期的linux系统的init运行方式兼容UNIX  system V(Unix系统的一个版本)下init运行方式。

System V 下init的运行方式:

System V init 检查 ‘/etc/inittab‘ 文件中是否含有 ‘initdefault‘ 项。 这告诉 init 系统是否有一个默认的运行。System V init  描述了 8中状态  。0-6 和S 或s .linux 设置了6各级别:#cat /etc/inittab

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

unix system v  默认是 3级别启动。 linux服务器大多版本默认是3级别。而桌面版本一般为5.(图形化界面)。如何查看 :   $ runlevel  或  $ who -r.

Sysvinit 的优点是概念简单。Service 开发人员只需要编写启动和停止脚本,概念非常清楚;将 service 添加/删除到某个 runlevel 时,只需要执行一些创建/删除软连接文件的基本操作;这些都不需要学习额外的知识或特殊的定义语法(UpStart 和 Systemd 都需要用户学习新的定义系统初始化行为的语言)。

其次,sysvinit 的另一个重要优点是确定的执行顺序:脚本严格按照启动数字的大小顺序执行,一个执行完毕再执行下一个,这非常有益于错误排查。UpStart 和 systemd 支持并发启动,导致没有人可以确定地了解具体的启动顺序,排错不易。

2006年的时候Ubuntu 打算把系统用在笔记本上。最大的困境是:sysvinit 对移动设备(USB 设备的设备)的热插拔支持不够。于是开发了upstart 基于事件机制.比如 U 盘插入 USB 接口后,udev 得到内核通知,发现该设备,这就是一个新的事件。UpStart 在感知到该事件之后触发相应的等待任务,比如处理/etc/fstab 中存在的挂载点。采用这种事件驱动的模式,upstart 完美地解决了即插即用设备带来的新问题。UpStart采用了异步方式 可以:更快地启动系统;当新硬件被发现时动态启动服务;硬件被拔除时动态停止服务。这些特点使得 UpStart 可以很好地应用在桌面或者便携式系统中,处理这些系统中的动态硬件插拔特性。但是UPstart没有完全摆脱 runlevel机制。只是在兼容的基础上相应的优化了runlevel机制。

为了减少系统启动时间,systemd 的目标是:尽可能启动更少的进程,尽可能将更多进程并行启动,减少了启动进程间的依赖。没有必要的进程可以在需要使用的时候才启动。此外systemd开创了新的管理体系。以前运行级别(runlevel)的概念被新的运行目标(target)所取代。target的命名体系类似于“multi-user.target"和原来的运行级别3(runlevel 3)相对应。在centos7中由于使用了新systemd管理机制。不再使用runlevel的概念,所以/etc/inittab不在被系统使用。

centos7下systemd 管理体系理默认的target通过软链接来实现的。

(由于版面的问题  把  inode值  属主属组和日期  删除)

[[email protected] ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx.    /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

如果想修改运行目标。只需要把这个软链接删除。软链接到新的运行目标。

# rm -rf /etc/systemd/system/default.target

# ln -s /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

我们来查看下centos7下 /etc/inittab文件

$ cat /etc/inittab
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses ‘targets‘ instead of runlevels. By default, there are two main target
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target

很明确定义了新的target的位置:/usr/lib/systemd/system/ctrl-alt-del.target

同样查看下: (由于版面的问题  把  inode值  属主属组和日期  删除)

# ll /usr/lib/systemd/system/runlevel*
lrwxrwxrwx   /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx   /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx   /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx   /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx   /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx  /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx   /usr/lib/systemd/system/runlevel6.target -> reboot.target

此外,systemd 管理体系还引入了 命令行工具systemctl。 systemctl  可以看作是service和chkconfig

得组合体。不过不用担心。就的service命令在centos7下依旧可以使用,不过,它会重定向所有命令到新的systemctl 工具。

几个例子:

(sysvint)

#service  network  start |stop |status

#chkconfig httpd on

( systemclt)

# systemctl start|stop|status network.service

#systemctl  enable httpd.service

目前: Ubuntu 15.04及后续版本在默认的init上都安装了 systemd.

介绍完主流init系统后,开始继续启动系统。

BIOS - mbr  -grub  -内核 - /etc/inittab- /etc/rc.d/rc.sysinit -启动内核模块/etc/modules.conf-启动指定级别下的脚本rcx.d-执行/etc/rc.d/rc.local -/bin/login

虽然前面说了新的init系统的诸多好处:不过现在毕竟centos7的企业用户群体总体上不多。我们还是需要熟练掌握centos7一下的版本的启动。方便以后的管理。而且centos7 在命令层面上完全向下兼容。

梳理了,开机启动流程。可以来些小的应用。

比如:在/etc/rc.d/rc.local  里面挂载移动设备,添加个性化服务启动。如果,改阶段那个服务启动不了,导致。启动阻塞。是否可以先进入单用户模式,在/etc/rc.d/rc.local 文件下注释掉服务。待开机后在测试,修复呢?

最主要的是。熟悉了开机启动后。可以根据开机的错误信息。排查是那个阶段出现的错误。比如系统一起重启。查看  /etc/inittab 是否设置了runlevel6模式。开机脚本错误是不是应该单用户进入系统排查。/etc/rc.d/rcx.d下面的脚本,必要是可以把S开头的脚本先改名为K 。待系统启动后在恢复。

    时间: 2024-10-16 08:36:44

    浅谈centos启动那点事儿的相关文章

    浅谈Centos 7系统的Tomcat服务器

    一.tomcat的由来 名称由来:tomcat最初是由Sun的软件架构师詹姆斯 邓肯 戴维森开发的.后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会.由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名.因为他希望这种动物能够自己照顾自己,最终,他将其命名为tomcat(公猫). 1.Tomcat应用场景 Tomcat服务器是一个免费的开源web应用服务器,属于轻量级应用服务器,在中小型系统和并发用户不是

    浅谈传统企业网络运营那些事儿

    网络的变革.更新推动的速度很快,小到出门购物全方位在原基础的微信/支付宝等第三方支付等,随着微信公众号/微信小程序等"轻"级传播推广渠道的发展,以及客观的传统企业在互联网的冲击下,同样的价格比服务?比质量等问题.让网络运营这个岗位又"热"了一把,尤其是中小型企业/传统企业,对这一岗位人才的需求逐日增加. 网络运营分类 网络运营的分类也很杂,包括不限于用户运营.内容运营.数据运营.商家运营.产品运营.社区运营等等五花八门(以上在后文中简称类别运营),而现实生活中我们的

    浅谈AngularJS启动引导过程

    我们都知道AngularJS默认会执行app.js来启动整个angular项目,但你知道angular具体执行过程吗? 一.自动引导启动框架 例如我们有如下代码,我们想要完成一个指令功能: <html ng-app> <head> <script src="angular.min.js"></script> </head> <body> <div my-directive></div> &l

    浅谈linux启动流程

    第一阶段:POWER-ON 用户按下电源开关的那一瞬间,叫Power On阶段 .在这个阶段,BIOS检查电脑上一些硬件的状态及存储在CMOS中的设置.CMOS是南桥里面的一个特殊区块,用来让BIOS存储用户设置(进BIOS中看到的选项).北桥,南桥是主板上的芯片组,AMD的cpu不使用此种架构,北桥控制CPU和内存,南桥负责PCI,USB,VGA等外围设备. 第二阶段:BIOS加电自检 Power On阶段一开始,会进入BIOS的激活流程,BIOS是进本输入/输出系统的缩写,是在电脑没有访问磁

    浅谈centOS系统进程和计划任务

    一.1.程序和进程之间的关系程序属于静态代码:保存在硬盘,移动设备或者光盘上:需要用户执行安装可以使用进程运行需要通过cpu判断,然后进程保存在内存中:进程是动态执行代码程序运行会不断变化:一个父进程包含多个子进程2.查看静态进程信息PS常见的选项a显示当前终端所有进程u当前用户的进程信息x显示当前用户在所有终端中的进程-e查看内存中的进程-l长格式显示进程信息-f完整的进程信息1)查看用户所有终端的进程user:账户PID:进程的ID号%cpu:cpu占用信息%MEM:内存占用信息VSZ:虚拟

    浅谈Vue模板的那些事儿

    接触过vue的童鞋都知道,组件的模板一般都是在template选项内定义的,如 1 Vue.component('child-component', { 2 3 template: '<h3>我是闰土大叔</h3>' 4 5 }) 这个用法都是老生常谈了,今天来聊聊Vue的内联模板.看过vue文档的同学都知道,Vue提供了一个内联模板的功能,在使用组件时,给组件标签使用inline-template特性,组件就会把它的内容当做模板,而不是把它当成内容分发,这样做的好处是,让模板更灵

    浅谈“观察者模式”那点小事儿

    首先先了解一下什么是"观察者模式"? 所谓"观察者模式"又称"发布订阅模式",是以一对多的形式存在的:当一个物体方生变化的时候,会通知所有物体去接受这个事件.例如:当服务端发送消息的时候,会通知所有客户端的用户都会接受到这个消息. 官方一点来说:这是一种创建松散耦合代码的技术.它定义对象间 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.由主体和观察者组成,主体负责发布事件,同时观察者通过订阅这些事件来观察该主体

    浅谈导致电脑不能启动的系统文件

    笔者前不久碰到了一个问题,就是同学的电脑开不了机了.具体情况是按下开机键后电脑没啥反应,我曾今也遇到过这个问题,解决方案也好像很少. 1.一般情况下,电脑开机会自检,如果可以,它会提示系统启动不了,这时可以选择安全模式启动让电脑进行修复,或者恢复到上一次正常时的情况.2.如果故障依旧,那就建议重装操作系统. 笔者是一个喜欢研究的人.于是乎,就上网查询了一些关于电脑开机启动了哪些文件啊,读取了啥文件等等,以便对电脑有更深了解,将来保不准会用到的.得到下面一些基本资料:电脑启动会加载很多重要文件(

    Android安全开发之启动私有组件漏洞浅谈

    0x00 私有组件浅谈 android应用中,如果某个组件对外导出,那么这个组件就是一个攻击面.很有可能就存在很多问题,因为攻击者可以以各种方式对该组件进行测试攻击.但是开发者不一定所有的安全问题都能考虑全面. ? 对于这样的问题,最方便的修复方式就是在确定不影响业务的情况下,将这个存在问题的组件不对外导出变成私有组件.这样做的确很有效,私有组件也很安全.但是,如果存在某个私有组件能被导出组件启动的话,那么这个私有组件其实就不再是私有了.如果攻击者可以通过控制导出的组件对私有组件进行控制,那么攻