使用 dd 将 500 Gig 从一台便携式设备复制到另一台便携式设备

mar*_*eds 2 dd

大家好:我使用的是 Ubuntu 22.04。我知道有很多关于 dd 的帖子,但我仍然很困惑。我有一个 1 TB 便携式驱动器 (WD Passport),其目录和文件总计约为 500 GB。然后我有另一个空白便携式驱动器 (WD Passport),我想将 500 GB 复制到其中,以便我可以将其作为备份。该命令不会给出正确的结果。

dd if=/dev/sdb1 of=/dev/sdc1 status=progress
Run Code Online (Sandbox Code Playgroud)

根据我在askubuntu.com 的帖子上读到的内容,看来我可能必须先安装一些东西?感谢您的智慧或帮助,甚至是链接。我发现的所有链接都没有解释在开始之前安装任何内容。多谢。

PS:rsync 和 cp 不是选项,因为我尝试过它们,看起来它们需要几周的时间才能完成。

Raf*_*ffa 6

dd确实比cpand 甚至更快rsync...原因是dddoes\ 不处理目录和文件,而cpand rsyncdo ...dd只是读写(尽管它可以在其他用例中处理数据)...但是,cpandrsync更易于管理,并且在发生错误时更容易修复和停止,dd而事实并非如此...dd一旦您按下按键,就会破坏目标Enter磁盘

\n

大危险丑陋警告(磁盘名称确实发生变化)

\n

can 下的磁盘名称(以及由此产生的分区名称/dev/将根据其连接顺序而变化,即第一个连接的磁盘获得顺序中的第一个可用字母,/dev/sda然后下一个将被命名,/dev/sdb然后是第三个/dev/sdc/,依此类推 \xe2\ x80\xa6 因此,如果两个磁盘断开连接,然后以不同的顺序再次连接,它们之前分配的名称可能会被交换,并且您的源磁盘可能会突然成为目标磁盘,dd并且它将被销毁\xe2\x80\xa6 同样适用所有类型的磁盘,例如 NVME、SSD \xe2\x80\xa6 等 \xe2\x80\xa6 因此,除非您是经验丰富的用户,否则请勿使用dd.

\n

注意:本答案中讨论的 Clonezilla更安全一些,并且应该提供与dd.

\n

警告说清楚了吗?... 如果属实; 然后继续。

\n

您正在做的事情dd称为分区/磁盘映像,您可以通过几种方式来完成。

\n

第一种方式(磁盘到磁盘

\n

通过这种方式,您可以将原始磁盘(忽略分区但包括它们)数据作为映像复制到另一个磁盘...这将使目标磁盘成为源磁盘的精确映像...但是,不会利用目标磁盘上的额外空间因为映像仅占用与源磁盘上可读区域总大小相同的大小...目标磁盘上的任何数据、分区和映像都将被破坏...文件系统,即在映像过程中不得安装分区在源和目标 \xe2\x80\xa6 上进行处理这种方式可以通过如下方式完成(哪里/dev/sdb是源,哪里/dev/sdc是目标):

\n
dd if=/dev/sdb of=/dev/sdc\n
Run Code Online (Sandbox Code Playgroud)\n

第二种方式(分区到磁盘

\n

通过这种方式,您将分区作为映像复制到另一个磁盘...这将使目标磁盘包含与源分区相同的分区(具有文件系统和数据)...但是,目标磁盘上的额外空间不会被用作映像将仅占用与源分区总大小相同的大小...目标磁盘上的任何数据、分区和映像都将被销毁...文件系统,即在源和源磁盘上的映像过程中不得安装分区目标 \xe2\x80\xa6 这种方式可以通过类似这样的方式来完成(其中/dev/sdb1是源分区,/dev/sdc是目标磁盘):

\n
dd if=/dev/sdb1 of=/dev/sdc\n
Run Code Online (Sandbox Code Playgroud)\n

第三种方式(磁盘/分区到文件)

\n

通过这种方式,您可以将磁盘或分区作为映像复制到已安装文件系统上的文件...这将使目标文件包含源分区/磁盘的相同映像...目标文件是可以就地安装、移动、复制和恢复...文件系统,即分区不得在源 \xe2\x80\xa6 上的映像过程中安装这种方式可以通过类似的操作来完成(其中/dev/sdb/dev/sdb1是源磁盘) /partition/mnt/backup是受支持文件系统的目标安装点,file.img也是映像文件的建议文件名):

\n
dd if=/dev/sdb of=/mnt/backup/file.img\n
Run Code Online (Sandbox Code Playgroud)\n

或(改为镜像分区):

\n
dd if=/dev/sdb1 of=/mnt/backup/file.img\n
Run Code Online (Sandbox Code Playgroud)\n
\n

评论

\n

如果您是高级用户,那么您知道自己的方法...但如果您是愿意节省数据和时间的普通用户,那么这部分适合您。

\n

dd最适合在原始数据模式下复制/映像物理磁盘,即原始磁盘数据块 \xe2\x80\xa6 这些与 LV/分区(逻辑设备/磁盘)和文件系统(数据)上发生的数据操作/处理不同由操作系统实现和使用的结构,用于控制数据的存储和检索方式) \xe2\x80\xa6 在 LV/分区级别,尤其是文件系统级别进行复制,不要\xe2\x80\x99t 使用dd\xe2\x80\ xa6 使用文件系统级工具,例如partcloneorcprsync甚至tar

\n

您可能会在互联网上找到有关使用dd“复制”磁盘分区的说明,他们会告诉您通过将源分区复制到目标分区来完成此操作(没有足够的解释使用此方法时还需要注意什么))例如就像这样(不建议):

\n
dd if=/dev/sdb1 of=/dev/sdc1\n
Run Code Online (Sandbox Code Playgroud)\n

这可能会在很多层面上出错,因为目标分区(如果存在)仅仅是一个逻辑边界,即用软件创建和识别的逻辑(非真实)设备/磁盘......因此,您将使用/dev/sdb1其区域对源分区进行映像正在dd磁盘原始级别上读取/dev/sdc1,其中逻辑磁盘依赖于操作系统正确利用的软件标识符...这些标识符在映像过程之后可能不再有效,例如文件系统可能会更改...如果,另一方面,目标分区例如/dev/sdc1 不存在,那么尝试以/dev/sdc错误的方式创建分区(dd不是磁盘分区工具)有什么意义(如果映像操作成功通过纯粹的运气和 50/50 的机会)目标/dev/sdc1将包含一个文件系统(从源复制,即/dev/sdb1)它不会真正是一个分区,并且目标桌面/dev/sdc不会包含标识/dev/sdc1为分区的分区表...但是,你最有可能(如果我们乐观的话,50%的情况下)不会看到这种不建议的方法产生任何预期的结果,你最终会陷入一个循环,不知道出了什么问题,例如(仅举几例......名单很长):

\n\n

此外分区是一个特定于磁盘的过程(针对某个不同物理磁盘的一个唯一几何结构)...正确创建的分区及其用途/类型、文件系统、标志和几何结构深深植根于该磁盘的分区表中。 .. 不应将它们选择性地复制(使用诸如 之类的低级工具dd)到具有不同分区表的另一个磁盘,并期望它们能够神奇地工作!...甚至更糟糕的事情可能会发生,如果dd用于将分区从一个磁盘复制到另一个磁盘中的分区,会破坏其文件系统,导致分区级别上未分配空间并可能破坏其逻辑边界.. .如果您想要正确克隆分区,那么使用其他分区克隆工具可以正确地完成此操作,而不是dd...如果您必须这样做dd,那么至少要保护您有价值的数据的完整性(假设保留数据是您的目标))并将其分区到物理磁盘,而不是分区到逻辑设备,在该过程中可能会严重损坏...是的,物理磁盘可以在不分区的情况下保存文件系统和数据(尽管读写速度可能会慢一些)就数据而言,它应该比镜像分区更安全。

\n

请仔细阅读如何在 Linux 中创建交换分区的示例,因为它说明了如何真正创建分区并设置覆盖分区的一些底层深层根。

\n

关于此问题的一个很好且易于阅读的资源是文件系统 - 分区/卷(逻辑磁盘分区)

\n