克隆系统到另一个磁盘
1. 简介
在本教程中,我们将在介绍所有基本概念和注意事项后,了解如何克隆整个文件系统层次结构。磁盘克隆会生成一个或多个分区或整个磁盘的副本。
克隆工具可以帮助升级磁盘或用新磁盘替换老化的磁盘。我们还可以使用它在虚拟或物理环境中创建相同的机器。在备份软件的上下文中,磁盘克隆与磁盘映像非常相似,旨在在磁盘映像文件中创建磁盘副本。
磁盘克隆还可以用于灾难恢复或取证。
2. 克隆概述
两种主要的克隆模式是“块级克隆”和“文件级克隆”。
2.1. 磁盘级克隆
块级克隆通过绕过对逻辑文件系统结构的任何解释并复制驱动器的内部块级组织来复制数据。它创建一个精确的一对一副本。在大多数情况下,这是更直接的选择,尤其是当目标驱动器的大小等于或大于源驱动器的大小时。
块级克隆不仅复制已识别的文件,还复制已从文件系统中删除、损坏或以其他方式丢失的文件。这就是为什么它有助于取证。
Linux 上典型的块级克隆工具是*dd *和ddrescue 。后者也有助于恢复 Linux 中丢失和删除的数据 。
2.2. 文件级克隆
文件级克隆是指克隆工具将数据从一个驱动器逐个文件复制到另一个驱动器,而不考虑源驱动器和目标驱动器上的逻辑文件系统和文件的物理位置。这种类型的克隆便于更改分区或文件系统——例如,从基于 LVM 的复杂分区克隆到没有 LVM 的更简单分区,或从 LUCKS 加密分区克隆到未加密分区,反之亦然。
此外,文件级克隆允许将克隆与原始磁盘同步。这也意味着复制的文件与原始文件相比进行了碎片整理。
**rsync 是一种快速、通用的本地和远程文件复制和同步工具,也可以作为出色的文件级克隆工具。**许多工具依赖于rsync。 Timeshift 使用rsync和硬链接以增量方式拍摄快照。
3. 磁盘分区和分区工具
磁盘分区是在磁盘上创建一个或多个部分,以便我们可以单独管理每个部分。这些部分称为分区。磁盘将有关分区位置和大小的信息存储在称为分区表的区域中。标准分区表是 GPT(GUID 分区表)。
*每个分区都有一个 UUID(通用唯一标识符),当用于定位它们的其他因素可能发生变化时,有助于在/etc/fstab*中识别它们。**我们可以使用blkid 查看所有 UUID 的列表。
每个磁盘最多可以有四个主分区,或者三个主分区和一个扩展分区。一个主分区包含一个文件系统。扩展分区可以包含多个逻辑分区。一个简单的情况是我们有一个ext4格式的主分区,带有引导标志,我们在其上挂载根目录,另一个主分区格式为交换。
**使用 Linux 管理分区的最简单方法是GParted ,这是一个图形分区编辑器,通常包含在许多 live CD/DVD 中。**在简单的情况下是可以的。另一方面,如果我们需要从命令行操作分区,我们可以参考我们的“ Linux 中的分区磁盘 ”指南。
4. 使用rsync将操作系统从一个文件系统迁移到另一个文件系统
让我们看看要遵循哪些预防措施,使用哪些rsync参数,以及克隆后要执行哪些操作。
4.1. 文件级克隆的一般规则
在我们详细查看要使用的rsync选项之前,我们应该记住一些指导原则。
**由于克隆正在运行的系统可能会导致不可预知的故障和副作用,因此必须使用未安装在源驱动器或目标驱动器上的实时 Linux 系统来安全地执行克隆。**我们必须使用该实时 Linux 系统来挂载源分区和目标分区。这个事实意味着如果目标磁盘是空的,我们必须创建 GPT 分区表并对其进行分区。
如果源文件系统层次结构包括不同分区上的挂载点,我们应该分别克隆它们。在许多情况下,/boot位于一个小分区上,因此在克隆根目录后,我们必须再次运行rsync来克隆*/boot*。
我们必须保留权限、保留文件类型并避免复制虚拟伪文件系统(/dev、/proc和*/sys*)。克隆交换分区或交换文件总是多余的。
文件级克隆可以在文件系统之间进行转换——例如,一个ext3文件系统到一个ext4文件系统。目标文件系统必须支持源文件系统的所有功能;否则,我们会得到意想不到的副作用。例如,从ext4克隆到fat32会导致许多功能的丢失。
克隆之后,我们要根据新的分区修改/etc/fstab 。由于文件级克隆不会克隆 MBR,所以我们还需要重新安装Grub。**
如果机器使用静态 IP 而不是 DHCP,请记住更改克隆机器的网卡配置。
4.2. 克隆的最佳rsync选项
假设*/mnt/sourcePart是要克隆的分区的挂载点,/mnt/destPart*是目标分区的挂载点,让我们继续克隆。请注意,此操作需要 root 权限:
# rsync -axHAWXS --numeric-ids --info=progress2 /mnt/sourcePart/ /mnt/destPart
*让我们小心在/mnt/sourcePart/*中包含最后的斜线。**否则,rsync将复制父目录而不是该目录的内容。 详细地:
- -a是归档模式:它递归到目录中,将符号链接复制为符号链接,并保留权限、所有者、组、修改时间、设备文件和特殊文件。
- -x不跨越文件系统边界。
- -H保留硬链接。
- -A保留 ACL。
- -W禁用用于减少网络使用的增量传输算法。当源和目标都是本地路径时,这是一种提高速度的便捷方式。
- -X将目标扩展属性更新为与源扩展属性相同。
- -S尝试有效地处理稀疏文件,以便它们在目标上占用更少的空间。
- –numeric-ids使用数字 ID 而不是尝试映射它们。尤其需要备份从主机系统看似乎具有虚假 ID 的受监禁系统(BSD 监狱、OpenVZ、VServer、LXC),因为它们有自己的 ID 映射。
- –info=progress2基于整个传输而不是单个文件输出统计信息。
4.3. 修复*/etc/fstab*
/ etc/fstab文件通常会列出所有可用的磁盘分区,以便在引导时自动挂载。*克隆后,我们必须手动编辑/etc/fstab以更新分区的 UUID,我们可以使用GParted或blkid*获取。**通常,这已经足够了,除非我们需要从列表中添加或删除分区,或者更改文件系统类型以匹配新配置。
让我们记住引导分区必须有引导标志。如果它丢失了,我们可以使用 GParted 添加它。
4.4. 恢复grub
无论我们克隆的操作系统是什么,恢复Grub的最简单方法是引导修复 ,这是一种在 live CD/DVD 上可用的图形工具。这是一种运行良好的一键式方法。我们只需点击“推荐维修”按钮。如果修复不成功,软件会提供详细的日志和寻求帮助的说明。
还原后,我们可能想要更改默认选项,例如删除在服务器环境中无用的*“安静启动”选项。在这种情况下,我们可以手动编辑/etc/default/grub*文件。之后,让我们记住运行update-grub 以永久保存更改。