我已经了解了DDcmd,这可以完美地完成工作,因为人们可以创建硬盘的映像(已安装操作系统)并将其写入其他硬盘。
此方法的问题是,如果您有 2TB 驱动器,并且 OS+MBR/EFI 只有 10GB,您仍然需要复制 2TB 驱动器的整个可用空间块,从而使该方法非常缓慢且低效。将此映像写入新硬盘后,您还必须写入 2TB 的数据。
我想知道是否有更有效的方法来做到这一点,也许我们可以只复制分区设计元数据,然后复制操作系统文件+ MBR/EFI 数据?忽略自由空间块?
答案1
一种低技术且快速的可能性是将文件系统缩小到仅包含其所包含的内容,重新生成分区表,并仅重新生成每个分区的占用部分。复制后,扩大每个文件系统以填充其分区。
但您应该使用可以为您解决此问题的工具。部分图像可以保存和恢复文件系统,并且只保存使用过的部分。所以可以克隆属。所以你的问题的答案实际上是:使用partimage或clonezilla。
请注意,当您进行此类部署时,最终将在所有计算机上获得相同的文件系统。您将拥有相同的文件系统 UUID、相同的初始 RNG 状态、相同的 SSH 私钥等。只要每个克隆独立发展,UUID 冲突并不重要,但这违反了 UUID 是唯一的期望,例如,如果来自多个克隆的文件系统最终安装在同一台机器上,则可能会出现问题。如果实例在有时间自行收集之前启动并使用,则 RNG 状态可能会出现问题。私钥肯定是有问题的。因此,克隆后,您应该对每个实例执行个性化步骤(另请参阅将 Linux 安装移动到新计算机)。
另一种方法是在每个克隆上创建一个新的文件系统并单独复制文件(根据cp -a
我的经验,GNUcp
擅长保留所有元数据)。然而,这可能比直接文件系统副本慢,特别是在旋转介质(HDD 而不是闪存)上,读取文件将涉及大量来回查找。
答案2
金博只是一个想法。你能做的就是使用。
cfdisk /dev/sda
根据您自己的要求更改驱动器号。然后在其上创建一个 10/11 Gb 分区。
然后对新创建的分区使用 dd 。可以嵌套分区。
partprobe && dd if=/dev/sda1 of=/dev/sda1p2
然后使用 cfdisk /dev/sda1 在目标驱动器上使用 cfdisk 创建 GPT,并使用 dd 将数据复制到新目标。
dd if=/dev/sda1p2 of=/dev/sda1
dd 的一个问题是您会发现它逐字节复制,因此速度很慢并且驱动器的 UUID 不会改变。例如,如果您将驱动器放入一台计算机中并尝试将其迁移到具有相同 LVM 卷 UUID 的另一台计算机,这可能会导致冲突。另外要非常小心,它不是无缘无故地被称为“磁盘销毁器”的,因此请确保驱动器正确。
正如其他人提到的启动器、PXEboot 或使用 Rsync 服务器并在设置分区后拉下文件系统也可以完成。如果您要部署许多系统但不想设置服务器。然后考虑根据您的需求修改自动部署脚本之类的内容。事实上,我有一份非常粗略的草稿,你可以在这里使用......
https://github.com/cyphernix/arch-enemy
祝你好运!
答案3
要将操作系统部署到多台同一台计算机,我们应该首先仅备份操作系统(傲梅备份很有帮助)。由于节省时间和空间,这是最好的方法,因为我们都知道文件越小,备份所花费的时间就越少,占用的空间也就越少。