将完整的 Linux 系统还原到实时远程 VM

将完整的 Linux 系统还原到实时远程 VM

是否可以实时将完整系统还原到远程 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 是您的引导加载程序,您可以执行以下操作:

  1. 将实时.iso文件(作为文件)复制到您的文件系统。
  2. 编辑grub.cfg以从文件启动内核并初始化 RAM 磁盘.iso
  3. .iso从文件重新启动进入实时操作系统
  4. 从实时操作系统环境执行恢复。
  5. 重新启动进入恢复的操作系统。

(其他引导加载程序也许也能实现这一点,但我使用的是 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,那么可能有一个更简单的选项:

  1. 将您的虚拟机启动到救援模式。
  2. 使用救援模式将实时 Ubuntu.iso文件直接写入磁盘开头。(警告:这将覆盖分区表,因此您将无法访问磁盘上之前的所有数据。)
  3. 重启。
  4. 将选项附加toram到启动时传递给内核的选项字符串中。(Ubuntu 支持toram。其他操作系统可能不支持。)
  5. 实时 ISO 系统将完全启动到内存中,您将能够完全重新格式化磁盘。(如果您愿意,可以使用实时 ISO 环境执行标准安装。)

.iso以下是将文件写入磁盘的示例命令:

# wget -O - <url_of_iso> | dd of=/dev/sdX

相关内容