如何将我的整个Ubuntu系统复制到另一台计算机并运行?

我花了很多时间来配置我的笔记本电脑(128GB固态硬盘,已使用60GB),因为我安装了MATLAB、LaTeX、Mathematica和一些仿真软件。如果我能够将整个固态硬盘复制到另一台笔记本电脑的固态硬盘上,我就不想再重复配置/安装这些东西了。
我找到了一些旧帖子如何将我的Ubuntu系统(笔记本电脑)复制到另一台笔记本电脑?但它们推荐使用CloneZilla,它对系统包大小有限制(不能超过4GB),也许有更好的解决方案吗?

3类似这样的吗?sudo rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /destination/path https://www.ostechnix.com/backup-entire-linux-system-using-rsync/ - kenn
@kenn,是的,我想将整个系统复制到新设备上,这样我就可以避免在新电脑上重复安装/配置软件。 - Ben
2个回答

CloneZilla的效果非常好。
它生成的镜像文件很小,具有完整性检查功能,并且速度快。

如果您想使用第三个设备作为镜像库,创建第一个磁盘的镜像时应选择device-image,然后在将其恢复到第二个磁盘时选择image-device

如果您只想使用两个磁盘,则应使用device-device模式。

可选地,您可能希望生成新的UUID、SSH密钥(如果安装了SSH服务器)并更改主机名。


1最近,我发现了一个叫做"TimeShift"的工具,我觉得我可以使用这个工具创建快照,然后在其他笔记本电脑上恢复,实现系统迁移。 - Ben
你可以在成功的情况下写更多关于TimeShift的内容,这将非常有用。 - N0rbert

我确定有很多方法,所以预计其他人会有非常不同的答案。
对于这种情况,如果你有一个驱动器坞,那会帮助很多:一个可以将额外的固态硬盘放在笔记本外部的USB设备。我将集中讨论这样的安排。我还假设您习惯于使用命令行进行操作。我将主要使用默认安装的软件。
我会从安装介质上运行,比如包含您版本Ubuntu的DVD,并选择“尝试Ubuntu”,这样您就不会从要复制的驱动器上运行。打开终端(点击桌面并键入Ctrl-AltT)。成为超级用户(sudo -i并使用您的用户密码)。
命令df -h将给出一个可读性强的分区列表。您可能会发现您的固态硬盘上的所有内容都被列为/dev/sda<something>。因此,/dev/sda将是您要复制的所有内容的源。
您可以
ls -l /dev/sd*

展示硬盘和它们的分区。你只应该看到在/dev/sda下的东西。
现在把目标SSD放入驱动坞并启动它。
现在,再试一次:
ls -l /dev/sd*

我希望至少能看到/dev/sdb,也许还有一些编号的分区。如果是这样,一切都很好,除非你确信自己真的想要销毁所有那些/dev/sdb分区。如果只有/dev/sdb本身,那就没有分区。
现在,如果两个SSD驱动器的大小相同,那就很容易了。只需复制整个驱动器。我的常用技术是
dd if=/dev/sda of=/dev/sdb bs=102400

if=指定源文件("输入文件"),of=指定目标文件("输出文件")。千万不要搞混了这两个!!!

bs=指定块大小,这里大约是100K。默认值只有512字节,速度非常慢。你希望它至少是1024的倍数。由于存在零值,这里是4096的倍数。

结果是可行的,但有点奇怪,因为所有分区的UUID也被复制了。奇怪之处在于,“UUID”代表通用唯一标识符,但它们不再是唯一的。这个问题可以修复,但最好单独提问。在修复之前,绝对不要尝试在同一台机器上使用这两个驱动器进行任何操作,因为内核很可能会对哪个分区是哪个分区感到困惑。在复制完成后,立即将副本从托盘中取出。

如果目标驱动器比您的笔记本电脑上的驱动器大,并且笔记本电脑驱动器具有旧的MSDOS分区表,您仍然可以使用这种技术,但是驱动器末尾将会有一些未分配空间。

在其他所有情况下,您可能需要调整分区的大小,并逐个复制它们。这也可能是在另一个问题中更好的选择。
如果您要提出另一个问题,我建议您提供一些额外的信息:
1. 驱动器的大小是多少?您说现有的驱动器是60GB,但其标签可能还列出了LBA的数量,这可以提供更详细的信息。 2. 现有分区表的类型是什么?几乎肯定是MSDOS或GPT。您可以通过gparted等工具找到答案。