当前位置: 首页 > 科技观察

如何使用实时USB设备恢复我的Linux系统

时间:2023-03-17 17:48:28 科技观察

我的家庭实验室中有十几台物理计算机,还有更多的虚拟机。这些系统中的大多数都是我用于测试和实验的。我经常写关于使用自动化来简化系统管理任务的文章。我还在多个地方写道,我从自己的错误中学到的东西比几乎任何其他方式都多。在过去的几周里,我学到了很多东西。我给自己制造了一个大问题。作为多年的系统管理员,写过上百篇关于Linux的文章和五本书,应该对Linux了解更多。再一次,我们都会犯错误,这是一个重要的教训:你永远不会因为有经验而停止犯错。我不打算讨论我的错误的细节。告诉你这是一个错误就足够了,我应该在做之前更多地考虑我在做什么。另外,细节不是重点。经验并不能使你免于犯下的每一个错误,但它可以帮助你改过自新。这就是本文的主题:使用实时USB发行版启动进入恢复模式。问题首先,问题是我造成的,它本质上是/etc/default/grub文件配置错误。接下来,我使用Ansible将错误配置的文件分发到我所有的物理机器并运行grub2-mkconfig。全部12个。它真的非常非常快。除了两个以外,其他人都未能启动。它们在Linux引导的早期阶段崩溃,出现各种无法定位/root文件系统的错误。我可以使用root密码进??入“维护”模式,但没有挂载/root,即使是最简单的工具也无法访问。直接引导到恢复内核也不起作用。系统真的崩溃了。Fedora恢复模式解决这个问题的唯一方法是想办法进入恢复模式。当所有其他方法都失败时,Fedora提供了一个非常酷的工具:用于安装Fedora新实例的实时USBLiveUSB驱动器。将BIOS设置为从实时USB设备启动后,我启动到Fedora36Xfce的实时用户桌面。我在桌面上打开了两个相邻的终端会话,并在两个终端会话中都切换到了root权限。我在其中一个上运行lsblk以供参考。我使用该结果来识别/root分区以及引导和efi分区。我使用了我的一个虚拟机,如下所示。在这种情况下,没有efi分区,因为此VM不使用UEFI。#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTSloop07:001.5G1looploop17:106G1loop├─live-rw253:006G0dm/└─live-base253:106G1dmloop27:2032G0loop└─live-rw253:006G0dm/sda8:00120G0disk├─sda18:101G0part└─sda28:20119G0part├─vg01-swap253:204G0lvm├─vg01-tmp253:3010G0lvm├─vg01-var253:4020G0lvm├─vg01-home253:505G0lvm├─vg01-usr253:6020G0lvm└─vg01-root253:705G0lvmsr011:011.6G0rom/run/initramfs/livezram0252:008G0disk[SWAP]/dev/sda1该分区很容易识别为/boot,根(/)分区也是如此。在另一个终端会话中,我执行了一系列步骤来恢复我的系统。具体的卷组名称和设备分区(例如/dev/sda1)因系统而异。此处显示的命令特定于我的情况。目标是使用liveUSB启动并完成启动,然后只在镜像目录中挂载必要的文件系统,并运行chroot命令以在chroot镜像目录中运行Linux。此方法绕过损坏的GRUB(或其他)配置文件。但是,它提供了一个完整的运行系统,其中安装了所有原始文件系统以进行恢复,既作为所需工具的来源,又作为要进行更改的目标。以下是步骤和相关命令:(1)创建目录/mnt/sysimage以提供chroot目录的位置。(2)挂载根分区到/mnt/sysimage:#mount/dev/mapper/vg01-root/mnt/sysimage(3)设置/mnt/sysimage为你的工作目录:(4)挂载/boot和/boot/efi文件系统。(5)挂载其他主要文件系统。这一步不需要/home和/tmp这样的文件系统:#cd/mnt/sysimage(6)绑定挂载的重要文件系统,这些文件系统必须在chrooted系统和原始live系统之间共享,而后者仍在外部运行:#mount--bind/syssys#mount--bind/procproc(7)一定要最后操作/dev目录,否则无法挂载其他文件系统:#mount--bind/devdev(8)chroot到系统映像:#chroot/mnt/sysimage系统现在已准备好将其恢复到工作状态,无论您需要做什么。然而,有一次我能够在这种状态下运行我的服务器几天,直到我能够研究和测试真正的修复。我不推荐这样做,但是当有任务需要启动和运行时,它可能是紧要关头的一个选择。解决方案当我将每个系统置于恢复模式时,修复很容易。由于我的系统现在可以正常启动,因此我只需对/etc/default/grub和/etc/fstab进行必要的更改并运行grub2-mkconfig>boot/grub2/grub.cfg命令。我使用exit命令退出chroot环境,然后重启主机。当然,我不能自动从事故中恢复过来。我不得不在每台主机上手动完成整个过程,这是对使用自动化快速轻松地传播我自己的错误的一种报应。吸取教训尽管它们很有用,但我曾经讨厌在我的一些系统管理员工作中召开“吸取教训”会议,但看起来我确实需要提醒自己一些事情。因此,这是我从这场自我造成的惨败中得到的“教训”。首先,十个无法启动的系统使用了不同的卷组命名方案,我的新GRUB配置没有考虑到这一点。我只是忽略了它们可能不同的事实。考虑清楚。并非所有系统都相同。测试一切。验证一切。永远不要做假设。现在一切正常。希望我也更聪明。