Linux发行版切换技术全解析:从虚拟机迁移到系统配置

本文深入探讨了Linux发行版切换的技术实践,包括虚拟机部署、系统配置迁移、磁盘分区管理以及不同发行版间的技术差异,为技术爱好者提供了详细的操作思路和注意事项。

如果您在Hackaday上阅读过"Jenny’s Daily Drivers"或"Linux Fu"专栏,就知道我们很喜欢Linux。特别是Jenny的系列文章,总是会指出我想在不同发行版上尝试的东西。然而,我有个明显的倾向——不喜欢更换发行版,尤其是在我的主计算机上。但我知道人们经常进行"发行版切换"。我想问你们:你们是怎么做的?

简单但往往错误的方法

当然,有个简单的答案:将/home目录放在单独的磁盘上,然后使用新的启动镜像。听起来很容易,但事实并非如此。如果你对系统不做太多定制,这可能有效。但即使你没有在根级别自定义东西,如果更改桌面环境甚至桌面环境版本,仍然会遇到问题。配置文件会随时间变化。如果你想在哲学不同的发行版之间切换,比如systemd与传统init系统;apparmor与SELinux,那就祝你好运了。因此,仅仅让新发行版指向你的home目录并不总是那么简单。

我尝试新东西的一个方法是使用虚拟机。这在现在很容易实现。但如果你的目标是真正切换到新发行版作为日常使用,这并不令人满意。

切换的原因

出现这个问题的原因是我通常喜欢KDE,并且使用Kubuntu多年。它们在KDE桌面上往往有些滞后,所以当KDE推出Neon时,我就被吸引了。然而,由于它们都基于Ubuntu/Debian,存在一个基本可用的升级路径,可以将Kubuntu安装转换为Neon。

快进到今天。Neon最近表现不佳。我听说只有一名志愿者在维持它。KDE决定将重点转向一个新发行版,这个发行版做的一些事情我并不热衷(不可变系统;Wayland)。所以是时候再次切换了。

我听说OpenSUSE在跟进KDE方面做得很好,而且Tumbleweed的滚动发布很吸引我。于是我做出了切换。

困难的方式

我绝不建议你这样做。这是个糟糕的主意,虽然成功了,但花费了很多精力。即便如此,这只能成功是因为我的磁盘存储远远超过需求:我的根文件系统远低于3TB,而我约有9TB的RAID作为主硬盘。当然,你应该有备份。但如果你曾经不得不从备份恢复,就知道那并不有趣。有备无患总是好的。

我做了什么?我使用kvm建立了一个虚拟机,然后在上面安装了Tumbleweed。我关闭了btrfs功能,因为我不打算使用它们。然后我开始匹配我的Neon桌面。所有KDE设置。所有我设置的特殊systemd服务和计时器。我运行自己动态DNS的系统。尽可能多的所有东西。

我达到了在虚拟机中工作舒适的程度。我的浏览器和所有其他工具都已准备就绪并配置完成。

你知道我忘了些什么。我也知道,所以我想保存东西作为参考。首先,我从实时镜像启动,并在/NEON下复制了整个根文件系统。然后我重新启动,创建了一个新的虚拟机,并在上面启动了一个"实时"ISO文件。

不眠之夜

下一步是将/NEON目录的快照复制到虚拟机中。当然,我本可以使用LVM快照,或者如果我还在使用btrfs,可以使用它的快照。但我有充足的磁盘空间,特别是在从副本中修剪掉一些非常大的目录之后。

顺便说一下,关键是使用nbd程序挂载虚拟机的磁盘镜像。如果你有nbd模块,需要加载它,然后使用nbd导出它。从那里,你可以得到一个可以像其他设备一样挂载的设备。我会解释它,但你真的不应该把这当作指导。不过,如果你需要这样做,[shamil]有一个很好、简洁的解释。

当然,新的虚拟机不会启动。你必须绑定挂载所有运行中的目录(如/run和/proc)到正确的挂载点,然后chroot到挂载的文件系统中。在那里,你可以重新构建init镜像并运行grub。之后,你应该能够在新的虚拟机中启动旧的Neon系统。

美妙之处…

我已经有一段时间没有从CD安装Linux了,但你仍然有ISO文件。

所以在这一点上,我没有对我的主操作系统做任何更改。我有一份备份用的副本,并且能够使用虚拟机启动它的克隆。我也可以使用不同的虚拟机启动目标系统。

下一步是再次启动到实时镜像,并清除根文件系统上的几乎所有内容,当然除了/NEON和虚拟机,它们在单独的驱动器上。

我考虑过运行Tumbleweed安装程序,然后从虚拟机复制文件,但我决定手动完成。我再次使用nbd将文件从新虚拟机复制到真实的根驱动器。然后我不得不再次执行整个绑定/挂载/chroot/重新安装的步骤。

它能启动吗?

事实上,它确实启动了。有一些小问题,主要是由于自己造成的问题。当我恢复一些大目录和一些基于SSD的临时目录时,我创建了一些有趣的SELinux问题需要追踪。当然,我也忘记了一些深度安装的东西。但这并不是问题。我仍然可以从/NEON获取东西,甚至可以在虚拟机中启动Neon安装来比较东西。

我快要到删除额外副本的地步了。我已经释放了Tumbleweed虚拟机。但我想到了:我不会再这样做了。这引出了我的问题给你。如果你进行发行版切换,你是怎么做的?在评论中告诉我们。不过,现在的思路是拥有一个最小系统,然后把所有东西放在自己的容器中。

再次恳求你,不要效仿我的例子。这工作量和风险都太大了。但我也疯狂到重新定位/usr。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计