使用dd命令将系统移至新的SSD


4

问题很简单。我已经搜索了一段时间,但不确定我是否得到正确的答案。由于错误很容易破坏我的驱动器和数据,所以我真的很想弄清楚。

我在具有两个分区的250GB ssd(/ dev / sda)上运行Ubuntu,每个分区大约有125GB。sda1安装到/,sda2安装到/home。现在,我想将所有内容移动到新的1TB ssd(假设它是/ dev / sdc)中,并将每个驱动器扩展到500GB。经过研究,我提出了两种方法:

1)做dd if=/dev/sda of=/dev/sdc克隆整个磁盘。在此之后,我应该获得一个具有两个125 GB分区和一些未分配空间的可引导磁盘。对?然后,我需要使用gparted将sdc1和sdc1的大小调整为500GB。调整大小可能需要很长时间,对吗?

2)第二种方法是先格式化新驱动器,制作两个500GB分区。做dd if=/dev/sda1 of=/dev/sdc1dd if=/dev/sda2 of=/dev/sdc2克隆两个分区。此时,该磁盘应该不可启动,对吗?为了使其可启动,我需要将引导加载程序复制到新的引导加载程序中。我需要的只是前446个字节。这样我就可以 dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1dd if=/tmp/mbrsda.bak of=/dev/sdc bs=446 count=1。通过这样做,我使其可启动,并且还将分区表保留为500GB + 500GB。这种方法可以避免调整磁盘大小。

对于这两种方法,我都需要更改/ etc / fstab文件中的UUID。可以通过在克隆后先挂载新驱动器来完成:sudo mount /dev/sdc1 /mnt/,然后编辑/mnt/etc/fstab文件。

我对所有这些都正确吗?有可能在这里弄乱我的旧硬盘吗?非常感谢!


1
是驱动器MBR或gpt。最好不要将dd与gpt一起使用。通常,我会找到新的安装和/ home副本,以及/ etc中的一些设置。并导出已安装应用程序的列表,然后重新安装该列表。通常,这样可以更快,因为您避免了重新设置或重置UUID以及重新安装grub的所有问题。
oldfred

Answers:


4

每当您使用dd(又名disk destroyer)时,都有可能破坏您的数据。dd没有安全措施可以将新驱动器意外写入旧驱动器。使其正常工作的唯一方法是,如果您非常小心地正确键入命令并且不要混淆源和目标。if=而且of=彼此之间只有一个小的错误键入按键!

另一个问题是dd速度慢,并且会在目标SSD上造成不必要的磨损。大多数分区通常没有接近100%的利用率。使用dd复制具有大量可用空间的分区最终会复制该分区的每个字节,甚至实际上不包含任何已分配数据的字节!

如果是我的系统,这就是我要做的事情:

  1. 在您设置新的SSD分区表时,请为您的旧SSD分区表截屏以供参考。
  2. 将新的SSD连接到计算机,然后断开旧的SSD的连接。保持旧的SSD处于断开状态,就不可能在进行潜在的破坏性工作时销毁我们的任何宝贵数据。
  3. 从Linux实时模式下的Ubuntu安装USB拇指驱动器引导。确保您的BIOS始终以旧版/ MBR模式而不是UEFI模式引导拇指驱动器,因为听起来您的旧系统正在使用MBR。如果我的假设无效,请确保您的BIOS以UEFI模式引导拇指驱动器。混淆在一起会使以后很难正确安装grub变得更加困难。
  4. 用于使用gparted所需的分区表设置新的SSD并格式化文件系统。尝试使所有内容与旧SSD的分区表相同(分区大小和UUID除外)。不要忘了将/根文件系统标记为active/ bootable,就像您的旧SSD一样。
  5. 现在,所有危险的分区编辑工作都已完成,您可以安全地关闭并添加连接到计算机的旧SSD。
  6. 再次引导Linux live USB拇指驱动器,这次连接了两个驱动器。不要从旧的SSD引导(我们需要使该系统保持不活动状态,以便对其进行完整的复制)。
  7. 一旦启动,请打开终端并开始执行以下命令,以将数据从旧SSD复制到新SSD。与using相比dd,该cp命令具有更高的防错能力,因为您无法销毁在旧文件系统之上复制空文件系统的任何内容-在这种情况下,不会复制任何内容!另外,我们可以将旧固态硬盘挂载为“只读”模式,以避免修改旧固态硬盘的任何可能性。

    mkdir oldroot newroot oldhome newhome
    sudo mount -o ro /dev/sda1 oldroot
    sudo mount -o ro /dev/sda2 oldhome
    ls oldroot
    ls oldhome
    

    验证您可以看到您的旧数据。如果您看到的只是一个空文件系统,则可能是您使用了错误的“ / dev / sdXX”设备...

    sudo mount -o noatime /dev/sdc1 newroot
    sudo mount -o noatime /dev/sdc2 newhome
    ls newroot
    ls newhome
    

    确认您看到的只是一个空文件系统作为目的地。如果一切正常,请发出以下命令在保留所有权限/所有权/ SELinux上下文设置的同时复制所有文件:

    sudo cp -Rfax oldroot/* newroot/
    sudo cp -Rfax oldhome/* newhome/
    

    完成后,卸载所有内容并将同步的缓存写入持久存储:

    sudo umount oldroot
    sudo umount oldhome
    sudo umount newroot
    sudo umount newhome
    sync
    
  8. 现在,您可以安全地关闭并断开旧SSD的连接,以便在使新SSD成为可启动设备的过程中,我们不可能破坏其中的任何东西。

  9. 仅在连接了新的SSD的情况下,在Linux实时模式下使用USB拇指驱动器引导计算机。打开终端并开始通过以下命令进行操作:

    mkdir newroot
    sudo mount -o noatime /dev/sda1 newroot
    sudo chroot newroot /bin/bash
    mount -t devtmpfs udev /dev
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    nano -w /etc/fstab
    

    现在,您需要修改fstab文件以使UUID号与新SSD上的UUID号匹配。您可以打开gparted以查看分区表并弄清楚新的UUID是什么。完成后,按CTRL-X并将fstab更改保存到磁盘。

    update-grub
    grub-install /dev/sda
    

    如果一切正常,这应该配置grub并将其安装到新SSD的MBR中。安装grub之后,您必须先退出所有先前在chroot环境中装载的东西,然后再退出。否则,当您关机时,Ubuntu将很难清除干净的Linux分区。

    umount /sys
    umount /proc
    umount /dev
    exit
    sudo umount newroot
    sync
    

在那里,您拥有了!希望您的新SSD可以启动,并且现在一切都很好。


1
编辑和支持!请查看我的修改内容,看看我是怎么做到的:8个空格缩进代码,段落前面1个空格缩进整个段落。 ;-)
Fabby

0

我将使用partimage一次复制一个分区。复制第一个分区后,增加其大小。调整大小将非常快,因为您不必移动任何相邻的分区。然后复制第二个分区并调整其大小以适应其余空间。

最简单的方法是从SystemRescueCD引导并从该环境执行所有操作。您可以制作可引导的USB驱动器,因此不需要实际的CD。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.