我要更换我的机器:从一台装有 Ubuntu 的笔记本电脑换到另一台我要安装 Ubuntu 的笔记本电脑……
我对当前的系统非常满意,我担心的是必须从 0 开始重建一切。
那么人们通常如何克隆 Ubuntu 系统呢?这可能包括数据、软件包、快捷方式设置等...
答案1
有几种方法可以复制您的配置和设置。这取决于您所做的更改有多大。以及您是否要升级到新版本。有些方法在版本间升级时很有用,但要小心,因为它们可能会阻止某些软件正常工作。
方法 1:全新安装
最可靠、最稳定的方法是全新安装,然后复制配置并重新安装所有软件包。这也适用于从旧版本到新版本。有多种方法可以快速完成此操作,并自动完成大部分过程。最慢的部分是必须下载安装介质中未包含的所有软件包。我有 8 个 DVD 磁盘映像,可以让我安装得比下载快得多。
我建议使用此选项,因为设置和安装 grub 可能会导致您的系统无法使用。您需要对 grub 有扎实的了解才能使用方法 2。
在进行新安装(新笔记本电脑)之前,您需要从旧安装(旧笔记本电脑)中复制一些信息。
您的设置或配置
所有保存自定义的文件都存储在两个地方。第一个也是最重要的一个是您的 /home/[用户名] 目录。可能有数百个 .[package-config-dir] 文件和目录。我将列出最重要的文件和目录,但您可以根据需要添加更多文件和目录。此过程可能会导致软件包无法正常工作。因此,执行此操作时要小心。在粘贴新目录之前,请备份新安装的文件和目录。
这些目录和文件不是很大,可能只占用几百兆字节。此方法在升级之间也很有用。您可以非常快速地复制在 Ubuntu 版本之间所做的所有配置更改。
默认情况下,大多数程序在第一次运行时都会创建 .[package-config-dir]。如果不存在,则会重新创建。您不应该依赖此行为,因为并非所有程序都会这样工作。
- 使用 Nautilus 导航到你的主目录 (
/home/[username]
) 选择“查看菜单 → 显示隐藏文件”(或Ctrl+ H)
现在您应该可以看到所有隐藏
.*
目录。您可能需要以 root 身份执行此操作。只需从命令行以 root 身份启动 nautilus 即可。选择以下目录并将其复制到单独的目录。
/home/aaron/.config /home/aaron/.gconf /home/aaron/.gnome2 /home/aaron/.gnome2_private /home/aaron/.local /home/aaron/.mozilla
我对这些文件做了修改。所以我也复制了它们。
/home/aaron/.bash_aliases /home/aaron/.bashrc /home/aaron/.vimrc
您使用的许多其他软件包可能不将配置存储在这些目录中。 您也可以复制它们,但如果程序无法按预期运行,请小心。 您可能需要恢复文件
.*
或目录。 您可以通过简单地删除文件或目录来执行此操作,但在复制目录之前您应该先进行备份。取决于您如何使用系统。您可能对
/etc
目录中的某些文件进行了更改。如果已更改,您也应该复制它们。我为工作创建了一个自定义 smb.conf 文件,并且我有许多用于开发的 Apache 虚拟主机,因此我也复制了它们。您可以复制整个/etc
目录,但如果您的机器在硬件方面没有完全相同的设置,这可能会产生问题。它不会从一台机器转移到另一台机器。/etc/samba/smb.conf /etc/hosts /etc/apache2 # the whole directory.
在安装新软件之前或之后复制配置文件。不要在软件包安装正在运行时执行此操作。这可能会破坏安装。
您已安装的软件包
使用 Synaptic,您可以使用导出标记菜单选项轻松导出所有已安装的软件包。
- 文件菜单 → 将标记另存为
- 勾选“保存完整状态,而不仅仅是更改”
- 选择一个名称和目录来保存此文件(您可能必须将其放在闪存驱动器上。)
然后,您可以通过逆转该过程来重新加载所有已安装的软件包:
- 文件菜单 → 读取标记
- 选择您在第一步中创建的文件。
这可能需要最长的时间。如果你下载了很多包(1Gb 的包),这将需要几个小时。
方法 2:使用磁盘映像
我将把方法 2 单独发一篇帖子。这是一个更高级的选项。它要求您了解分区、安装 grub 并使用命令行。
答案2
有几种方法可以复制您的配置和设置。这取决于您所做的更改有多大。以及您是否要升级到新版本。有些方法在版本间升级时很有用,但要小心,因为它们可能会阻止某些软件正常工作。
方法 1:全新安装
单独发布。如何将 Ubuntu 安装从一台笔记本电脑复制到另一台笔记本电脑
这是最安全的方法,不需要您编辑 grub 和启动设置。非常简单,因为大部分操作都可以使用 GUI 工具完成。
方法 2:使用磁盘映像
这可能是移动的最快方法。因为复制硬盘分区和磁盘映像非常快。如果您不想重新安装每个软件。虽然创建、调整大小和移动磁盘映像可能需要很长时间。如果您不打算升级到新版本的 Ubuntu,我只会推荐这样做。确保您了解磁盘分区和 grub。我所做的大部分工作都将使用命令行。您需要确保在运行命令之前了解命令的作用。对于因以下说明而导致的数据丢失,我不承担任何责任。
第一步创建安装的磁盘映像。
首先我们需要获取一些有关设置的信息。使用parted -l
和mount
$ sudo parted -l
Model: ATA ST9320423AS (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.3kB 197MB 197MB primary ext4 boot
2 197MB 10.2GB 10.0GB primary linux-swap(v1)
3 10.2GB 50.2GB 40.0GB primary ext4
4 50.2GB 299GB 249GB extended
5 50.2GB 54.4GB 4195MB logical ext4
6 54.4GB 65.9GB 11.5GB logical ext4
7 65.9GB 299GB 233GB logical ext4
$ mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
/dev/sda7 on /home type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda6 on /usr type ext4 (rw)
# I took out the entries that were not need for these instructions
$ cat /etc/fstab
proc /proc proc nodev,noexec,nosuid 0 0
UUID=ddc8c237-e8ac-4038-a0ed-f7c866d6603b / ext4 errors=remount-ro 0 1
UUID=aa9881d1-5cc1-4e94-8cd7-8125e18ece2f /boot ext4 defaults 0 2
UUID=31a6fde1-6b96-4cc3-acfd-88573f52be36 /home ext4 defaults 0 2
UUID=073146a7-5668-4728-9a6f-1a599f358a8d /usr ext4 defaults 0 2
UUID=540b96b6-b3c3-4092-b4ad-6b33bcbbe16d none swap sw 0 0
您的设置可能看起来不同。我为/home
、根 ( /
) 和分别设置了一个分区/usr
。
创建磁盘映像
我使用它dd
,因为它简单快捷。请确保您阅读并理解它的工作原理。您将需要一个比您要复制的整个分区大小更大的空分区。这可能需要相当长的时间。创建、调整大小和复制分区可能需要几个小时,具体取决于它们的大小。您需要将外部驱动器替换为您在此过程中将要使用的存储介质的一部分。
sudo dd if=/dev/sda5 of=/media/externaldrive/sda5-root.img
sudo dd if=/dev/sda7 of=/media/externaldrive/sda7-home.img
sudo dd if=/dev/sda6 of=/media/externaldrive/sda6-usr.img
这是在我的设置上运行后的实际输出示例。
$ sudo dd if=/dev/sda5 of=/media/home0/sda5-root.img
8193087+0 records in
8193087+0 records out
4194860544 bytes (4.2 GB) copied, 55.3159 s, 75.8 MB/s
我们可以使用 Linux 提供的工具来减小此磁盘映像的大小。
$ sudo resize2fs -P sda5-root.img
resize2fs 1.41.11 (14-Mar-2010)
Estimated minimum size of the filesystem: 605972
$ ls -sh ./sda5-root.img
4.0G ./sda5-root.img
$ sudo resize2fs -M sda5-root.img
resize2fs 1.41.11 (14-Mar-2010)
Please run 'e2fsck -f sda5-root.img' first.
$ sudo e2fsck -fy ./sda5-root.img # y makes it run without asking thousands of questions.
e2fsck
必然会输出大量错误或修复。这是因为文件系统中的信息在分区边界的开始和结束位置方面不再正确。这是正确的,因为它不再位于为其配置的分区中。
$ sudo resize2fs -M sda5-root.img
resize2fs 1.41.11 (14-Mar-2010)
Resizing the filesystem on sda5-root.img to 605505 (4k) blocks.
Resizing the filesystem on sda5-root.img to 605505 (4k) blocks.
The filesystem on sda5-root.img is now 605505 blocks long.
$ ls -sh ./sda5-root.img
2.4G ./sda5-root.img
它实际上会删除分区中的所有可用空间。因此,对于较大的分区,这可能超过磁盘大小的 50%。复制较小的文件要快得多
现在您需要使用实时磁盘启动新笔记本电脑并执行以下操作。您需要使用实时磁盘,因为您无法更改当前安装的操作系统使用的运行分区。
现在,您可以将这些磁盘映像复制到新计算机上的分区中。您应该已经设置了这些分区。使用实时磁盘gparted
是一种快速简便的方法。确保您拥有系统所需的所有分区。您可以将这些分区设置得比以前的系统上的分区更大。当我们将磁盘映像复制到其中时,我们将调整文件系统的大小,它将占用分区上的所有可用空间。
现在进行第二步:将磁盘映像复制到新驱动器和新分区上。
sudo dd if=/media/exteranldrive/sda5-root.img of=/dev/sda3 # replace the [sda3] with your partition.
在我的计算机上,输出如下
$ sudo dd if=./sda5-root.img of=/dev/sdb6
4844040+0 records in
4844040+0 records out
2480148480 bytes (2.5 GB) copied, 87.4921 s, 28.3 MB/s
$ sudo fsck.ext4 -fy /dev/sdb6
e2fsck 1.41.11 (14-Mar-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
root1: 50470/504000 files (1.4% non-contiguous), 616736/2060328 blocks
现在我们需要编辑 fstab 文件以指向正确的设备。如果您刚刚将新磁盘分区复制到新磁盘上,则 fstab 文件位于该分区上,因此您需要挂载它才能访问该文件。如果您没有单独的启动分区,您还需要挂载根分区才能安装 grub。
$ sudo mkdir /mnt/tmp
mount /dev/sdb6 /mnt/tmp
$ sudo blkid # to see what the disk uuid is
/dev/sda5: LABEL="root1" UUID="ddc8c237-e8ac-4038-a0ed-f7c866d6603b" TYPE="ext4"
/dev/sdb6: LABEL="root1" UUID="ddc8c237-e8ac-4038-a0ed-f7c866d6603b" TYPE="ext4"
$ gksu gedit /mnt/tmp/etc/fstab
replace the UUID with the UUID of your partition
UUID=ddc8c237-e8ac-4038-a0ed-f7c866d6603b / ext4 errors=remount-ro 0 1
在这里,您可以看到我复制到另一个磁盘的新磁盘映像具有与原始文件系统相同的 UUID。因此,您可以将 fstab 文件从旧安装复制到新安装,并拥有一个正常工作的系统。这将启动。在我的设置中,我不能让我的电脑保持这种状态,否则它会启动到它首先找到的任何设备。
编辑 fstab 并确保 uuid 与您为 root 和 home 设置的分区以及您设置的任何其他分区相匹配。
最后一步是在新磁盘上安装 grub。
sudo chroot /mnt/tmp # your root partition.
grub-install /dev/XXX
就我而言:
grub-install /dev/sdb
update-grub
开始之前请阅读这些说明。如果新笔记本电脑上有所有数据却无法启动,那就没用了。
https://help.ubuntu.com/community/Grub2
https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows
答案3
尝试 clonezilla。Clonezilla 是一个磁盘映像/克隆工具。您可以使用此工具将您的 Ububtu 克隆到新系统。
Clonezilla 克隆您的设置以及整个分区。
有两个版本的 clonezilla 可用。Clonezilla live 适合一次性使用。
如需更多信息,请访问关联。
答案4
TLDR;
进一步阅读后,下面的 rsync 方法可能会花费更多时间,并且可能不完整(例如,启动可能无法正常工作,因此需要更新文件,例如 fstab)。我可能会在将来更新此答案,但现在只需查看复制整个根目录(/)以将操作系统传输到新计算机吗?或者 https://unix.stackexchange.com/questions/608131/backup-and-restore-of-root-file-system-ubuntu-20-04
这将备份您的整个根目录(注意/
之前使用的/Drive
是您要备份到的位置)并在完成时通知十秒钟(man rsync
有关运行前使用的选项的详细信息,请参阅)
sudo rsync -aAXHS --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*", "/Drive", "/lost+found"} / /Drive && notify-send -t 10000 "Backup complete"
如果这对你不起作用,那么应该
sudo rsync -aAXHS --info=progress2 --delete --exclude "/dev/*" --exclude "/proc/*" --exclude "/sys/*" --exclude "/tmp/*" --exclude "/run/*" --exclude "/mnt/*" --exclude "/media/*" --exclude "/Drive" --exclude "/lost+found" / /Drive && notify-send -t 10000 "Backup complete"
使用此命令的别名来缩短按键时间,方法是将以下内容放入.bashrc
alias backup='sudo rsync -aAXHS --info=progress2 --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*", "/USBDrive", "/lost+found"} / /USBDrive && notify-send -t 10000 "Backup complete"'
要恢复备份,只需反转上述命令中的源路径和目标路径。
请注意,这仅适用于本地和独立系统。如果您的系统正在被网络上的其他系统主动访问,那么这不是一个更好的解决方案。
因为系统的内容可能每分钟都在不断更新,并且某些文件可能会在 rsync 过程中发生变化。
比如说,当 rsync 到达文件 2 时,前一个文件(文件 1)的内容可能会发生更改。当您需要使用该备份时,这将导致依赖性错误。
在这种情况下,基于快照的备份是更好的方法。因为系统将在备份过程开始之前“冻结”,并在备份过程完成时“解冻”,因此所有文件都是一致的。
详细信息(rsync 方法)
我研究了 Clonezilla,但目前不支持增量/差异备份这里。这意味着每次备份系统时,您都必须创建一个新映像。如果您经常备份系统,那么这种方法效率不高。
看起来这篇文章中接受的答案是可行的,但这里还有一些其他选项;借鉴了接受的答案中的一些想法。接受的答案不会备份您已克隆到系统中的任何存储库。
如果您必须在克隆后构建任何程序,那么您将不得不重新执行此操作。这可能确实不如公认的答案那样强大和稳定。但我认为这些值得尝试,特别是如果您花了很多时间从源代码构建程序。
以下这些选项的另一个优点是它们应该适用于许多 Linux 发行版。最坏的情况是,它不起作用,然后您可以执行可接受的答案(假设您首先备份了新安装,或者您没有对新安装进行足够的更改,因此不必担心是否必须再次安装它)。
如已接受的答案中所述,如果您的某些程序无法运行,您可以尝试恢复 .* 文件或目录,这是大多数程序的软件包配置文件或目录。您只需删除文件或目录,然后再次运行相应的程序即可。如果您对已接受的答案中的以下内容感到担忧,“您可以复制整个 /etc 目录,但如果您的机器在硬件方面没有相同的设置,这可能会产生问题。它不会从一台机器转移到另一台机器。”然后,您可以手动单独复制特定的 /etc 目录,或使用下面描述的第 3.9 节“过滤规则的高级用法”。我认为以下方法不需要已接受的答案中的“您已安装的软件包”部分。如已接受的答案中所述,“在安装新软件之前或之后复制配置文件。不要在软件包安装正在运行时执行此操作。您可能会破坏安装。”
我发现这个帖子它使用 rsync 命令(该命令适用于大多数 Linux 发行版)。
但我认为你只需要从这篇文章中了解以下内容(因为此链接中的来源对此进行了更详细的描述):
- 请注意,这仅适用于本地和独立系统。如果您的系统正在被网络上的其他系统主动访问,那么这不是一个更好的解决方案。因为系统的内容可能每分钟都在不断更新,并且某些文件可能会在 rsync 过程中发生变化。
- 例如,当 rsync 到达文件 2 时,前一个文件(文件 1)的内容可能会发生变化。当您需要使用该备份时,这将导致依赖性错误。在这种情况下,基于快照的备份是更好的方法。因为系统将在备份过程开始前“冻结”,并在备份过程完成时“解冻”,所以所有文件都是一致的。
- 首先,插入您的备份介质(USB 拇指驱动器或外部硬盘)。然后使用“fdisk -l”命令找到驱动器号。在我的例子中,我的 Pen 驱动器 ID 是 /dev/sdb1。将您的驱动器安装到您选择的任何位置。我将把它安装在 /mnt 下。$ sudo mount /dev/sdb1 /mnt
- 在其中一条评论中,有人说:“SK,我很感激你的努力。但是,恕我直言,你应该更有力地向读者表明,RSYNC 不是一个合适的完整磁盘备份解决方案。它是一个出色的文件备份实用程序。但是,它不是一个合适的磁盘备份实用程序。原因是在备份之前必须卸载磁盘,否则恢复时文件损坏的可能性非常高。”
- 在另一条评论中,有人说:“你的硬盘大小不同或使用不同的文件系统并不重要。”恰恰相反。Rsync 很棒,但目标文件系统确实很重要。例如,使用 rsync 将 ext4 文件系统中的文件备份到 FAT 文件系统,意味着文件所有权和权限信息的丢失。目标文件系统至少需要具有源文件系统的功能。
- 评论者的提示:为了确保打开的文件或可能发生变化的文件的安全,您可以在开始备份之前始终切换到运行级别 1。
对我来说,如果我在 nautilus 中右键单击驱动器,然后单击安装,外部驱动器就会安装在 /media/$USER 下。
除此之外,你还需要阅读第 3 节的大部分内容,了解可用的众多备份选项这里
就我而言,我选择了 3.7 和 3.8,这是 ostechnix.com 上概述的内容。我建议阅读 3.7,完整系统备份,3.8,恢复备份,以及 3.9,过滤规则的高级使用,至少因为它比 ostechnix.com 更详细。如果您的系统正在被网络上的其他系统主动访问,那么第 3.6 节,快照备份可能就是您想要的,如上文第一点所述。
我考虑过第 4 节,文件系统克隆,但进一步阅读后,本文说:
提示:随着时间的推移,文件系统会获得新功能,mkfs 实用程序会更改其默认值,但并非所有新功能都可以在不重新格式化的情况下启用。因此,在将数据移动到新驱动器时,请考虑创建新的文件系统,然后仅使用 rsync 等复制文件(及其属性、ACL、扩展属性等),而不是克隆块设备或文件系统。