CentOS 7和RHEL 7引导过程概述和故障排除

本文介绍了CentOS / RHEL 7.x系统的启动过程。尽管它可能与以前的版本保持相似,但是在RHEL 7中,引入了systemd。除了启动过程之外,我还将在此过程中提供故障排除提示和技巧。

您需要先了解启动过程,然后才能主动对启动问题进行故障排除。查看以下步骤,直到您熟悉该过程。

高层概述

  • 电源+开机自检。
  • 固件设备搜索。
  • 固件读取引导加载程序。
  • 引导加载程序加载配置(grub2)。
  • 引导加载程序加载内核和initramfs。
  • 引导加载程序将控制权传递给内核。
  • 内核初始化硬件+ /sbin/init以pid 1 执行。
  • Systemd执行所有initrd目标(在上挂载文件系统/sysroot)。
  • 内核根FS从initramfs根(/sysroot)切换到系统rootfs(/),并且systemd作为系统版本重新执行。
  • Systemd在自动解决依赖关系的同时查找默认目标并按配置启动/停止单元,并显示登录页面。

有关引导过程的更多信息,请参阅系统的官方OS文档。

系统目标

目标基本上是依赖检查。它们具有“之前”和“之后”配置,以确切地要求达到该目标所需的服务。例如:arp.ethernet.servicefirewalld.service等等,必须先启动并工作,然后network.target才能到达。如果没有达到,服务,如httpdnfsldap无法启动。在RHEL / CentOS 7中可以设置4个目标。

  • graphic.target(GUI界面)
  • 多用户目标(多用户模式,基于文本的登录)
  • rescue.target(sulogin提示符,基本系统初始化)
  • Emergency.target(sulogin提示符,initramfs数据透视完成,并且系统根目录安装在/上为只读)

要查看当前的默认引导目标,请使用以下命令:

systemctl get-default

请记住,您可以在运行时通过隔离目标来更改此设置。这将启动/停止与新目标相关的所有服务,因此请谨慎使用(请参阅参考资料systemctl isolate new.target)。

单用户模式

有时,您需要引导进入单用户模式来解决操作系统问题。对于此示例,我将向您展示如何rescue.target在RHEL / CentOS 7上使用“单用户模式”。

  1. 当grub菜单提示时,通过按“ e”进行编辑来中断grub2菜单。
  2. 找到指定内核版本的行(vmlinuz),并将以下内容附加到该行:systemd.unit=rescue.target
  3. 按“ Ctrl + x”开始。
  4. 然后,将提示您输入root密码以继续,一旦退出应急外壳,引导过程将继续加载默认目标。

恢复root密码

此过程与我们以前的版本中使用的过程有些不同,但是它是一个简单的任务,并且只需很少的步骤即可完成。如果需要恢复任何凭据,则可以使用此方法来访问VM。您仍然可以从活动CD引导,挂载根文件系统并编辑密码,但是该方法已过时,需要更多的精力。

  1. 重新启动系统。
  2. 当grub菜单提示时,通过按“ e”进行编辑来中断grub2菜单。
  3. 将光标移动到指定内核(vmlinuz)的行的末尾。您可能要删除除TTY0以外的所有其他控制台,但是在您的环境中可能不需要此步骤。
  4. 追加rd.break不加引号),这将在将控件从initramfs移交给实际系统之前中断启动过程。
  5. Ctrl + x引导。

此时,将呈现一个根shell,其中根文件系统以只读模式安装在上/sysroot。我们将需要使用写权限重新安装它。

重新安装/sysroot

# mount -oremount,rw /sysroot

切换到chroot监狱。

# chroot /sysroot

更改我们的凭据已过期的用户的密码。

# passwd <username>

如果使用的是SElinux,则应考虑重新标记所有文件,然后再继续引导过程。如果您不使用SElinux,可以跳过这一部分。

# touch /.autorelabel

退出两次,系统将从我们中断它的位置干净启动。

查看以前启动的日志

查看先前失败的引导尝试的日志很有用。如果日记日志已设置为永久日志(通常存储在内存中,并在启动时释放),则可以使用该journalctl工具完成。如果您需要设置永久启动日志记录,请按照以下步骤操作。

以root用户身份创建用于存储此信息的日志文件。

# mkdir -p 2775 /var/log/journal && chown :systemd-journal /var/log/journal
# systemctl restart systemd-journald

要检查先前引导的日志,请将该-b选项与一起使用journalctl。没有任何参数,-b将仅过滤与上一次引导有关的消息的输出。此参数为负数将在以前的启动时过滤。例如:

# journalctl -b-1 -p err

这将向您显示最近一次启动中的错误日志。您应该更改数值以反映您需要查看的启动。

修复磁盘和文件系统错误

最常见的启动时间错误之一是配置错误的/etc/fstab文件。您不能使用rescue.target修复/etc/fstab错误。这些问题大多数都将要求我们使用,emergency.target因为“救援”需要功能更强大的系统。

以下是需要解决的问题的示例emergency.target

  1. 文件系统损坏。
  2. 中不存在UUID /etc/fstab
  3. 中不存在的安装点/etc/fstab
  4. 中的安装选项不正确/etc/fstab

重要说明/etc/fstab在紧急模式下编辑文件后,必须执行以下安全措施:

# systemctl daemon-reload

这是一个演练示例。我们将进入紧急模式以删除中的错误条目/etc/fstab

  1. 当grub菜单提示时,通过按“ e”进行编辑来中断grub2菜单。
  2. 找到指定内核版本的行(vmlinuz),并将以下内容附加到该行:systemd.unit=emergency.target
  3. 按“ Ctrl + x”启动。
  4. 系统将提示您输入root密码以继续。
  5. 重新挂载,/以便我们可以更改fstab文件:# mount -oremount,rw /
  6. 我们可以使用mount命令查看哪个条目导致了错误:# mount -a
  7. fstab文件中删除有问题的条目。
  8. mount -a再次使用以确保错误已解决。
  9. systemctl daemon-reload如我前面提到的,使用它来重新加载所有单元文件,并重新创建整个依赖关系树。

退出紧急外壳后,系统将完成从紧急目标的引导,然后您就可以从该位置照常继续。该示例仅用于向您显示使用紧急目标对系统上的文件进行持久更改的过程。

Grub 2的引导程序问题

/boot/grub2/grub.cfg文件是主配置文件。永远不要手动编辑此文件。而是grub2-mkconfig使用一组不同的配置文件和已安装内核的列表来生成新的grub2配置。该grub2-mkconfig命令将查找/etc/default/grub要使用的选项,例如默认菜单超时和内核命令行,然后使用一组脚本/etc/grub.d/来生成结果配置文件。

这是这种关系的文字图。

/boot/grub2/grub.cfg
               |
               |__________________
               |                  |
         /etc/default/grub         /etc/grub.d/*

重要提示:要编辑grub.cfg主文件,您需要对其中的文件进行所需的更改,然后通过运行以下命令来创建新/etc/default/grub文件:/etc/grub.d/grub.cfg

# grub2-mkconfig > /boot/grub2/grub.cfg

故障排除

/boot/grub2/grub.cfg在进行故障排除之前,了解文件的语法很重要。

  • 首先,可引导项被编码在“菜单”块内。在这些块中,linux16initrd16线指向从磁盘(连同内核命令行)要加载的内核和initramfs的被加载。在启动时进行交互式编辑时,使用制表符查找这些行。
  • 这些块中的“ set root”行并不指向RHEL / CentOS 7系统的根文件系统,而是指向grub2应该从中加载内核和initramfs文件的文件系统。语法是系统harddrive.partitionhd0第一个硬盘在哪里hd1,第二个在哪里。指示分区是msdos1针对第一MBR分区还是gpt1针对第一GPT分区。

来自的示例/boot/grub2/grub.cfg

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-a2531d12-46f8-4a0f-8a5c-b48d6ef71275' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  123455ae-46f8-4a0f-8a5c-b48d6ef71275
    else
      search --no-floppy --fs-uuid --set=root 123455ae-46f8-4a0f-8a5c-b48d6ef71275
    fi

如果需要在设备上重新安装引导程序,请使用以下命令。

# grub2-install <device>

修复损坏的grub安装

对于进入grub2菜单后系统无法启动的情况。

  • 您应该首先编辑grub菜单并搜索语法错误。如果找到一个,请更正它并进入系统进行永久更改以解决问题。
  • 如果找不到任何错误,请参考以上部分,我们将在此启动紧急目标。您将需要/再次重新安装根()。
  • 使用以下命令查看当前的grub2配置: # grub2-mkconfig
  • 如果没有看到任何错误,则可能是有人编辑了该/boot/grub2/grub.cfg文件。不要修改此文件。使用以下命令重建配置:# grub2-mkconfig > /boot/grub2/grub.cfg

重建grub配置后,您应该可以重新启动而不会出现任何问题。



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

使用Nethogs监视网络带宽使用情况

使用Nethogs监视网络带宽使用情况

在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ

如何在CentOS 7上安装BoltWire CMS

如何在CentOS 7上安装BoltWire CMS

使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比

在CentOS 6上设置SA-MP San Andreas多人服务器

在CentOS 6上设置SA-MP San Andreas多人服务器

欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件

使用Etckeeper进行/ etc的版本控制

使用Etckeeper进行/ etc的版本控制

简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置

如何在CentOS 7上安装Microweber

如何在CentOS 7上安装Microweber

使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示

如何在CentOS 7上安装SonarQube

如何在CentOS 7上安装SonarQube

使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

如何在CentOS 7上安装MoinMoin

如何在CentOS 7上安装MoinMoin

MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商

在CentOS 7上安装H2O Web服务器

在CentOS 7上安装H2O Web服务器

H2O是新一代HTTP服务器,它对所有当前使用的Web服务器都具有出色的,功能齐全的HTTP / 2实现。使用H2O作为您的Web服务器

如何在Debian,CentOS和FreeBSD上使用Sudo

如何在Debian,CentOS和FreeBSD上使用Sudo

在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫

如何在Ubuntu 16.10上安装Countly Analytics

如何在Ubuntu 16.10上安装Countly Analytics

使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能

如何在CentOS 7上安装MODX CMS和Nginx

如何在CentOS 7上安装MODX CMS和Nginx

MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装

如何在CentOS 7上安装ERPNext开源ERP

如何在CentOS 7上安装ERPNext开源ERP

使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的

如何在CentOS 7 LAMP VPS上安装Paste 2.1

如何在CentOS 7 LAMP VPS上安装Paste 2.1

使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是

如何在CentOS 7上安装Seafile Server

如何在CentOS 7上安装Seafile Server

使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智

如何在CentOS 7上安装Kolab组件

如何在CentOS 7上安装Kolab组件

使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

使用其他系统?Omeka Classic 2.4 CMS是一个免费的开源数字发布平台和用于共享数字内容的内容管理系统(CMS)

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。