LFCS:管理系统启动过程和服务(SysVinit,Systemd和Upstart) - 第7部分

这篇文章是10教程系列的第7部分,在这一部分,我们将解释如何管理Linux系统启动过程和服务,这是必需的

几个月前,Linux基金会宣布LFCS(Linux基金会认证的系统管理员 )的认证,一个激动人心的新方案,其目的是允许个人从全世界的客人来得到执行基本在Linux系统中间系统管理任务的认证。 这包括支持已经运行的系统和服务,以及第一手问题查找和分析,以及决定何时将问题提交给工程团队的能力。

Linux基础认证Sysadmin  - 第7部分

Linux基础认证Sysadmin - 第7部分

以下视频介绍了Linux基础认证计划的简要介绍。

这篇文章是10教程系列的第7部分,在这一部分,我们将解释如何管理Linux系统启动过程和服务,这是LFCS认证考试所需的。

管理Linux启动过程

Linux系统的引导过程由几个阶段组成,每个阶段由不同的组件表示。 下图简要总结了引导过程,并显示了所涉及的所有主要组件。

Linux引导过程

Linux引导过程

当你按下机器上的电源按钮,存储在主板EEPROM芯片固件初始化POST(加 电自检 ),以检查系统的硬件资源的状态。 POST完成之后,固件将搜索并加载第一阶段引导装载程序,位于MBR或第一个可用磁盘的EFI分区,并将控制权交给它。

MBR方法

MBR是位于标记为在BIOS设置中启动磁盘的第一个扇区,它的大小为512字节。

  1. 前446个字节 :引导加载程序包含可执行代码和错误消息文本。
  2. 随后的64个字节 :分区表包含每个四个分区(主或扩展)的记录。 其中,每个记录指示每个分区的状态(活动/不活动),大小和开始/结束扇区。
  3. 最后2个字节 :幻数作为MBR的有效性检查。

下面的命令执行MBR的备份(在此示例中,/ dev / SDA是第一个硬盘)。 产生的文件,mbr.bkp可以派上用场,应该分区表被破坏,例如,致使系统无法启动。

当然,为了在需要时以后使用它,我们需要保存它,并将其存储在其他地方(如USB驱动器,例如)。 该文件将帮助我们恢复MBR,并将让我们再次去,而且,如果我们不改变硬盘驱动器布局在同一时间。

备份MBR
# dd if=/dev/sda of=mbr.bkp bs=512 count=1
在Linux中备份MBR

在Linux中备份MBR

恢复MBR
# dd if=mbr.bkp of=/dev/sda bs=512 count=1
在Linux中还原MBR

在Linux中还原MBR

EFI / UEFI方法

对于使用EFI / UEFI方法系统,UEFI固件读取其设置,确定哪些UEFI应用是启动并从那里(即在哪个磁盘分区和EFI分区的位置)。

接下来, 第二阶段的boot loader(又名引导管理器)加载和运行。GRUB [ 大统一引导 ]是在Linux中使用最频繁的启动管理器。 在今天使用的大多数系统上都可以找到两个不同的版本之一。

  1. GRUB遗留配置文件 :/boot/grub/menu.lst中(较老的版本,而不是由EFI / UEFI固件支持)。
  2. GRUB2配置文件 :最有可能的,在/ etc /默认/ grub中。

虽然LFCS考试的目标并不明确要求有关GRUB内部的知识,如果你是勇敢而有能力搞乱你的系统(你可能想先试试它的虚拟机上,以防万一),你需要跑。

# update-grub

作为以应用更改,修改GRUB的配置后

基本上,GRUB加载默认内核initrd的或initramfs镜像。 简而言之,initrd或initramfs有助于执行硬件检测,内核模块加载和设备发现,以获取安装的真正的根文件系统。

一旦真正的根文件系统后,内核执行体系和服务管理器(initsystemd,其进程标识或PID始终为1)开始正常的用户空间的启动过程,以显示用户界面。

无论initsystemd是管理其他守护进程,作为第一个服务启动(启动时),最后的服务终止(关闭期间)守护程序(后台进程)。

Systemd和Init

Systemd和Init

启动服务(SysVinit)

在Linux下运行级别的概念,规定不同的方式通过控制服务正在运行使用的系统。 换句话说,运行级控制什么任务可以在当前执行状态= runlevel(和哪些不能)中完成。

传统上,这种启动过程中进行基于起源与System V UNIX,用制度传球执行的启动和机器进入了一个特定的运行级别(其中,换句话说,就是运行不同的模式停止服务的脚本集合公约系统)。

在每个运行级别中,各个服务可以设置为运行,或者如果运行则关闭。 一些主要分布的最新版本正在从System V的标准走,取而代之的是相当新的服务和系统管理的称为systemd(代表系统守护进程),但通常支持SYSV命令为了兼容性。 这意味着,你可以运行大部分的知名SysV初始化工具在基于systemd分布。

另请阅读为什么“systemd”替换为“init”在Linux中

除了启动系统过程中, 初始化看起来到/ etc / inittab文件来决定运行级别必须输入的内容。

运行级别 描述
0 暂停系统。 运行级0是用于快速关闭系统的特殊过渡状态。
1 还有别名为s或S,此运行级别有时称为维护模式。 在此运行级别启动的服务(如果有)会因分布而异。 它通常用于可能受正常系统操作影响的低级系统维护。
2 多用户。 在Debian系统和衍生产品上,这是默认运行级别,并且包括-if可用图形登录。 在基于Red Hat的系统上,这是没有网络的多用户模式。
3 在基于Red Hat的系统上,这是默认的多用户模式,它运行除图形环境以外的所有内容。 此运行级别和级别4和5通常不在基于Debian的系统上使用。
4 通常默认情况下未使用,因此可用于自定义。
5 在基于Red Hat的系统上,具有GUI登录的完全多用户模式。 此运行级别与级别3相同,但具有GUI登录。
6 重新启动系统。

要运行级别之间切换,我们可以简单地使用发行init命令运行级别的变化:初始化N(N是上面列出的运行级别之一)。 请注意,这不是将运行系统运行到不同运行级别的推荐方式,因为它不会向现有登录用户发出警告(从而导致它们丢失工作和进程异常终止)。

相反,shutdown命令应该用于重新启动系统(先发送一条警告消息给所有登录用户,并阻止任何进一步的登录;然后它标志着初始化切换运行级别); 然而,默认运行级别(一个系统将引导至)必须在/ etc / inittab文件第一次编辑。

为此,请按照下列步骤操作,运行级别之间适当地转换为根,寻找在/ etc / inittab中的以下行。

id:2:initdefault:

,更改了号码2所需的运行级别与您喜欢的文本编辑器,如VIM(描述如何使用在Linux中VI / vim编辑器-第2部分本系列的)。

接下来,以root身份运行。

# shutdown -r now

最后的命令将重新启动系统,使其在下次开机时指定的运行级别启动,并会以决定哪些服务应该被启动,哪些运行位于/etc/rc[runlevel].d目录中的脚本不应该。 例如,对于以下系统中的运行级别2。

在Linux中更改运行级别

在Linux中更改运行级别

使用chkconfig管理服务

要启用或禁用引导系统的服务,我们将使用chkconfig命令在Debian和衍生物的CentOS / openSUSE的和SysV-RC-conf的 此工具还可以向我们显示特定运行级别的服务的预配置状态。

阅读也如何停止和在Linux中禁用不需要的服务

列出服务的运行级别配置。

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld
列出运行级别配置

列出运行级别配置

在上图中我们可以看到, Postfix设置25时,系统进入运行级别启动,而mysqld的将被默认运行级别24运行。 现在假设这不是预期的行为。

例如,我们需要打开mysqld在运行级别5为好,并关闭运行级别4和5Postfix下面是我们将在每种情况下做的(以root身份运行下面的命令)。

为特定运行级别启用服务
# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on
禁用特定运行级别的服务
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off
在Linux中启用禁用服务

启用禁用服务

基于Debian的系统中使用SYSV-RC-conf的现在,我们将执行类似的任务。

使用sysv-rc-conf管理服务

配置服务以在特定运行级别上自动启动,并防止它在所有其他运行级别上启动。

1.让我们用下面的命令来看看有什么在哪里mdadm的配置来启动运行级别。

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'
检查服务运行的运行级别

检查服务运行的运行级别

2.我们将使用SYSV-RC-conf的 ,以防止mdadm的启动在所有运行级别,除了2。 只需根据需要选中或取消选中(使用空格键)(您可以使用箭头键上下,左右移动)。

# sysv-rc-conf
SysV运行级别配置

SysV运行级别配置

然后,按q退出。

3.我们将重新启动系统并从第1步再次运行该命令。

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'
验证服务运行级别

验证服务运行级别

在上图中我们可以看到,mdadm的配置开始只在运行级别2。

什么关于systemd?

systemd是一个正在由几个主要的Linux发行采取的另一种服务和系统管理。 它的目的是允许在并行系统启动过程中进行更多的处理(不同于sysvinit的 ,它总是趋向因为它开始处理一次,支票一者是否依赖于另一个,并等待后台程序启动,以便更多的服务可以是慢启动),并且作为对运行系统的动态资源管理。

因此,服务在需要时启动(以避免消耗系统资源),而不是在启动期间没有固定原因启动。

查看您的系统上运行的所有进程的状态,无论是原生systemdSysV服务,运行以下命令。

# systemctl
在Linux中检查所有运行的进程

检查所有正在运行的进程

荷载栏显示的单位定义(指的是单位列,这显示了systemd维护的服务或其它)是否被正确加载,而主动SUB列显示该单位的当前状态。

显示有关服务当前状态的信息

活动列指出一个单元的状态不是主动另一方面,我们可以检查使用了什么事。

# systemctl status [unit]

例如,上面的图片中,媒体samba.mount处于故障状态。 让我们跑。

# systemctl status media-samba.mount
检查Linux服务状态

检查服务状态

我们可以看到, 媒体samba.mount失败,因为在主机装置1安装进程无法找到网络份额//192.168.0.10/gacanepa。

启动或停止服务

一旦网络共享//192.168.0.10/gacanepa变为可用,让我们尝试启动,然后停止,最后重新启动单元媒体samba.mount。 执行每个操作后,让我们运行systemctl status media-samba.mount来检查其状态。

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount
启动Stoping服务

开始停止服务

启用或禁用服务以在引导期间启动

systemd可以启用或在引导时禁用服务。

# systemctl enable [service] 		# enable a service 
# systemctl disable [service] 		# prevent a service from starting at boot

启用或禁用服务在启动时自动启动的过程包括在添加或删除在/etc/systemd/system/multi-user.target.wants目录的符号链接。

启用禁用服务

启用禁用服务

或者,您可以使用命令查明服务的当前状态(启用或禁用)。

# systemctl is-enabled [service]

例如,

# systemctl is-enabled postfix.service

此外,您可以使用重新引导或关闭系统。

# systemctl reboot
# systemctl shutdown

Upstart

Upstart是一个事件来替换老的/ sbin目录/ init服务程序,并诞生出了仅需要,因为它们发生启动服务,在需要的时候(也监督他们,而他们正在运行),并处理事件,从而超越经典,基于依赖的sysvinit系统。

它最初是为Ubuntu发行版开发的,但在Red Hat Enterprise Linux 6.0中使用。 虽然它的目的是为适用于所有Linux发行作为sysvinit的替换部署,在时间它被systemd掩盖。 2014年2月14日,Mark Shuttleworth(Canonical Ltd.创始人)宣布,未来的Ubuntu版本将使用systemd作为默认的init守护进程。

因为对于系统SysV的启动脚本中已经很普遍了这么久,大量的软件包包括的SysV启动脚本。 为了适应这样的包,Upstart提供了一个兼容模式:它运行的SysV启动脚本在平时的地点(/etc/rc.d/rc?.d,/etc/init.d/rc?.d,/ etc / rc中? .D,或类似的位置)。 因此,如果我们安装一个尚未包含Upstart配置脚本的程序包,它应该仍然以通常的方式启动。

此外,如果我们已经安装实用程序,如chkconfig的 ,你应该能够使用它们来管理基于SysV的服务,就像我们会基于sysvinit的系统。

Upstart脚本还支持基于比SysV启动脚本更多种类的操作启动或停止服务; 例如,每当连接特定硬件设备时,Upstart可以启动服务。

使用Upstart和其原生脚本的系统完全取代了/ etc / inittab文件,并与在/ etc / init目录的.conf脚本的具体运行级别的SysV的启动脚本目录。

这些* .conf文件脚本(也称为作业定义)一般包括以下内容:

    1. 过程描述。
    2. 运行进程应该运行的级别或应该触发它的事件。
    3. 运行级别,其中进程应停止或应停止它的事件。
    4. 选项。
    5. 命令启动进程。

例如,

# My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <dave.null@example.com>"
# Stanzas
#
# Stanzas define when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process in case of crash
respawn
# Specify working directory
chdir /home/dave/myfiles
# Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

要应用更改,您需要告诉upstart重新加载其配置。

# initctl reload-configuration

然后通过键入以下命令启动作业。

$ sudo start yourjobname

其中,yourjobname是先前与yourjobname.conf脚本添加的作业的名称。

对于Upstart更完整和详细的参考指南菜单中的“在该项目的网站上提供的菜谱 。”

概要

了解Linux引导过程是必要的,以帮助您排除任务,调整计算机的性能和运行服务以满足您的需求。

在这篇文章中,我们已经分析了,当你按下电源开关,打开机器,直到你得到一个全面运作的用户界面什么的那一刻发生。 我希望你学会阅读它,就像我做的时候一起。 请随时留下您的意见或问题。 我们始终期待着我们的读者的回音!