将整个 Linux 安装移动到另一个驱动器

Sae*_*d87 92 backup dd

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

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

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

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

如有必要,我可以更改 SATA 电缆,以便新驱动器显示为 /dev/sda。

如果有帮助,这是“fdisk -l”的输出:

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00076d7a

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   226064383   113031168   83  Linux
/dev/sda2       226066430   234440703     4187137    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda5       226066432   234440703     4187136   82  Linux swap / Solaris

Disk /dev/sdb: 240.1 GB, 240057409536 bytes
255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table
Run Code Online (Sandbox Code Playgroud)

Pil*_*ot6 51

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

  1. 在新驱动器上创建一个 ext4 分区和一个交换分区。

  2. 从 LiveUSB 启动。

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

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

  5. 将 grub 安装到新驱动器

  6. /etc/fstab使用新的 UUID 进行更新。

如果有什么不清楚的,我可以添加一些解释。

  • 我最终使用了:`sudo rsync -a / /mnt/linux/ --exclude sys --exclude proc --exclude dev --exclude tmp --exclude media --exclude mnt --exclude run` 然后`sudo mkdir sys proc dev tmp media mnt run` (15认同)
  • 为了避免按照@Étienne 的建议排除已挂载的文件系统,我使用了`sudo rsync -a -x / /mnt/linux`。`-x` 标志意味着将为 `proc`、`dev` 等创建挂载点,但不会复制已挂载文件系统的实际内容。 (6认同)

Sev*_*Tux 50

为此,您可以使用CLONEZILLA

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

在此处输入图片说明

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

您可以在此处找到有关 Clonezilla 的详细指南:http : //clonezilla.org

  • 我建议您之前观看这两个教程视频:https://www.youtube.com/watch?v=41tTudaQb0I 和 https://www.youtube.com/watch?v=LS6VhLDw-io (2认同)

ljr*_*jrk 30

如果您有时间并想要安全:

$ dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync
Run Code Online (Sandbox Code Playgroud)

命令的解释:

  • if是输入,of目的地
  • bs设置块大小。它是 dd 将读取和写入的块的大小。更高的块大小通常意味着更高的性能,但如果输入磁盘有错误,也会导致更多的数据损坏,请参阅此处:dd 上的 archwiki
  • noerror 在 r/w 错误中继续。
  • sync 如果发生错误,则同步偏移量。

此外,在 Ubuntu 和大多数其他 Linux 系统(自 GNU/coreutils 8.24, 2015 起)上,您还可以使用status=progress打印进程的进度。

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

但:

  • 之后您可能想要调整分区大小,否则您将无法利用额外的空间。
  • 在任何情况下,都可能需要编辑 /etc/fstab 文件。
    如果使用硬件 ID 来识别磁盘,就是这种情况。

  • 你的 `dd` 命令将永远运行。考虑添加`bs=1M` (5认同)
  • 限制不在于 SSD 技术,而在于“bs”默认值,即 512 字节。 (2认同)
  • @ljden 谢谢,这在当时并不是很可用,但现在得到了广泛的支持。我加了。 (2认同)

小智 8

当我切换到新硬盘时,我的做法是:

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

注意¹:

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

sudo fdisk -l 
Run Code Online (Sandbox Code Playgroud)

现在记下安装 Ubuntu 的分区,如下所示: /dev/sda1

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

sudo mount /dev/sda1 /mnt
mount
Run Code Online (Sandbox Code Playgroud)

现在将分区挂载到备用位置

sudo mount /dev/sda1 /mnt/boot
Run Code Online (Sandbox Code Playgroud)

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

sudo mount --bind /dev /mnt/dev/
Run Code Online (Sandbox Code Playgroud)

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

sudo chroot /mnt
Run Code Online (Sandbox Code Playgroud)

现在您在一个新的 root shell 中,其中挂载的分区是新的 root。您可以验证此键入ls。由于我们现在在挂载分区中,我们可以继续安装 GRUB 2:

sudo grub-install /dev/sda 
Run Code Online (Sandbox Code Playgroud)

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

退出您的 CHROOT shell,通过键入exit或按Ctrl+D 将您带回到 Live CD/USB Shell

卸载我们之前安装的分区以进行干净的重启:

sudo umount /mnt/dev
sudo umount /mnt/boot
sudo umount /mnt
Run Code Online (Sandbox Code Playgroud)

并在取出 Live CD 或 USB 记忆棒后重新启动以从硬盘启动:

sudo reboot
Run Code Online (Sandbox Code Playgroud)

来源


Win*_*nix 7

与其他答案不同,这允许您克隆 Linux 安装并将其添加到 Grub 菜单中,并且您当前的安装完好无损。此外,它会自动/etc/fstab为您修改并更新grub启动菜单。

提供了一个菜单来帮助您选择要克隆到的正确分区。来自分区的克隆是您当前的引导分区。

rsync如果您选择重新克隆分区,则用于获得最佳速度。如果升级失败,您等待错误修复并希望再次运行升级,这将是有益的。同样,您可能在升级过程中选择了错误的选项,并希望再次执行此操作。

完整脚本可以在这里找到:用于将 Ubuntu 克隆到新分区以测试 18.04 LTS 升级的 Bash 脚本,屏幕如下所示:

克隆 ubuntu.png


归档时间:

查看次数:

207786 次

最近记录:

5 年,3 月 前