克隆安装的最佳方法(将其复制到相同的硬件)

有点像this question,但有一点不同(我想),因为我有6台完全相同的Acer Aspire Revo R3610机器。其中一台已经(几乎)按照我的要求配置好了- 当我准备完毕后,我希望其他5台机器完全相同。我对Ubuntu非常陌生,有没有最简单(最容易)的方法可以做到这一点?

如果这可能成为问题(例如在Windows中,您可以克隆磁盘,但如果它们将在同一网络上运行,则之后必须进行注册表更改),那么这些机器将放置在不同的网络上。强调一下,所有6台机器的硬件是相同的!

如何高效地将一个源镜像克隆到这些相同的机器上?

请每个答案仅限一个软件/解决方案

12个回答


1完全是适合这项工作的工具。我妈妈运行着“Mumbuntu”,我定期使用Clonezilla对她的Acer Revo进行快照,并将其带回家作为备份在我自己的Revo上进行恢复。效果非常好。 - popey
7使用像partimage和ntfsclone这样的工具(这就是Clonezilla用来创建磁盘映像的工具)的一个好处是它们能够理解每个分区上的底层文件系统,从而只复制已使用的块。由于dd没有这个功能,它必须复制分区的每个字节,无论是否被使用。 - Evan
1真糟糕。两天的工作都失败了,克隆过程一直卡在计算位图上...建议使用Windows和Acronis Trueimage。 - Olcay Ertaş
DD不会制作可引导的备份CD吗?这就是为什么要使用CloneZilla的原因吗? - user25165
@YumYumYum:dd是用于复制文件/分区/驱动器的工具。因此,如果你克隆一个可启动的光盘(无论是.iso镜像还是CDFS分区),结果也将是可启动的。但dd无法将给定的文件夹/文件集合“转换”为可启动镜像。 - MestreLion
Clonezilla制作了一个“几乎”完美的副本。几乎所有功能都可以正常运行,除了Chromium浏览器。它似乎启动了,然后就悄无声息地退出了。所以这里有一个解决方案:进入软件安装程序,将其移除,然后再重新添加并登录Google账号,以获取书签和扩展。 - SDsolar

dd

低级别的复制使用dd命令就可以搞定!
注意冲突的IP地址和主机名。
基本上,将源驱动器和目标驱动器放在同一台机器上,启动到Live CD。然后运行以下类似的命令,其中/dev/sda是源驱动器,/dev/sdb是目标驱动器: dd if=/dev/sda of=/dev/sdb bs=4096 我记住这些操作数: if -> 输入文件 of -> 输出文件 bs -> 块大小(每次读取多少字节)

3当然可以,我见过有人这样做,也见过有人不这样做。是否有某个风格指南来回答这个问题呢? - Derek
如果您启用了动态IP,请在制作可启动/备份CD/USB之前进行临时设置。我相信不会有任何冲突IP的问题。只要它能完整备份从A到Z的内容,这对我来说才是最重要的,因为我有很多驱动程序。 - user25165
2考虑到例如OpenSSH使用的任何公钥/私钥都是相同的,这个系统有多安全?为了保证系统的安全性,我们需要做哪些改变(在我们希望不同的地方进行不同的改变)? - jos
你说的“something like this”是什么意思?我对sda和sdb很确定,但不明白为什么你选择了那个bs。 - SDsolar

最简单的方法是在硬盘上运行一个精简版的Ubuntu安装,安装VirtualBox并设置一个虚拟的Ubuntu机器。运行你的虚拟机并设置那个安装,就像你想要的那样,带上所有你想要的功能和花哨的东西。在虚拟计算机上进行所有的工作和娱乐。
VirtualBox将虚拟机保存为一个大的磁盘映像文件(.vdi),以及一些其他较小的配置文件。每当你想备份你的虚拟机时,只需关闭它并将其目录复制到备份位置。我使用一个Passport外部驱动器来完成这个目的。
现在,这个外部驱动器上有一个Windows 7和一个Ubuntu 12的虚拟机。所有的系统更新、程序、个人文件、图片等都保存在这些虚拟机中。这种类型的备份非常快速,因为一个大的磁盘映像文件比一堆单独的文件传输得更快。由于VirtualBox始终以这种格式保存文件,所以虚拟机始终配置为可以备份。
一个这样设置的优点是,我可以在任何安装了VirtualBox的计算机上运行这些虚拟机,只需使用外部驱动器。现在,不再需要携带我的电脑四处奔波,只需携带装有Windows和Ubuntu的外部驱动器,在计划使用的计算机上安装VirtualBox(我也将所有VirtualBox安装文件存储在外部硬盘上 - 它们适用于所有主要操作系统),然后就可以开始工作了。我可以将虚拟机复制到正在使用的计算机上,或者直接从外部驱动器上运行。
如果你的计算机在某个时候崩溃了,没关系,你只需拿出Ubuntu安装光盘,在新的或修复过的计算机上安装它,连接上外部驱动器,安装VirtualBox,并将虚拟机复制回计算机上 - 问题迎刃而解,几乎没有压力、时间和数据损失。你丢失多少数据取决于你上次备份的时间。对我来说,每当我进行重大更改或添加难以获取的程序时,我都会进行新的备份。只需确保在备份时你的虚拟机正常运行。你肯定不想将一个损坏的虚拟机复制到一个好的虚拟机上。
不,我不是VirtualBox的员工。

1喜欢它。点赞。也许我下一台机器就会这样做。 - SDsolar
非常酷的方法! - Insideup

使用Remastersys创建一个镜像,使用Startup Disk Creator工具将其转移到U盘,并在其他系统上安装。

我会按照你的要求为你准备一台电脑,并安装openssh-server软件包。使用ssh-keygen -t rsa生成一个SSH密钥对。将公钥添加到/root/.ssh/authorized_keys2文件中。然后,我会使用Live CD引导新的计算机,并插入带有SSH私钥的USB存储设备。使用gparted创建一个新分区。然后挂载新分区并运行类似于sudo rsync -avzx -e "ssh -i /media/disk/path/to/privatekey" --exclude=".gvfs" root@<ImageComputerIP>:/ /path/to/new/partition/的命令来同步文件。

使用blkid命令找到刚创建的文件系统的UUID。编辑/path/to/new/partition/etc/fstab文件以反映新的UUID(如果你使用了不同的文件系统,则还需修改文件系统类型)。

然后,我会按照https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot上的说明进行chroot安装。

那个页面的简化版本(不考虑lvm、软件raid、bcache或单独的/boot,就像维基页面所做的那样):

挂载关键的虚拟文件系统。将以下命令作为一个整体运行:

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

进入您的正常系统设备:
sudo chroot /mnt

重新安装GRUB 2(用sda、sdb等正确的设备替换,不要指定分区号):
grub-install /dev/sdX

重新创建GRUB 2菜单文件(grub.cfg)
update-grub

退出 chroot:在键盘上按下 CTRL-D
顺便说一句,这对备份也很有效。与 Windows 不同,Ubuntu 在移植到不同硬件上似乎没有问题。我曾经将一个计算机的硬盘放到另一台计算机上,它表现得很好,我也曾经将安装复制到不同的硬件上,它也表现得很好。

谢谢这个 - 我很快会有另一个,我会试试这个。干杯 - robsoft
所引用的链接目前并未提及chroot或任何方法。这就是为什么引用来源中相关部分是个好主意的原因。 - Henno
@Henno 维基页面已经移动。包含该页面的问题在于维基会随着新内容(如bcache)的更新而更新,如果仅仅复制页面内容就会错过这些更新,但只链接的缺点是内容可能会移动。无论如何,链接已更新,同时还包含了简化版本。 - Azendale

Partimage

另一个我也使用过的很棒的克隆工具,还带有终端图形界面。


这是包含在系统救援光盘中的内容 -> http://www.sysresccd.org/Main_Page - hhlp
partimage不支持ext4或btrfs source - Anwar
那就排除了我。ext4 - SDsolar


1链接失效是为什么这个答案至少应该包含一些细节的原因。比如,至少要说明如何安装和启动它。 - SDsolar

G4L

Ghost for Linux

Ghost for Linux是一款类似于Norton Ghost(c)和(tm)的硬盘和分区镜像克隆工具,由Symantec开发。创建的镜像可以选择性地进行压缩,并且可以存储在本地硬盘上或传输到匿名FTP服务器上。使用Click'n'Clone功能可以克隆驱动器。如果本地文件系统不支持写入大于2GB的文件,则g4l支持文件分割。所包含的内核支持ATA、串行ATA和SCSI驱动器。常见的网络卡也得到支持。它被打包为一个可引导的CD映像,并配有ncurses图形用户界面,方便使用。


哇塞!这正是我多年来一直想要的东西。甚至还适用于Windows系统。谢谢你的帖子。我会立刻去查看的。 - SDsolar

Fsarchiver

我不知道为什么没有人提到这个。当你想要将分区的内容恢复到另一种文件系统类型(例如,将ext4内容恢复到ext2或reiserfs)或者想要恢复到一个较小的分区时,这是非常方便的。

我使用过它,而且非常容易。例如,要克隆一个分区,比如/dev/sda1,你可以使用类似下面的命令:

fsarchiver -A -j 2 -z 1 savefs /media/anwar/USB_Drive/myrootpartition /dev/sda1

-A选项允许您复制分区,即使它正在使用中!非常棒的功能!

-j 2表示使用2个CPU核心进行压缩。适用于多核CPU和使用压缩的情况。

-z 1设置压缩级别。

要恢复您使用的文件系统。

fsarchiver restfs /data/myrootpartition.fsa id=0,dest=/dev/sda2

id=0表示您正在从存档中恢复第一个文件系统(即使您没有在单个存档中保存多个分区,也需要指定它)。而dest=/dev/sda2设置了恢复的目标位置。


我经常这样做,使用rsync。

首先,您可以运行rsync将所有数据加载到外部硬盘上(您的外部硬盘应该是ext4格式 - 我使用这种格式,所以我知道它可行): 我假设您有两个分区:/dev/sda1(根)和/dev/sda2(交换)。

在您原始的计算机上运行:

sudo rsync -avuorpESHAX /* /your/hard/drive

复制数据后,使用USB闪存驱动器启动您的下一台计算机,并将内部硬盘格式化为原始硬盘。
将外部驱动器挂载到/mnt,并复制所有分区的UUID。编辑新计算机的分区UUID,并将与原始数据中复制的UUID相同的UUID放入其中(它位于/mnt/etc/fstab)。
关闭交换空间:
sudo swapoff -a

使用从/mnt/etc/fstab复制的原始UUID创建一个新的交换空间。
sudo mkswap /dev/sda2 -U original-UUID

(我假设你的交换分区在 /dev/sda2
接下来,修改 /dev/sda1 的UUID:(在更改UUID之前应该卸载该分区)
sudo umount /mnt
sudo tune2fs /dev/sda1 -U old-UUID

完成后,挂载目标分区:
sudo mount /dev/sda1 /mnt

反向rsync到目标位置:
sudo rsync -avuorpESHAX /media/your-backup /mnt

重新安装grub:
sudo grub-install --root-directory /mnt /dev/sda

这个会起作用。 记得编辑/etc/hostname/etc/hosts来改变每台机器的主机名,以避免网络冲突。