几个月前,Linux基金会宣布LFCS(Linux基金会认证的系统管理员 )的认证,一个激动人心的新方案,其目的是允许个人从全世界的客人来得到执行基本在Linux系统中间系统管理任务的认证。 这包括支持已经运行的系统和服务,以及第一手问题查找和分析,以及决定何时将问题提交给工程团队的能力。
Linux基础认证Sysadmin - 第7部分
以下视频介绍了Linux基础认证计划的简要介绍。
这篇文章是10教程系列的第7部分,在这一部分,我们将解释如何管理Linux系统启动过程和服务,这是LFCS认证考试所需的。
管理Linux启动过程
Linux系统的引导过程由几个阶段组成,每个阶段由不同的组件表示。 下图简要总结了引导过程,并显示了所涉及的所有主要组件。
Linux引导过程
当你按下机器上的电源按钮,存储在主板EEPROM芯片固件初始化POST(加 电自检 ),以检查系统的硬件资源的状态。 当POST完成之后,固件将搜索并加载第一阶段引导装载程序,位于MBR或第一个可用磁盘的EFI分区,并将控制权交给它。
MBR方法
MBR是位于标记为在BIOS设置中启动磁盘的第一个扇区,它的大小为512字节。
- 前446个字节 :引导加载程序包含可执行代码和错误消息文本。
- 随后的64个字节 :分区表包含每个四个分区(主或扩展)的记录。 其中,每个记录指示每个分区的状态(活动/不活动),大小和开始/结束扇区。
- 最后2个字节 :幻数作为MBR的有效性检查。
下面的命令执行MBR的备份(在此示例中,/ dev / SDA是第一个硬盘)。 产生的文件,mbr.bkp可以派上用场,应该分区表被破坏,例如,致使系统无法启动。
当然,为了在需要时以后使用它,我们需要保存它,并将其存储在其他地方(如USB驱动器,例如)。 该文件将帮助我们恢复MBR,并将让我们再次去,而且,如果我们不改变硬盘驱动器布局在同一时间。
备份MBR
# dd if=/dev/sda of=mbr.bkp bs=512 count=1
在Linux中备份MBR
恢复MBR
# dd if=mbr.bkp of=/dev/sda bs=512 count=1
在Linux中还原MBR
EFI / UEFI方法
对于使用EFI / UEFI方法系统,UEFI固件读取其设置,确定哪些UEFI应用是启动并从那里(即在哪个磁盘分区和EFI分区的位置)。
接下来, 第二阶段的boot loader(又名引导管理器)加载和运行。GRUB [ 大统一引导 ]是在Linux中使用最频繁的启动管理器。 在今天使用的大多数系统上都可以找到两个不同的版本之一。
- GRUB遗留配置文件 :/boot/grub/menu.lst中(较老的版本,而不是由EFI / UEFI固件支持)。
- GRUB2配置文件 :最有可能的,在/ etc /默认/ grub中。
虽然LFCS考试的目标并不明确要求有关GRUB内部的知识,如果你是勇敢而有能力搞乱你的系统(你可能想先试试它的虚拟机上,以防万一),你需要跑。
# update-grub
作为以应用更改,修改GRUB的配置后根 。
基本上,GRUB加载默认内核和initrd的或initramfs镜像。 简而言之,initrd或initramfs有助于执行硬件检测,内核模块加载和设备发现,以获取安装的真正的根文件系统。
一旦真正的根文件系统后,内核执行体系和服务管理器(init或systemd,其进程标识或PID始终为1)开始正常的用户空间的启动过程,以显示用户界面。
无论init和systemd是管理其他守护进程,作为第一个服务启动(启动时),最后的服务终止(关闭期间)守护程序(后台进程)。
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中更改运行级别
使用chkconfig管理服务
要启用或禁用引导系统的服务,我们将使用chkconfig命令在Debian和衍生物的CentOS / openSUSE的和SysV-RC-conf的 。 此工具还可以向我们显示特定运行级别的服务的预配置状态。
阅读也 : 如何停止和在Linux中禁用不需要的服务
列出服务的运行级别配置。
# chkconfig --list [service name] # chkconfig --list postfix # chkconfig --list mysqld
列出运行级别配置
在上图中我们可以看到, Postfix设置2至5时,系统进入运行级别启动,而mysqld的将被默认运行级别2至4运行。 现在假设这不是预期的行为。
例如,我们需要打开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
启用禁用服务
在基于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运行级别配置
然后,按q退出。
3.我们将重新启动系统并从第1步再次运行该命令。
# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'
验证服务运行级别
在上图中我们可以看到,mdadm的配置开始只在运行级别2。
什么关于systemd?
systemd是一个正在由几个主要的Linux发行采取的另一种服务和系统管理。 它的目的是允许在并行系统启动过程中进行更多的处理(不同于sysvinit的 ,它总是趋向因为它开始处理一次,支票一者是否依赖于另一个,并等待后台程序启动,以便更多的服务可以是慢启动),并且作为对运行系统的动态资源管理。
因此,服务在需要时启动(以避免消耗系统资源),而不是在启动期间没有固定原因启动。
查看您的系统上运行的所有进程的状态,无论是原生systemd和SysV服务,运行以下命令。
# systemctl
检查所有正在运行的进程
荷载栏显示的单位定义(指的是单位列,这显示了systemd维护的服务或其它)是否被正确加载,而主动和SUB列显示该单位的当前状态。
显示有关服务当前状态的信息
当活动列指出一个单元的状态不是主动另一方面,我们可以检查使用了什么事。
# systemctl status [unit]
例如,上面的图片中,媒体samba.mount处于故障状态。 让我们跑。
# systemctl status media-samba.mount
检查服务状态
我们可以看到, 媒体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
开始停止服务
启用或禁用服务以在引导期间启动
在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文件脚本(也称为作业定义)一般包括以下内容:
- 过程描述。
- 运行进程应该运行的级别或应该触发它的事件。
- 运行级别,其中进程应停止或应停止它的事件。
- 选项。
- 命令启动进程。
例如,
# 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引导过程是必要的,以帮助您排除任务,调整计算机的性能和运行服务以满足您的需求。
在这篇文章中,我们已经分析了,当你按下电源开关,打开机器,直到你得到一个全面运作的用户界面什么的那一刻发生。 我希望你学会阅读它,就像我做的时候一起。 请随时留下您的意见或问题。 我们始终期待着我们的读者的回音!