天天看点

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

几个月前, linux 基金会宣布 lfcs (linux 基金会认证系统管理员) 认证诞生了,这个令人兴奋的新计划定位于让来自全球各地的初级到中级的 linux 系统管理员得到认证。这其中包括维护已经在运行的系统和服务的能力、第一手的问题查找和分析能力、以及决定何时向开发团队提交问题的能力。

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

第七讲: linux 基金会认证系统管理员

下面的视频简要介绍了 linux 基金会认证计划。

<video></video>

本讲是系列教程中的第七讲,在这篇文章中,我们会介绍如何管理 linux 系统自启动进程和服务,这是 lfcs 认证考试要求的一部分。

<a></a>

linux 系统的启动程序包括多个阶段,每个阶段由一个不同的图示块表示。下面的图示简要总结了启动过程以及所有包括的主要组件。

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

linux 启动过程

当你按下你机器上的电源键时,存储在主板 eeprom 芯片中的固件初始化 post(通电自检) 检查系统硬件资源的状态。post 结束后,固件会搜索并加载位于第一块可用磁盘上的 mbr 或 efi 分区的第一阶段引导程序,并把控制权交给引导程序。

mbr 是位于 bios 设置中标记为可启动磁盘上的第一个扇区,大小是 512 个字节。

前面 446 个字节:包括可执行代码和错误信息文本的引导程序

接下来的 64 个字节:四个分区(主分区或扩展分区)中每个分区一条记录的分区表。其中,每条记录标示了每个一个分区的状态(是否活跃)、大小以及开始和结束扇区。

最后 2 个字节: mbr 有效性检查的魔法数。

下面的命令对 mbr 进行备份(在本例中,/dev/sda 是第一块硬盘)。结果文件 mbr.bkp 在分区表被破坏、例如系统不可引导时能排上用场。

当然,为了后面需要的时候能使用它,我们需要把它保存到别的地方(例如一个 usb 设备)。该文件能帮助我们重新恢复 mbr,这只在我们操作过程中没有改变硬盘驱动布局时才有效。

备份 mbr

<code># dd if=/dev/sda of=mbr.bkp bs=512 count=1</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

在 linux 中备份 mbr

恢复 mbr

<code># dd if=mbr.bkp of=/dev/sda bs=512 count=1</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

在 linux 中恢复 mbr

对于使用 efi/uefi 方式的系统, uefi 固件读取它的设置来决定从哪里启动哪个 uefi 应用。(例如, efi 分区位于哪块磁盘或分区。

接下来,加载并运行第二阶段引导程序(又名引导管理器)。grub[grand unified boot] 是 linux 中最常使用的引导管理器。今天大部分使用的系统中都能找到它两个中的其中一个版本。

grub 有效配置文件: /boot/grub/menu.lst(旧发行版, efi/uefi 固件不支持)。

grub2 配置文件: 通常是 /etc/default/grub。

尽管 lfcs 考试目标没有明确要求了解 grub 内部知识,但如果你足够大胆并且不怕把你的系统搞乱(为了以防万一,你可以先在虚拟机上进行尝试)你可以运行:

<code># update-grub</code>

为了使更改生效,你需要以 root 用户修改 grub 的配置。

首先, grub 加载默认的内核以及 initrd 或 initramfs 镜像。补充一句,initrd 或者 initramfs 帮助完成硬件检测、内核模块加载、以及发现挂载根目录文件系统需要的设备。

一旦真正的根目录文件系统启动,为了显示用户界面,内核就会执行系统和服务管理器(init 或 systemd,进程号 pid 一般为 1)开始普通用户态的引导程序。

init 和 systemd 都是管理其它守护进程的守护进程(后台进程),它们总是最先启动(系统引导时),最后结束(系统关闭时)。

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

systemd 和 init

linux 中运行等级通过控制运行哪些服务来以不同方式使用系统。换句话说,运行等级控制着当前执行状态下可以完成什么任务(以及什么不能完成)。

传统上,这个启动过程是基于起源于 system v unix 的形式,通过执行脚本启动或者停止服务从而使机器进入指定的运行等级(换句话说,是一个不同的系统运行模式)。

在每个运行等级中,独立服务可以设置为运行、或者在运行时关闭。一些主流发行版的最新版本中,已经移除了标准的 system v,而用一个称为 systemd(表示系统守护进程)的新服务和系统管理器代替,但为了兼容性,通常也支持 sysv 命令。这意味着你可以在基于 systemd 的发行版中运行大部分有名的 sysv 初始化工具。

除了启动系统进程,init 还会查看 /etc/inittab 来决定进入哪个运行等级。

runlevel

description

停止系统。运行等级 0 是一个用于快速关闭系统的特殊过渡状态。

1

别名为 s 或 s,这个运行等级有时候也称为维护模式。在这个运行等级启动的服务由于发行版不同而不同。通常用于正常系统操作损坏时低级别的系统维护。

2

多用户。在 debian 系统及其衍生版中,这是默认的运行等级,还包括了一个图形化登录(如果有的话)。在基于红帽的系统中,这是没有网络的多用户模式。

3

在基于红帽的系统中,这是默认的多用户模式,运行除了图形化环境以外的所有东西。基于 debian 的系统中通常不会使用这个运行等级以及等级 4 和 5。

4

通常默认情况下不使用,可用于自定制。

5

基于红帽的系统中,支持 gui 登录的完全多用户模式。这个运行等级和等级 3 类似,但是有可用的 gui 登录。

6

重启系统。

要在运行等级之间切换,我们只需要使用 init 命令更改运行等级:init n(其中 n 是上面列出的一个运行等级)。 请注意这并不是运行中的系统切换运行等级的推荐方式,因为它不会给已经登录的用户发送警告(因而导致他们丢失工作以及进程异常终结)。

相反,应该用 shutdown 命令重启系统(它首先发送警告信息给所有已经登录的用户,并锁住任何新的登录;然后再给 init 发送信号切换运行等级)但是,首先要在 /etc/inittab 文件中设置好默认的运行等级(系统引导到的等级)。

因为这个原因,按照下面的步骤切当地切换运行等级。以 root 用户在 /etc/inittab 中查找下面的行。

<code>id:2:initdefault:</code>

然后,以 root 用户执行

<code># shutdown -r now</code>

最后一个命令会重启系统,并使它在下一次引导时进入指定的运行等级,并会执行保存在 /etc/rc[runlevel].d 目录中的脚本以决定应该启动什么服务、不应该启动什么服务。例如,在下面的系统中运行等级 2。

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

在 linux 中更改运行等级

列出某个服务的运行等级配置。

<code># chkconfig --list [service name]</code>

<code># chkconfig --list postfix</code>

<code># chkconfig --list mysqld</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

列出运行等级配置

从上图中我们可以看出,当系统进入运行等级 2 到 5 的时候就会启动 postfix,而默认情况下运行等级 2 到 4 时会运行 mysqld。现在假设我们并不希望如此。

例如,我们希望运行等级为 5 时也启动 mysqld,运行等级为 4 或 5 时关闭 postfix。下面分别针对两种情况进行设置(以 root 用户执行以下命令)。

为特定运行等级启用服务

<code># chkconfig --level [level(s)] service on</code>

<code># chkconfig --level 5 mysqld on</code>

为特定运行等级停用服务

<code># chkconfig --level [level(s)] service off</code>

<code># chkconfig --level 45 postfix off</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

启用/停用服务

我们在基于 debian 的系统中使用 sysv-rc-conf 完成类似任务。

配置服务自动启动时进入指定运行等级,同时禁止启动时进入其它运行等级。

我们可以用下面的命令查看启动 mdadm 时的运行等级。

<code># ls -l /etc/rc[0-6].d | grep -e 'rc[0-6]|mdadm'</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

查看运行中服务的运行等级

我们使用 sysv-rc-conf 设置防止 mdadm 在运行等级2 之外的其它等级启动。只需根据需要(你可以使用上下左右按键)选中或取消选中(通过空格键)。

<code># sysv-rc-conf</code>

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

sysv 运行等级配置

然后输入 q 退出。

重启系统并从步骤 1 开始再操作一遍。

LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务LFCS 系列第七讲:通过 SysVinit、Systemd 和 Upstart 管理系统自启动进程和服务

验证服务运行等级

从上图中我们可以看出 mdadm 配置为只在运行等级 2 上启动。

本文来自云栖社区合作伙伴“linux中国”

原文发布时间为:2013-04-02.

继续阅读