有哪些选项可用于捕获 Ubuntu 安装并在之后恢复到原始状态?

有哪些选项可用于捕获 Ubuntu 安装并在之后恢复到原始状态?

为了进行测试,我一直在 VMware 下的 Windows 机器上使用 Ubuntu Server VM 并禁用持久存储。重新启动后,我回到了原始机器配置。对我来说,返回包含一些最少工具的原始配置非常简单。

现在我有一台专门用于此任务的独立机器,我想知道我是否可以避免使用虚拟机或 Docker,因为我的安装需求不是太复杂。唯一的问题是我的更改触及了 /etc/ 和其他地方的文件,这使得删除所有内容更可取。有没有其他方法可以替代使用 dd 备份和恢复机器

我对 dd 的问题是,我需要使用其他媒体启动它才能恢复原始映像。我希望它像运行脚本一样简单。花些时间进行恢复并不是什么大问题,但我希望它尽可能无头运行。

答案1

使用 clonezilla 恢复系统

下载:

  • Clonezilla ISO 映像。
  • Clonezilla 压缩包。

设置

  1. 使用 Clonezilla 克隆所需分区的映像,并将其保存在辅助或外部磁盘¹中。注意映像的大小。

  2. 创建一个足够大的分区来存储创建的映像和 Clonezilla 提取的 ZIP。记下分区号。

  3. 在创建的分区中提取 Clonezilla ZIP 文件的内容。

  4. 将以下代码添加到文件,替换分区号/etc/grub.d/40_custom中的 X ,例如:msdosXmsdos2

    menuentry "Restore" {
       set root='hd0,msdos2'
       linux /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 noeject locales=en_US.UTF-8 keyboard-layouts=en ocs_live_run="sudo bash /lib/live/mount/medium/restore" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
       initrd /live/initrd.img
     }
    
  5. 跑步sudo update-grub

  6. 再次使用 Clonezilla 克隆所需分区的映像,并将其保存在创建的分区中。

创建 Clonezilla 的命令文件

运行 Clonezilla 并开始使用创建的映像执行恢复分区任务。当系统询问是否确定继续时,选择否。输入 Clonezillas 的命令行并复制生成的文件以及即将执行的命令。将其粘贴到创建的根分区中。记下名称,它将在下一个脚本中使用。

sudo su -
cp /tmp/ocs-restore-<some date> /lib/live/mount/medium/
reboot

Clonezilla 的脚本

restore在使用以下代码创建的分区的根目录中创建一个名为 bash 脚本:

#!/bin/bash

bye() {
  local rp=(r p)
    while true;  do
    echo -e "\e[33mReboot/Poweroff [r/p]\e[0m"
    read repo
    if [[ ! "${rp[@]}" =~ "$repo" ||  -z "$repo" ]] ; then
      echo "Press 'r' or 'p'..."
      continue
    else
      break
    fi
  done
    case "$resh" in
    r) reboot;;
    s) poweroff
  esac
}

ask() {
  clear
  local yn=(y n)
    while true;  do
    echo -e "\e[33mAre you sure you want to restore? All saved data will be lost. [y/n]\e[0m"
    read yesno
    if [[ ! "${yn[@]}" =~ "$yesno" ||  -z "$yesno" ]] ; then
      echo "Press 'y' or 'n'..."
      continue
    else
      break
    fi
  done
    case "$yesno" in
    # here the name of the file with the command
    y) /lib/live/mount/medium/ocs-restore-<a date>;;  
    n) bye
  esac
}

[[ ! -f /home/partimag/restore ]] && ln -s /lib/live/mount/medium/home/partimag/restore /home/partimag/restore

ask

完成

重新启动后,您应该会看到一个名为“Restore”的 GRUB 条目,它将使用您的脚本执行 Clonezilla,在询问后启动系统恢复。


¹ 为什么?Clonezilla 的图像与数据分区,而不是尺寸因此图像将小于克隆分区的大小。这对于设置恢复分区的大小。

² 通过对 bash 的一些了解,可以将代码更改为任何需要或期望的内容。

答案2

应用程序“Timeshift”旨在拍摄系统文件的“快照”,以便将系统恢复到以前的状态。它可能适合您的用户情况。

Timeshift 可在 Ubuntu 软件中心安装。

答案3

与您当前的方法有同样的缺点 - 需要使用其他媒体启动 - 但是克隆兹拉是我的解决方案。

相关内容