使用 DD 仅将 Linux 分区克隆到外部 USB 驱动器?

使用 DD 仅将 Linux 分区克隆到外部 USB 驱动器?

我有一个 1 TB 内置驱动器,它有两个 1/2 TB 分区,一个用于 Windows,另一个用于 Ubuntu 14.04 LTS。该站主要变成了 Linux 站,我再也不会启动 Windows 了。

我想创建一个映像备份,因此我使用 DD 将内部驱动器克隆到外部 1 TB USB 驱动器。不幸的是,USB 驱动器似乎只比内部驱动器少几 GB,DD 以“驱动器空间不足”错误消息结束。现在我看到了一些奇怪的东西。当我弹出 USB 驱动器并将其重新插入时,我看到两个 1/2 GB 的分区似乎是重复的。它们具有相同的 GUID,Nautilus 显示相同的目录结构和内容。我猜想其中一个分区的不完整复制导致外部驱动器处于损坏状态。

我如何使用 DD只需克隆 Linux 分区到外部驱动器?这才是我真正想要的。

答案1

首先你需要找到有关硬盘的数据,你可以在终端中输入以下命令来执行此操作:

sudo fdisk -l

你应该得到如下输出:

Disk /dev/sda: 149,1 GiB, 160041885696 bytes, 312581808 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
Disklabel type: dos
Disk identifier: 0x06bd4abe

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048 230055935 230053888 109,7G 83 Linux
/dev/sda2       292970494 312580095  19609602   9,4G  5 Extended
/dev/sda3       230055936 292968447  62912512    30G 83 Linux
/dev/sda5       292970496 312580095  19609600   9,4G 82 Linux swap / Solaris

Partition table entries are not in disk order.

假设 /dev/sda3 是您想要克隆的驱动器,那么您可以执行以下操作:

dd bs=512 if=/dev/sda of=/dev/sdb1/partition.ddfile seek=230055936 count=$(expr 292968447 - 230055936)

提醒一下,这里只是一些例子,您需要根据自己的情况来选择。

答案2

更简单的方法:

  1. sudo fdisk -l就像 Videonath 所说的那样。找到您要克隆的分区
  2. dd bs=512 if=/dev/<partition-name> of=/<external-media-path>

例如dd bs=512 if=/dev/sda2 of=/dev/sdb1

笔记:

  • dd 要求目标的大小大于或等于源的大小
  • 以这种方式创建的备份(分区级别)将无法启动

答案3

当你问到 时dd,我可以推荐一下吗partclone?它用于克隆和恢复分区。它需要知道底层文件系统,其优势在于dd它只复制用过的块并节省大量时间或空间,因为分区中未使用的部分很少是可压缩的(旧数据垃圾而不是零)。

sudo partclone.ext4 -c -b -s /dev/sdaX -o /dev/sdbY 

将执行您想要的操作。-c代表克隆,-b代表设备到设备,-s代表源,-o代表目标。此外,由于您进行了克隆,因此源和目标的 UUID 是相同的。使用 检查这一点blkid,使用uuidgen生成新的 UUID,然后sudo tune2fs /dev/sdbY -U <uuidgen-generated new UUID>更改它。

同一台机器上有两个相同的 UUID 甚至可能是导致外部设备“损坏”状态问题的根本原因。

在执行此操作之前,需要设置目标设备,fdisk以便新分区不小于旧分区。如果新分区大于旧分区,则可以随后将克隆的分区扩展到gparted新的最大大小。

相关内容