113

我有Ubuntu 14.04,里面有很多包和工作相关的东西,我对它很满意。它安装在我的主SSD驱动器上,这是一个120GB的(当我安装ubuntu时,我选择了“/”,所以我相信所有的东西都应该在这个驱动器上)。它显示为/dev/sda

现在我又给我的电脑添加了一个240Gb的固态硬盘。目前我手头没有任何其他存储介质(例如外置硬盘驱动器)。

由于新的240GB驱动器显然容量更大,速度更快(比我的120GB驱动器更新一代),我想把我的Linux移动到这个新的驱动器上。这个新的驱动器显示为/dev/sdb,目前它还没有格式化或任何东西(我实际上已经解压并插入我的PC:P)

如何才能安全地将linux安装移动到新的驱动器?

如果有必要,我可以更换SATA电缆,使新的驱动器显示为/dev/sda。

这是"fdisk -l"的输出,如果有帮助的话:

硬盘/dev/sda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors Units = sectors of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512字节/ 4096字节I/O大小(最小/最佳):4096字节/ 4096字节硬盘标识:0x00076d7a Device Boot Start End Blocks Id System /dev/sda1 * 2048 226064383 113031168 83 Linux /dev/sda2 226066430 234440703 4187137 5扩展分区2没有在物理扇区边界开始。/dev/sda5 226066432 234440703 4187136 82 Linux swap / Solaris硬盘/dev/sdb: 240.1 GB, 240057409536字节255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectors单位=扇区的1 * 512 = 512字节扇区大小(逻辑/物理):512字节/ 512字节I/O大小(最小/最佳):512字节/ 512字节硬盘标识:0x00000000硬盘/dev/sdb中不包含有效的分区表
2
  • 5
    听起来你现在打算把它们都用上了。如果是这样,您应该考虑只使用更新的,较大的作为/家庭而不是整个系统。这应该是一个更容易的更改(只需将所有内容移过去,并在/etc /fstab中添加一行),大多数大文件可能会进入您的主目录(因此到更大的磁盘上)。
    - - - - - -凯文
    2016年3月3日21:56
  • 可能的重复如何将Ubuntu移动到SSD 2016年3月14日7点33分

8回答8

62

您可以使用CLONEZILLA为这个目的。

Clonezilla是一个免费的分区和磁盘映像/克隆工具,它可以用于以高度压缩的方式备份所有数据(整个磁盘或分区),然后将其克隆回您的硬盘,使其处于完全相同的状态。大多数情况下,这比安装操作系统要快。

在这里输入图像描述

在你的情况下,你也可以使用“设备-设备”选项,但我不熟悉它。

你可以在这里找到关于Clonezilla的详细指南:http://clonezilla.org

16
  • 3.
    我建议你之前看这两个教程视频:youtube.com/watch ? v = 41 ttudaqb0i而且v = LS6VhLDw-io youtube.com/watch ? 2016年3月3日19:15
  • 1
    这也是一个不错的选择。但是我太懒了,不想创造clonezilla stick;-)
    - - - - - -Pilot6
    2016年3月3日19:15
  • 1
    哇!很高兴听到这个;-),启动时间,这是因为更改了uuid,即您的重要分区(home,Swap)的新uuid和旧uuid已经更改。要纠正这个错误,请遵循这里给出的说明合适的变化www.mystery-radio.com/a/737340/497359如果你发现任何问题,请评论。 2016年3月4日13:52
  • 1
    @adampski:这似乎是Clonezilla 2.4.5的一个bug。作为解决方案,您可以使用Clonezilla 2.4.2或Clonezilla 2.4.2服务器版(DRBL),直到它得到修复。:)
    - - - - - -cl-netbox
    2016年3月4日14:24
  • 1
    @severus,我想知道,为什么没有人谈论使用包,坚持使用引导棒/cd。不启动的打包方式听起来容易得多。
    - - - - - -广达电脑
    2020年6月3日21:29
56

这可以通过几种方式来实现。但最简单的方法是将所有文件从旧驱动器复制到新驱动器。

  1. 在新驱动器上创建ext4分区和swap分区。

  2. 从11引导。

  3. 将旧的Ubuntu分区挂载到某个目录,将新分区挂载到另一个目录。

  4. 将所有文件从旧的复制到新的使用cp -命令。

  5. 将grub安装到新驱动器

  6. 更新挂载新的uuid。

如果有不清楚的地方,我可以补充一些解释。

20.
  • 1
    +1 -它也可以避免从一个LiveUSB引导,并在从原始驱动器引导时做所有的事情,做所有的更改,重启,瞧。
    - - - - - -谢尔盖
    2016年3月8日20:17
  • 1
    @Étienne:不要复制这些目录/ dev),只需在目标驱动器上创建空dirs,并在它们上设置与源驱动器上相同的所有者/权限。
    - - - - - -谢尔盖
    2017年9月24日20:40
  • 16
    最后我用了:Sudo rsync -a / /mnt/linux/——exclude sys——exclude proc——exclude dev——exclude TMP——exclude media——exclude mnt——exclude run . sh然后Sudo mkdir sys proc dev TMP media MNT run
    - - - - - -艾蒂安
    2017年9月25日20:50
  • 11
    为了避免像@Étienne建议的那样必须排除已挂载的文件系统,我使用Sudo rsync -a -x / /mnt/linux . txt.的- x标志表示将为其创建挂载点procdev等等,但是装载的文件系统的实际内容不会被复制。
    - - - - - -每Lundberg
    2018年11月17日18:42
  • 1
    @Étienne你能编辑你的——exclude-comment吗?如果您按照编写的方式执行,那么/var/tmp也会被排除在外(在我看来),在克隆之后,系统解析会漏掉这一点。服务导致名称解析不工作…我认为应该是——exclude /tmp——exclude /proc等等。谢谢
    - - - - - -瑞典文
    2019年2月1日11:26
38

如果你有时间,想去安全的地方:

$ dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress .输出说明

命令使用说明:

  • 如果是输入,目的地
  • 废话设置块大小。它是dd读取和写入的块的大小。更高的Chunk大小通常意味着更高的性能,但如果输入磁盘有错误,也意味着更多的数据损坏,参见这里:在dd archwiki
  • noerror仍在r / w-errors。
  • 同步如果发生错误,则同步偏移量。
  • 状态显示实时进度计数器

此外,在Ubuntu和大多数其他Linux系统(自GNU/coreutils 8.24, 2015)上,您可以使用状态=进展也可打印工艺的进度。

这基本上会创建一个磁盘sda的映像,并将其写入sdb(相同的分区布局等)。当然,这将写入整个120GB,因为它是文件不可知的。因此非常安全,但不是最快的,如果您只使用磁盘的一小部分。然而,如果输入磁盘相当满,它甚至可能更快。

但是:

  • 之后,您可能需要调整分区的大小,否则就无法利用额外的空间。
  • 在任何情况下都可能需要编辑/etc/fstab文件。
    如果使用硬件id来识别磁盘,就会出现这种情况。
14
  • 8
    你的dd命令将永远运行。考虑添加b = 1米 2016年3月4日11:07
  • 2
    限制不在于SSD技术,而在于废话默认值为512字节。 2016年3月4日11点13分
  • 1
    我的回答是b,谢谢你的提醒
    - - - - - -ljrk
    2016年3月4日11:25
  • 1
    谢谢你的详细回答…我学到了一些东西!但我决定使用clonezilla,然后调整分区的大小。
    - - - - - -EMBEDONIX
    2016年3月4日12:26
  • 2
    @ljden谢谢,这在当时并不常见,但现在得到了广泛支持。我补充道。
    - - - - - -ljrk
    2021年5月20日14:40
11

当我换到一个新的硬盘时,我的方法是:

  • 在新驱动器上创建我想要的分区布局
  • 从Live CD/USB引导或安装,拯救等。
  • 挂载要复制到的旧硬盘分区,例如,/ mnt /
  • 挂载要接收文件的新硬盘分区/ mnt / b
  • cp -或者使用tar从其中复制文件/ mnt // mnt / b
  • 在新磁盘上安装引导加载程序(lilo或grub)¹
  • 更新挂载(你可能想用blkid识别新的UUID)
  • 重新启动并测试是否一切正常

注意¹:

使用以下命令检查所有的硬盘和分区:

sudo fdisk - l

现在注意一下安装Ubuntu的分区,它看起来是这样的:/dev/sda1

挂载需要安装GRUB 2的分区(硬盘分区),文件系统将出现在Nautilus中。现在我们必须挂载正确的硬盘分区,以便对实际的硬盘MBR进行更改。为此,我们需要:

Sudo mount /dev/sda1 /mnt mount

现在将分区挂载到另一个位置

Sudo mount /dev/sda1 /mnt/boot

创建一个牢不可破的链接/ dev文件夹上的实时映像/ dev您挂载到的分区上的文件夹/ mnt

Sudo mount——bind /dev/ mnt/dev/

现在我们必须将活的CD根目录(/)更改为挂载的分区根目录

sudo chroot / mnt

现在您处于一个新的根外壳中,其中挂载的分区就是新的根。您可以验证这种类型ls.因为我们现在在挂载的分区中,我们可以继续安装GRUB 2:

sudo / sda grub-install

安装应该现在就完成了,没有错误

通过输入退出CHROOT shell退出或按Ctrl+D这又让你想到了Live CD/USB外壳

卸载之前挂载的分区,重新启动:

Sudo umount /mnt/dev Sudo umount /mnt/boot Sudo umount /mnt . sh

并在取出活动CD或u盘后重新启动,以便从硬盘启动:

sudo重启

1
  • @baobab33:你被允许复制粘贴指令到这个网站,然后属性。你不能只是链接到外部源。也请更新源与上述更正。
    - - - - - -极好的
    2018年9月3日22:52
8

与其他答案不同的是,这允许您克隆Linux安装并将其添加到Grub菜单中,同时保持当前安装的完整性。此外,它会自动修改挂载为您和更新grub启动菜单。

提供了一个菜单,帮助您选择要克隆到的正确分区。从分区克隆的是您当前启动的分区。

rsync如果您选择重新复制分区,则使用该选项以获得最佳速度。如果升级失败,您等待bug修复并希望再次运行升级,那么这是有益的。类似地,您可能在升级过程中选择了错误的选项,并希望再次进行升级。

完整的脚本可以在这里找到:Bash脚本克隆Ubuntu到新的分区测试18.04 LTS升级屏幕是这样的:

clone-ubuntu.png

    2

    我决定做一个与这个帖子相关的实验。

    我买了一台联想ThinkCentre。它有一个256gb的SSD和一个1tb的HDD(旋转类型-快,但没有SSD快)。

    当我安装Linux Mint 19.2 (LM19.2)时,它将它安装在1tb驱动器上。SSD最终无法恢复,我买了一个新的金斯顿240 GB SSD。

    我准备将LM19.2安装到新的SSD上,但似乎必须有一种方法将我良好开发的LM19.2映像从1tb驱动器转移到新的SSD上。

    我发现了这篇文章,虽然上面有一些可靠的建议,但我还是想尝试一下。下面是我所做的事情,它奏效了非常好。

    1. 我使用GParted在SSD上创建了一个分区表和分区,它们与1tb HDD上的分区类型相同。
    2. 我在LM19.2 1tb硬盘上执行了一个TimeShift (Ubuntu / Linux Mint中的新工具)快照。
    3. 我把快照恢复到SSD上了。
    4. 以上步骤完成后(你甚至可以在执行2和3的同时执行1),我重新启动,确保它会选择SSD。
    5. 重启过程中唯一奇怪的是,初始化grub屏幕问我是否想引导到Ubuntu。我以为这是时空移物修复所特有的,事实也的确如此。
    6. 后续启动会像LM19.2一般启动。
    7. 一旦我验证了我可以使用外部挂在PC上的新驱动器来完成此操作(这似乎很明显可以工作),我将编辑这个答案,因为这将意味着我可以快速地将任何LM机器复制到新的硬件上。

    光是启动速度就足以让这些简单的步骤值得付出努力。就连Dropbox也传输得很好——它只是想让我再次登录,它需要花全部时间来索引文件,但它工作得很好。

    2
    • 3.
      看起来汤姆从来没有验证过最后一步:D
      - - - - - -马丁Marconcini
      2020年3月3日13:51
    • 1
      @MartinMarconcini,你是对的。到目前为止,我只做了如上所述。只是还没有需要或没有机会做第7步。
      - - - - - -汤姆·艾夫斯
      2020年3月3日16:40
    2

    我总是使用以下程序:

    1. 确保您的安装包含一个分区管理器(PM)。如果不是,安装gparted。
    2. 通过usb适配器连接新磁盘。与PM核对哪个是哪个盘。通常情况下,旧的是/dev/sda,新的是/dev/sdb,但安全总比后悔好。如果您混淆了磁盘,您只需擦除现有的安装。记住:dd被戏称为磁盘销毁程序并不是没有意义的。
    3. 使用上面ljk解释的dd将旧磁盘逐字节地复制到新磁盘。在dd选项中添加status=progress以跟踪进度。
    4. 开始点。在新磁盘上,创建一个临时分区,然后销毁它来填充多余的空间。这将强制根据新磁盘的大小重写分区表。重要:操作的顺序应该是创建-应用-销毁-应用。
    5. 使用PM,根据您的喜好调整新磁盘上的分区大小,以便使用整个磁盘。
    6. 关机,换磁盘,启动,确保它工作正常。

    如果你还想使用旧磁盘作为内部磁盘:

    1. 连接旧磁盘通过USB适配器,格式它和分区,以您的喜欢。
    2. 关机,把旧磁盘和新磁盘一起安装,启动。

    如果您想使用旧磁盘作为文件系统的一部分,请在调优中添加一些内容,

    UUID=actual-uuid-here /data ext4 defaults,discard 0

    在/etc/fstab目录下,执行sudo mount -a命令,或执行restart命令。

    如果您没有USB适配器,磁盘热插拔的过程应该是相同的,但在这里您可以自己进行。更安全的方法是使用已安装系统的u盘或CD/DVD(例如,安装介质)。在这种情况下,您可以将两个磁盘(新磁盘和旧磁盘)从一开始就放在它们的位置上,然后从介质引导并进行复制等。

    并不是必须将新磁盘插入与旧磁盘相同的SATA连接器,但是您可能需要更改BIOS中的启动顺序。

      0

      下面是我的研究与描述试图复制Ubuntu 20.04在单独的交换分区上启用休眠Thinkpad T420根据当前问题的答案转到新的SDD驱动器。最终我取得了成功,但在尝试这些建议时遇到了许多问题(细微差别)。以下SDD和HDD将被视为可互换的术语。


      首先,我尝试了最简单和直接的方法(我认为),这是描述在Pilot6的回答-将文件从源分区复制到目标分区

      我用的是复制rsync命令。问题是我的新SDD驱动器不能在没有旧SDD驱动器的情况下启动Ubuntu(两个SDD驱动器必须连接)。对于这种情况,我发现的唯一建议是安装、更新或恢复Grub配置。但这并没有什么帮助。将新根的UUID设置为grub配置,并按建议更新grub在这里

      /etc/default/grub GRUB_DEVICE_UUID = 40 dbf2e4 e0c5 - 4 f75 - 83 bc - 3176 dc06d164

      也没有工作。

      问题不在这里Grub而是在指向旧驱动器的交换分区的UUID中。

      如果你在单独的交换分区上启用休眠,你也必须更新交换分区的UUID/etc/uswsusp.conf并执行更新命令initramfs要应用更改:

      Update-initramfs -u -k all

      否则在启动时将出现黑屏,没有诊断信息。

      幸运的是,有一次偶然的机会,我让这个黑屏挂了大约5分钟。然后出现以下诊断信息:

      resume: Could not stat the resume device file '/dev/disk/by-uuid/8e8927aa-eca7-43d6-b7cd-66cfda70a242请输入完整路径名重试或按ENTER引导系统:

      统计,而不是开始-可能是信息中有错别字。

      相关问题:无法统计恢复设备文件

      后来我发现'8e8927aa-eca7-43d6-b7cd-66cfda70a242' -是我在旧硬盘驱动器上的交换分区的UUID。

      我可以通过简单的分区名指定新驱动器上的根位置,而不是UUID:“/dev/sdx1”并点击,从而在新系统中引导输入

      有趣的是,我指定了新的根位置,而不是新的交换位置。似乎Ubuntu在某种程度上解决了问题。

      我运行更新命令initramfs在启动到新的Ubuntu拷贝后。在命令日志中有以下内容:

      I: The initramfs will attempt to resume from /dev/sda4 I: (UUID=0253f7b6-8e26-4d19-b262-6d8923911752) I:设置resume变量来覆盖它。

      这意味着交换UUID已成功更改。

      我也试图运行更新initramfschroot(来自Ubuntu的旧版本或Ubuntu的Live版本):

      Sudo mount /dev/sdx1 /mnt Sudo mount /dev/sdx5 /mnt/boot/efi for I in /sys /proc /run /dev/ dev/pts;绑定“$i”/mnt$i;完成sudo chroot /mnt

      initramfs命令从何处执行chroot但是没有更新的信息简历UUID与之前的日志一样-不知道它是否正常工作。

      那一刻我已经更新了Grubchroot通过以下命令:

      Sudo update-grub . install /dev/sdx

      在那之后,我可以从新的SDD驱动器启动而不用旧的SDD驱动器。

      这个答案在评论中有来自andrybak

      目前正在尝试使用这个答案将我的安装从旧硬盘迁移到新的硬盘。我在“将grub安装到新驱动器”这一步失败了。Grub一直指向/找到旧HDD上的安装,我不知道如何说服Grub看新的HDD。

      这可能是我上面描述的类似问题。

      以这种方式复制的Ubuntu正在正常加载,但我注意到安全系统有一些问题:当我挂载其他驱动器的分区时gnome-disks我打不开鹦鹉螺(点击他们的链接gnome-disks将什么也不做)。这是由于错误:没有权限

      解决办法如下:

      1. 我通常在新的SDD驱动器上安装新的Ubuntu(没有office和更新的最低版本)。
      2. 复制旧Ubuntu的文件到新Ubuntu安装分区。在这种情况下,没有问题没有权限

      更新.后来我发现问题出在没有权限是由于文件复制不良。命令rsync——不能复制文件的所有属性,也不能用于复制系统文件。需要使用命令rsync -axHAWXS——numeric-ids——info=progress2在的情况下rsync但最好还是用cp -因为cp工作速度比rsync本地复制-将整个文件系统层次结构从一个驱动器复制到另一个驱动器

      通过这种方法,我将我的Ubuntu从MBR磁盘复制到新的GPT磁盘。(在安装最低版本的Ubuntu之前,我将新的SDD格式化为GPT。)相关问题:


      在工作源操作系统下复制文件不工作:

      我尝试复制文件在当前的工作系统(不是Live版本)作为评论中讨论Pilot6的回答通过以下命令:

      Sudo rsync -a / /mnt/dest/——exclude sys——exclude proc——exclude dev——exclude TMP——exclude media——exclude mnt——exclude run Sudo mkdir sys proc dev TMP media mnt run Sudo mkdir /var/ TMP

      和更新Grubchroot

      在这种情况下,新版本的Ubuntu启动,但屏幕分辨率较低。可能是由于当前的工作系统,某些特定于监视器的驱动程序没有复制或复制时出现错误。


      还测试了ljrk的回答-使用dd comand

      sudo dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress 127945670656 bytes (128gb, 119 GiB) copies, 818 s, 156 MB/s dd: error writing '/dev/sdb': No space left on device 1953669+1 records in 1953669+0 records out 128035676160 bytes (128gb, 119 GiB) copies, 829,897 s, 154 MB/s

      通过使用USB SDD安装Ubuntu和dd命令我逐位复制源SDD到目标SDD。结果,目标SDD具有相同的分区、相同的uuid和相同的PARTUUID。

      下面是关于Live USB SDD和改变uuid, PARTUUIDs为新的。


      为了获得更高的速度,最好在笔记本电脑中插入源和目标SDD驱动器(optibay / caddy适配器的第二个SDD驱动器),并将运行dd命令从可引导u盘或USB SDD / USB HDD。我找到了Ubuntu的两个程序来制作可引导的u盘或USB硬盘。我想做USB硬盘(SDD),这是相当具有挑战性的。

      WoeUSB程序也可以用来创建可引导的硬盘,而不仅仅是u盘但是这在程序描述中没有指定.下面的命令从Windows 10 Pro映像创建可引导的硬盘(通过UI不可能指定USB硬盘驱动器,只能指定u盘):

      sudo woeusb——device "/home/username/Downloads/Win10_21H2_Russian_x64。Iso“/dev/sdx”文件系统

      如何在Linux上用新的WoeUSB创建一个可引导的Windows 10 USB

      也试过UNetbootin工具(适用于Ubuntu),但无法使用NTFS,只有FAT32 -这在win10 pro的情况下是不合适的,因为它有大约4.5 Gb的文件大小(FAT32不支持超过4gb的文件大小)。Ubuntu 20.04安装镜像必须能够安装在FAT32分区(最大的文件ubuntu-20.04.3-desktop-amd64.iso图像是卡斯珀/ filesystem.squashfs尺寸为2、1 gb).我使用已经安装好的Ubuntu通过USB SDD连接。

      下面的命令将图像写入带有FAT32 FS的USB SDD:

      sudo unetbootin installtype=HDD targetdrive=/media/username/winds/ method=diskimage isofile="/home/username/Downloads/Win10_21H2_Russian_x64.iso"

      通过用户界面,它是不可能指定目标为USB硬盘驱动器,只有作为u盘。在targetdrive参数路径必须指定到挂载的USB驱动器。最后必须有斜线符号/否则命令将失败,并返回错误:

      Unetbootin /dev/sdx1sources空间不足

      或者可能不会失败,但不会将文件写入目标驱动器。

      dd如果你只是想把你的系统移动到另一个驱动器上,它很有用——甚至Dropbox也可以在目标SDD上工作,而不需要重新链接。旧驱动器可以格式化。这样就完成了。

      但是如果你想让两个硬盘在同一个笔记本上工作,新硬盘的uuid和partuuid必须更改为惟一的。下面是关于这方面的信息。


      如何修改Linux文件系统分区的UUID

      blkid | grep sdb1 /dev/sdb1: UUID="0c0f5bf5-4e0f-4f4e-85df-896c88e14ba0" umount /dev/sdb1 sudo e2fsck -f /dev/sdb1 #required by tune2fs before changed UUID sudo tune2fs -U 0c0f5bf5-4e0f-4f4e-85df-896c88e14ba5 /dev/sdb1 sudo blkid | grep sdb1 /dev/sdb1: UUID="0c0f5bf5-4e0f-4f4e-85df-896c88e14ba5"

      来源:如何修改Linux文件系统分区的UUID


      如何更改PARTUUID?

      sudo blkid | grep sdb1 /dev/sdb1: PARTUUID="a41c501b-1800-41ed-968b-b7bbfe4ef5ef" sudo gdisk /dev/sdb x # enter x to change to experts menu c# enter c to change PARTUUID 1 #输入要更改的分区编号a41c501b-1800-41ed-968b-b7bbfe4ef6ef m # enter m to go back to main menu w # enter w to write the change to disk q # enter q to exit gdisk OK;写入新的GUID分区表(GPT)到/dev/sdb。警告:内核仍然使用旧的分区表。新表将在下次重新启动时使用,或者在运行partprobe(8)或kpartx(8)之后使用。操作已成功完成。sudo blkid | grep sdb1 /dev/sdb1: PARTUUID="a41c501b-1800-41ed-968b-b7bbfe4ef6ef"

      来源:如何更改PARTUUID?


      西弗勒斯晚礼服'answer-关于使用Clonezella

      这也是一个很好的方法,但与使用相比,需要更多的时间来准备和设置dd在开始克隆或保存系统映像的过程之前,必须准备好、启动Clonezella Live u盘,并且必须经过许多Clonezella UI的菜单。Clonezella的工作原理类似于dd- uuid, PARTUUIDs也将被复制到目标SDD驱动器。

      关于uuid, partuuid在Clonezilla页面的讨论:

        你的答案

        点击“发布您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

        这不是你想要的答案吗?浏览其他带标签的问题问你自己的问题