我打算更换我的电脑:从一台装有Ubuntu的笔记本电脑换成另一台笔记本电脑,我将在其上安装Ubuntu...
我对当前的系统非常满意,我担心的是要从零开始重建一切。
那么人们通常如何克隆Ubuntu系统呢?这可能包括数据、软件包、快捷方式设置等...
我打算更换我的电脑:从一台装有Ubuntu的笔记本电脑换成另一台笔记本电脑,我将在其上安装Ubuntu...
我对当前的系统非常满意,我担心的是要从零开始重建一切。
那么人们通常如何克隆Ubuntu系统呢?这可能包括数据、软件包、快捷方式设置等...
/home/[用户名]
)选择"查看菜单→显示隐藏文件"(或Ctrl+H)
现在,您应该看到所有隐藏的.*
目录。您可能需要以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 # 整个目录。
在安装新软件之前或之后复制您的配置文件。不要在当前正在运行软件包安装时执行此操作。您可能会破坏安装。
使用Synaptic,您可以通过导出标记菜单选项轻松地导出所有已安装的软件包。
然后,您可以通过反向过程重新加载所有已安装的软件包:
这可能需要最长的时间。如果您下载了很多软件包(1GB的软件包),这可能需要几个小时。
我将把方法二作为一个单独的帖子。这是一个更高级的选项。它要求您了解分区、安装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
$ 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.
$ 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
$ 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
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
sudo mount –bind /dev /mnt/dev && sudo mount –bind /dev/pts /mnt/dev/pts && sudo mount –bind /proc /mnt/proc && sudo mount –bind /sys /mnt/sys
,并在chroot中挂载我的EFI分区 mount /dev/XXX /mnt
其中XXX是EFI分区(而不是根目录/主目录/交换等)来源:https://blog.cadena-it.com/linux-tips-how-to/how-to-repair-restore-or-reinstall-grub-2-with-a-ubuntu-live-cd-or-usb/ 和 https://unix.stackexchange.com/a/405525 - caffeineFiend/mnt/tmp
。 - caffeineFiend经进一步阅读,下面的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"'
看起来这个帖子中的被接受答案应该可行,但这里还有一些更多的选择;借鉴一些被接受答案的想法。被接受答案不会备份你在系统中克隆的任何存储库。
如果你在克隆后需要构建任何程序,那么你将不得不再次进行。这可能不像被接受答案那样强大和稳定。但我认为这些值得一试,尤其是如果你花了很多时间从源代码构建程序的话。
下面这些选项的另一个优点是它们应该适用于许多 Linux 发行版。最坏的情况是它不起作用,然后你可以采用被接受的答案(假设你首先备份了你的新安装或者你没有对新安装进行足够的更改以至于不介意重新安装)。
如接受的答案所述,如果您的某些程序无法正常工作,您可以尝试恢复“.*”文件或目录,该文件或目录是大多数程序的包配置文件或目录。您可以通过简单地删除文件或目录,然后再次运行相应的程序来实现此操作。如果接受的答案中的以下内容引起了您的关注:“您可以复制整个/etc目录,但如果您的机器在硬件方面没有相同的设置,这可能会导致问题。从一台机器转移到另一台机器是不行的。”那么您可以手动分别复制特定的/etc目录,或者使用下面描述的第3.9节,高级过滤规则的用法。我认为接受的答案中的“已安装的软件包”部分在下面的方法中是不必要的。正如接受的答案所述,“在安装新软件之前或之后复制配置文件。不要在当前正在运行软件包安装时执行此操作。否则可能会破坏安装。” 我找到了这篇帖子,其中使用了rsync命令(适用于大多数Linux发行版)。 但我认为您只需要从这篇帖子中了解以下内容(因为链接中的源详细描述了这一点):