在早前的文章中,我们介绍了在升级FedoraLinux前如何利用LVM复制根文件系统,以便在可能出现错误的情况下能有一个回退机制。
然而如今,Fedora工作站的默认安装已经是Btrfs文件系统了。
现在,你可以利用Btrfs快照来更简便地创建一个可引导的回退系统。
注意,本文不涉及会如何从其它文件系统转换或迁移到Btrfs上。
确认根文件系统是否为Btrfs
本示例采用的是Pinebookaarch64笔记本电脑。在开始前,务必确认你的根文件系统是否采用Btrfs。要明确,不是所有的定制版或者镜像文件默认都使用Btrfs。
以上的示例输出显示挂载在“根”()的文件系统类型是Btrfs。你会注意到,有三个挂载点显示了相同的备份设备以及已用和可用的块数。这是因为它们是从同一Btrfs文件系统挂载的不同部分(子卷)。比如,子卷是我去年创建的那个可引导快照。
默认的FedoraBtrfs安装会创建一个Btrfs文件系统,并在其上分别挂载两个子卷,和,挂载路径分别为和。让我们一起来看看我还添加了哪些其它的子卷:
在这里,我们有一个来自最近一次系统升级的?子卷,以及两个只读快照和。要添加和删除这些快照,最简单的方法就是挂载Btrfs的根目录。我会更新系统并创建当前f36子卷的新快照。如果你已经重命名了你的子卷,我相信你知道该如何调整以下的示例以适应你的系统。
因为Btrfs快照是以文件系统为基础的,所以并不需要在创建快照之前进行“同步”,正如我在LVM中建议的。要从新的子卷引导为回退,你需要使用你喜欢的编辑器编辑?。如果你是刚入门的话,nano就是一款十分简单的文本编辑器,功能基本够用。以下是我文件中的一些行:

你现在可以进行回退的测试了。你可以使用grubby或在中编辑一项来将替换为。为了初学者的安全起见,我们更建议你在启动时编辑GRUB进行操作。你可以参考关于GRUB的这篇文章了解如何进入GRUB菜单。在你到达那里后,按下键编辑默认的内核启动项。放心——你所做的更改都只存在于内存中,如果你弄错了,重启电脑即可重新开始。就像编辑文件一样,找到并将其更改为。然后,按或来引导你修改过的项目。通过这些更改,你的系统应该能够引导进入你的新快照。你可以查看确保你正在引导至正确的子卷,或键入查看此时在上挂载的子卷。
进行FedoraLinux的系统升级
如果你的回退功能没问题,重启并返回你的正常根文件系统(并像上面所述,进行确认)。然后,按照维基页面上的指南进行标准的系统升级。提示:在运行之前,给子卷创建另一个快照,你可以给它命名为。这样,如果你发现硬盘空间不够,你不必再下载五个GB的文件包。因为除了下载的包以外,所有的内容都将与和共享,因此它不会占用任何额外的空间。然后说到磁盘块的共享问题……
因为在?子卷中的文件和子卷中的相同文件都使用的是相同的磁盘位置,所以在处理Btrfs报告的可用空间时,会感到困惑。因此在升级过程中从子卷中删除它们并不会真正释放任何空间。如果你耗尽了所有空间,并且决定重启电脑,那么图形用户界面(GUI)将无法启动。此时,你需要使用进入文本控制台并登录,这将是你磨练命令行技能的好机会。如何清空空间或扩展根文件系统在这里先不做讨论(我的文件系统经常在一个LVM的卷上,可以被扩展)。通常,为升级保留超过50%的空闲空间是比较保险的。
如果不幸出现问题,你可以重启电脑,并编辑GRUB条目以引导启动回退快照。如果你是新手,一旦需要在磁盘上修改GRUB条目(这样你就不需要每次启动时都进行编辑),可能需要一些指导。删除或重命名损坏的?子卷是非常直接的。你可以为子卷(或快照)创建一个快照,然后尝试再一次进行系统升级。以下是在子卷f36上启动到回退系统后重新开始的示例:
事实证明,新的f38版本的kernel-6.2.11在我的Pinebook上进行系统升级后并未成功启动!(不过请不要担心,ARM只是FedoraLinux的可选CPU架构——在主流设备上,你很少会遭遇此类问题。)的确,我成功地按照前文所述,在启动时编辑了GRUB条目并恢复到了f36的kernel-6.2.10。现在,我继续使用着f38,但同时搭载了f36的kernel-6.2.10。
更新:kernel-6.2.12已经发布,且我已确认它在Pinebook上运行正常。
随着你不断更新f38系统,它最终可能会希望删除?下的最后一个f36内核。通常来说,这并不是问题,因为到那个时候,你已经完全熟悉f38,而快照只是一个存档。如果你希望你的复刻版本(即的快照)能无限期地启动,那么你应当在下保存一个能正常工作的f36内核。最简单的方法是在文件中设置并手动移除旧的内核,这种方法既简单又安全(尽管可能稍显繁琐)。
这里还有一个更复杂的解决方案(不适合新手):运行?指令,列举出所有在子卷快照中的内核及GRUB文件(这些文件并未包含在快照之内)。将这些文件备份至安全位置(例如我会挂载子卷,并将文件备份至其下的一个目录)。当f38系统启动后,对于每一个f36内核版本,都需使用删除特定版本的内核(例如,使用)。千万不要删除f38的内核!然后将你先前备份的f36内核恢复至下。此时,f38系统已经无法再识别f36的内核,因此也不会将其从中删除。
使用此方法有一个缺点,那就是你可能会不小心删除正在运行的f38内核。如果大家有更佳的解决办法,欢迎在评论区分享。
对于习惯于修改GRUB条目的用户,他们可能会考虑创建一个命名为?的快照子卷。将当前的GRUB条目进行修改,以便启动到这个子卷,重启后,在这个子卷中进行系统升级。此后,总是根据它所包含的FedoraLinux版本来命名根文件系统的子卷。但在本文中,我没有采用这种作法,原因有两点:
- 将当前活动的子卷命名为?,这是遵循FedoraLinux的默认设置。
- 坚持使用?作为当前子卷,这样在进行正常的系统升级操作之外,并不需要任何永久性的更改。
正如本文所展示的,针对重大系统更改(如系统版本升级)可能引发问题时,只读快照作为本地恢复点,非常有用。这些快照还可以通过Btrfs的?子命令,发送至远程备份。(如果远程备份设备已经包含了先前的备份数据,Btrfs可以进行增量发送,仅传输发生变更的文件,这样就能节省时间和空间。)如果你打算长期存档这些快照,保持清晰不混淆且能明确恢复顺序的关键,就是要使用一套一致的命名规则。关于如何使用Btrfs的命令来创建备份的更多信息,你可以参考关于Btrfs快照备份的文章。
本文来源:国外服务器--使用Btrfs快照方便升级Fedora(rsync和btrfs快照区别)
本文地址:https://www.idcbaba.com/guowai/6263.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




