是否可以实时将完整系统还原到远程 Linux VM?
假设远程系统以 Ubuntu 15.04 启动,然后我在 Ubuntu 15.04 运行时将 Ubuntu 18.04 完整系统恢复到它,然后下次启动时,系统将变成 Ubuntu 18.04。 可能吗?
因为它是远程虚拟机,所以我无法启动 Live-CD 或任何东西来挂载虚拟机的磁盘,对吗?
更新/结论:无法实时恢复到远程 Linux VM,因为无法直接挂载和编辑虚拟机磁盘,至少在我使用的 Microsoft Azure 中无法做到。此外,内核启动选项toram
是仅适用于 Live ISO/USB,但迁移到新硬盘是可行的。谢谢@Xen2050。
答案1
如果你可以使用内核/启动选项
toram
将所有系统文件复制到内存中,那么你应该能够随意编辑底层磁盘。这适用于实时 ISO/USB,因此您可以更新/覆盖/删除启动设备。我只是不确定常规 Ubuntu 安装是否支持toram
(显然不支持),或者 VM 是否支持(应该支持)。即使进行常规启动,也可能更新所有系统文件,现在甚至支持无需重新启动即可更新内核,我不确定 15.04 是否支持。但最简单的方法肯定是直接安装和编辑 VM 磁盘。
另一个想法是启动旧的 15.04 系统,并创建一个新磁盘(使用虚拟机的新虚拟硬盘),格式化、挂载并将 18.04 文件复制到新磁盘上,然后下次使用 18.04 从新磁盘启动。就像迁移到新硬盘一样。
答案2
(2018 年 12 月 9 日更新:如果您的虚拟机具有“救援”模式和 VNC 访问权限,则可能有一个更简单的解决方案,请参阅帖子底部。原始答案如下。)
是否可以实时将完整系统还原到远程 Linux VM?
可能是的(大多数情况下)。
最简单的方法可能涉及两次重启,而不是一次。
只需重新启动一次即可完成,但可能不值得付出额外的努力。
假设远程系统以 Ubuntu 15.04 启动,然后我在 Ubuntu 15.04 运行时将 Ubuntu 18.04 完整系统恢复到它,然后下次启动时,系统将变成 Ubuntu 18.04。 可能吗?
因为它是远程虚拟机,所以我无法启动 Live-CD 或任何东西来挂载虚拟机的磁盘,对吗?
如果 grub2 是您的引导加载程序,您可以执行以下操作:
- 将实时
.iso
文件(作为文件)复制到您的文件系统。 - 编辑
grub.cfg
以从文件启动内核并初始化 RAM 磁盘.iso
。 .iso
从文件重新启动进入实时操作系统- 从实时操作系统环境执行恢复。
- 重新启动进入恢复的操作系统。
(其他引导加载程序也许也能实现这一点,但我使用的是 grub2。)
更新/结论:实时恢复到远程 Linux VM 是不可能的,因为无法直接挂载和编辑 VM 磁盘,至少在我使用的 Microsoft Azure 中是这样的。
如果您重新启动进入toram
实时 ISO 环境,您应该能够对 VM 的磁盘执行任何操作。
此外,内核启动选项 toram 仅适用于实时 ISO/USB,但迁移到新硬盘是可行的。感谢@Xen2050。
我预计迁移到新驱动器很多如果您的 VM 提供商允许您交换驱动器,则更简单。(我的折扣 VM 提供商确实提供该功能。)
这是grub.cfg
我用来启动 ISO 文件的片段。我将此片段附加到/etc/grub.d/40_custom
,然后运行update-grub
,然后重新启动。
menuentry "Lubuntu 18.04.1 Live ISO" {
set isofile="(hd0,gpt4)/path/to/lubuntu-18.04.1-desktop-amd64.iso"
loopback loop $isofile
linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=/path/to/iso/lubuntu-18.04.1-desktop-amd64.iso toram
initrd (loop)/casper/initrd.lz
}
奇怪的是,启动上述程序后,包含该.iso
文件的文件系统仍将被挂载。请按如下方式卸载它:
root@lubuntu:~# mount | grep sda
/dev/sda4 on /isodevice type btrfs (rw,relatime,space_cache,subvolid=5,subvol=/)
root@lubuntu:~# umount /isodevice
umount: /isodevice: target is busy.
root@lubuntu:~# losetup -a
/dev/loop1: [0029]:265 (/cdrom/casper/filesystem.squashfs)
/dev/loop0: [0028]:259 (/isodevice/path/to/lubuntu-18.04.1-desktop-amd64.iso)
root@lubuntu:~# losetup -d /dev/loop0
root@lubuntu:~# umount /isodevice
root@lubuntu:~# mount | grep sda
鉴于 的全部目的toram
是能够移除磁盘,我发现必须手动分离/dev/loop0
和卸载很奇怪/isodevice
。我可能会将此报告为 Ubuntu 中的错误。
上述方法假设您可以使用 VNC(或同等工具)访问虚拟机的虚拟屏幕、键盘和鼠标。如果您没有 VNC,您可能需要制作一个自定义实时 ISO 文件,该文件将打开网络连接,以便您可以ssh
进入。
2018 年 12 月 9 日更新:
如果您的虚拟机具有“救援”模式和 VNC 访问权限,并且您的操作系统是 Ubuntu,那么可能有一个更简单的选项:
- 将您的虚拟机启动到救援模式。
- 使用救援模式将实时 Ubuntu
.iso
文件直接写入磁盘开头。(警告:这将覆盖分区表,因此您将无法访问磁盘上之前的所有数据。) - 重启。
- 将选项附加
toram
到启动时传递给内核的选项字符串中。(Ubuntu 支持toram
。其他操作系统可能不支持。) - 实时 ISO 系统将完全启动到内存中,您将能够完全重新格式化磁盘。(如果您愿意,可以使用实时 ISO 环境执行标准安装。)
.iso
以下是将文件写入磁盘的示例命令:
# wget -O - <url_of_iso> | dd of=/dev/sdX