Contents

Linux系统映像创建和还原

1. 概述

如果我们想要创建处于特定状态的系统备份,那么创建 Linux 系统的映像会非常有用。例如,我们可以根据自己的喜好配置 Linux 服务器,然后创建一个可重用的映像。这样,我们就不需要安装 Linux 并从头开始配置它。

在本教程中,我们将讨论如何创建 Linux 机器的映像并在稍后恢复它。首先,我们将从流行的Clonezilla 套件开始创建完整的系统映像并进行部署。然后,我们将了解大多数 Linux 发行版附带的dd 实用程序。

最后,我们将介绍出于相同目的的GNOME 磁盘实用程序。

2. Clonezilla

**Clonezilla 是一组实用程序,我们可以使用它们来创建、恢复和部署映像。**手动管理系统映像的方法非常乏味。Clonezilla 可以简化这个过程来管理系统映像并将它们部署到单个或一组计算机上。

除此之外,Clonezilla 是免费的,因为它是开源的。不仅如此,它还允许我们在远程设备上克隆和恢复磁盘映像。

**我们可以通过两种方式使用 Clonezilla:Live Clonezilla 发行版和命令行工具。**两种方法创建和恢复映像的过程是相同的。因此,我们将选择前者。

然而,在我们开始之前,我们应该了解我们的分区是如何排列的:

$ lsblk
NAME   MAJ:MIN RM   SIZE  RO TYPE MOUNTPOINTS
sda      8:0    0 119.2G  0  disk 
├─sda1   8:1    0   1G    0  part /
└─sda2   8:2    0   3G    0  part

我们的 Linux 系统安装在*/dev/sda磁盘上——具体来说,在/dev/sda1分区上。我们的数据分区是/dev/sd* a2 ,这是我们将写入*/dev/sda1*映像的地方。

2.1. 创建可启动的 Clonezilla Live USB 记忆棒

我们需要从官方网站获取 Clonezilla 的 ISO 或 ZIP 映像。下载后,我们需要将存档的内容提取到我们的 U 盘中:

$ unzip -d clonezilla-live-12.1-amd64.zip /mnt/pendrive

就是这样。现在,我们有一个包含 Clonezilla Live 发行版的可启动 U 盘。

2.2. 引导进入 Clonezilla Live

让我们重新启动我们的系统并从菜单中选择我们的可启动 USB 记忆棒。一旦 Clonezilla 成功启动,我们将看到一个 GRUB 菜单:

/uploads/system_image_create_restore/1.png

让我们继续并选择第一个选项。

2.3. 创建系统映像

Clonezilla 成功初始化后,我们将选择我们选择的语言:

/uploads/system_image_create_restore/2.png

现在,我们将使用 Clonezilla 向导来自动化我们的映像创建过程:

/uploads/system_image_create_restore/3.png

在下一个提示中,我们需要选择模式。在我们的例子中,我们对device-imagedevice-device模式感兴趣:

/uploads/system_image_create_restore/4.png

两者的区别在于输出。设备映像模式下,我们将从 Linux 系统分区创建一个映像并将其作为文件存储在另一个分区中。

另一方面,如果我们想将我们的 Linux 分区克隆到另一个分区,那么我们将选择device-device模式。如果我们想将我们的 Linux 系统克隆到一个新的硬盘驱动器,则device-device模式很有用。

选择模式后,我们需要选择存储映像的来源:

/uploads/system_image_create_restore/5.png

在这种情况下,我们希望将映像存储在本地硬盘驱动器上的另一个分区中。所以,让我们选择local_dev选项。 在下一步中,Clonezilla 将尝试扫描连接到我们机器上的磁盘——包括 USB 设备。之后,它将准备好准备挂载点,通常是*/home/partimg*:

/uploads/system_image_create_restore/6.png

/uploads/system_image_create_restore/7.png

Clonezilla 检测到*/dev/sda*设备,这是包含我们的 Linux 系统的这台机器上的主硬盘。让我们继续,按 CTRL+C 继续:

/uploads/system_image_create_restore/8.png

Clonezilla 将提示我们是否在目标分区上运行fsck 。让我们跳过这一步:

/uploads/system_image_create_restore/9.png

现在,Clonezilla 将尝试挂载我们要存储映像的分区。在这种情况下,它是*/dev/sda2*,所以让我们继续选择它:

/uploads/system_image_create_restore/10.png

我们可以在目标分区中选择一个路径。我们将保持原样并选择Done

/uploads/system_image_create_restore/11.png

按 Return 后,系统将提示我们进入向导配置模式。我们将使用*Beginner *模式,因为我们不需要配置任何高级选项:

/uploads/system_image_create_restore/12.png

之后,我们需要选择是否要创建整个磁盘或特定分区的映像:

/uploads/system_image_create_restore/13.png

我们将使用saveparts选项,因为我们只需要创建 Linux 分区的快照。

然后,我们可以选择为映像命名或使用默认名称:

/uploads/system_image_create_restore/14.png

接下来,我们需要选择要从中创建映像的分区。Clonezilla 足够聪明,可以将我们的目标分区排除在外,因此我们不认为这是一个选项:

/uploads/system_image_create_restore/15.png

在此步骤中,我们可能会遇到一个错误,要求我们卸载源分区。原因是我们的源分区的状态可能会在映像创建过程中发生变化。因此,它会导致映像无法按预期工作。

选择我们的源分区后,向导将提示我们检查和修复选项:

/uploads/system_image_create_restore/16.png

/uploads/system_image_create_restore/17.png

我们将简单地跳过检查分区并选择创建映像后检查映像的选项。

在下一步中,我们需要选择是否要加密我们的映像,我们将跳过:

/uploads/system_image_create_restore/18.png

在最后一步,Clonezilla 将提示我们进行确认:

/uploads/system_image_create_restore/19.png

确认后,Clonezilla 将开始映像创建过程。

创建映像后,我们将能够在目标分区中看到它:

/uploads/system_image_create_restore/20.png

2.4. 恢复映像

到目前为止,我们已经使用 Clonezilla 向导创建了映像。同样,我们也可以使用向导来恢复镜像。我们所需要的只是简单地启动到 Clonezilla Live USB 记忆棒并选择device-image模式。

之后,Clonezilla 将尝试扫描磁盘并查找任何恢复映像。我们需要选择我们的目标分区来恢复镜像。但是,在接下来的步骤中,我们需要选择restorediskrestoreparts选项:

/uploads/system_image_create_restore/21.png

Clonezilla 将挂载所需的分区并将映像还原到我们的磁盘或分区。

3. 备选:dd

dd是一个低级的逐字节复制实用程序。如果您不太了解它的运行方式,那么它是一个相当危险的实用程序。

** dd基本上创建分区甚至硬盘的完整克隆。**我们可以将此原始备份转储到一个文件中,以便稍后恢复。

3.1. 映像创作

我们使用dd创建系统映像的方法 是将整个 Linux 磁盘或分区转储到外部驱动器中的文件中。目标磁盘的可用空间应大于我们的实际映像。

首先,让我们看一下我们拥有的分区的概述:

NAME   MAJ:MIN RM   SIZE    RO   TYPE  MOUNTPOINTS
sda      8:0    0   119.2G   0   disk 
├─sda1   8:1    0     128M   0   part  /boot/efi
└─sda2   8:2    0     16.1G   0   part  /
sdb      8:16   1    29.3G   0   disk 
└─sdb1   8:17   1    29.3G   0   part

/dev/sda是我们的主 Linux 磁盘,而*/dev/sdb是外部驱动器。在我们创建映像之前,让我们安装并cd*到我们的外部驱动器:

$ mount /dev/sdb1 /mnt

现在,我们将创建*/dev/sda驱动器的映像并将其转储到/mnt/sda.image*:

$ dd if=/dev/sda of=./sda.image

根据磁盘的大小,需要一段时间才能完成。

3.2. 压缩

映像文件的大小将会很大。幸运的是,我们可以使用**gzipbzip2 等压缩程序压缩映像以获得稀疏映像**:

$ sudo bash -c "dd if=/dev/sda | gzip > ./sda-$(date -I).image.gz"
$ sudo bash -c "dd if=/dev/sda | bzip2 --best > ./sda-$(date -I).image.bz2"

请注意,sudo 通常不适用于重定向。出于这个原因,我们需要创建一个新的bash实例作为sudo。因此,重定向操作也将以root 身份运行。

3.3. 映像修复

对于未压缩的磁盘映像,我们需要将输入文件指定为映像,将输出指定为分区或磁盘

$ dd if=./sda.image of=/dev/sda

为了恢复压缩映像,我们只需将映像的输出通过管道传输到dd

$ gzip -c ./sda-2022-05-20.image | sudo dd of=/dev/sda
$ bzcat ./sda-2022-05-20.image | sudo dd of=/dev/sda

3.4. dd的缺点

虽然dd无处不在且易于使用,但在我们制作分区和磁盘映像时它有其缺点。dd的缺点之一是使用起来非常危险。例如,不正确的分区号或键入of而不是if可能会导致覆盖我们正在尝试备份的内容。

另一方面,当我们恢复分区时,目标分区应该与我们拍摄的分区大小相同。但是,我们可以在恢复备份时扩展分区。

相反,对于整个磁盘,如果我们试图恢复同一磁盘的映像,则无需担心磁盘大小

4. 备选方案:GNOME 磁盘

**GNOME Disks 是udisks 的 GUI ,它是 GNOME 桌面环境附带的磁盘管理服务。**在其他桌面环境中,我们可以使用包管理器从我们发行版的官方包存储库中简单地安装gnome-disk-utility

打开 GNOME 磁盘后,我们将看到磁盘的高级视图:

/uploads/system_image_create_restore/22.png

现在,如果我们想创建磁盘映像,只需从“磁盘”菜单中选择*“Create Disk Image”*选项即可:

/uploads/system_image_create_restore/23.png

在我们创建映像之前,请确保磁盘的分区已卸载。

接下来,让我们为我们的映像选择一个名称,然后单击*Create *按钮开始创建映像:

/uploads/system_image_create_restore/24.png

同样,要恢复镜像,我们可以从菜单中选择Restore Disk Image选项,然后选择我们要恢复的磁盘镜像。