当我尝试创建备份磁盘映像时,为什么 dd 会创建一个巨大的文件?

当我尝试创建备份磁盘映像时,为什么 dd 会创建一个巨大的文件?

我一直在尝试让 CUDA 在我的系统上运行,但在处理 nvidia 驱动程序的过程中,我已经严重损坏了 ubuntu,以至于我不得不多次重新格式化我的驱动器分区。现在我已经被那根棒击中了足够多的次数,所以我在安装完所有工具、程序和东西后,尝试使用 dd(朋友推荐的)备份我的分区。

然而,当我跑的时候

sudo dd if=/dev/sda4 of=~/backup.img

我最终收到一条错误消息,提示我的驱动器空间不足。这对我来说很奇怪,因为分区很大,而且我刚刚安装了 ubuntu,上面有几个(小)程序。

我认为可能发生的情况是,它正在递归地尝试写入已写入内容的副本,因此我尝试将文件直接写入另一个分区:

sudo dd if=/dev/sda4 of=/media/Ye\ Olde\ Data/ubuntu\ reinstall\ backup/backup.img

但这花了很长时间,而且一旦文件大小达到我确信太大而无法包含我想要的数据时,我就中止了该过程。

发生了什么?是不是因为 /media 挂载了其他分区,因此它将其他分区视为 /dev/sda4 的一部分?是不是因为 dd 逐字节复制整个分区,而忽略了哪些字节上实际上有文件?

无论如何,我怎样才能正确地完成我想做的事情?

哦,这是我的磁盘信息,以防万一:

sudo sfdisk -l /dev/sda

Disk /dev/sda: 62260 cylinders, 255 heads, 63 sectors/track
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1   *      0+     12-     13-    102400    7  HPFS/NTFS/exFAT
/dev/sda2         12+  14602-  14590- 117187500    7  HPFS/NTFS/exFAT
/dev/sda3      29192+  62260-  33069- 265622493+   5  Extended
/dev/sda4      14602+  29191-  14590- 117193728   83  Linux
/dev/sda5      61228+  62260-   1032-   8287232   82  Linux swap / Solaris
/dev/sda6      29192+  61227   32036- 257329138+   7  HPFS/NTFS/exFAT

答案1

如果使用 复制分区 dd,则输出文件将与分区一样大。 复制dd磁盘的物理副本时,它不知道空白空间或已用空间。

如果你压缩结果文件,你将节省大量空间,因为空白空间会很好地压缩(注意,这将是计算上的非常重)。您甚至可以动态压缩的输出dd,使用类似于 的行dd if=/dev/sdaX | gzip -c > compressed_file.gz

非常重要:

此外,你不能(永远不要)dd在活动(已安装)分区上执行此操作,记录的数据将完全不一致,并且绝对无法用于备份。想想看:数据块不断被分配、移动和删除;就像对移动目标进行长时间曝光拍摄照片一样。

要复制分区,dd您必须从不同的设备启动 - 实时 USB 或其他设备。

我会怎么做来解决手头的问题(请注意,只有通用指令,因为你需要知道自己在做什么)

第一个选项购买 Norton Ghost,或探索开源选项:部分图像克隆(从未亲自测试过)。

第二种选择手动操作:

  1. 为备份创建一个额外的分区,将其命名为 /dev/sdX(或者使用公共数据分区,随便什么都可以)。

  2. 备份:

    • 使用 live usb 启动
    • 在 /real 中挂载真实根分区
    • 将额外分区挂载到 /extra
    • 做一个大的 tar,在(cd /real && tar cvf /extra/mybck.tar.gz)
  3. 恢复

    • 使用 live usb 启动
    • 在 /real 中挂载真实根分区
    • 将额外分区挂载到 /extra
    • 恢复时,(cd /real && tar xvpf /extra/mybck.tar.gz)请注意p保留元数据的选项
    • chroot 到 /real
    • 更新 grub 或你正在使用的引导加载程序

您可以tar用您喜欢的归档器替换,只要确保它尊重文件的所有权/模式即可。rsync值得探索。

答案2

DD 可能不是进行备份的合适工具。正如 Rmano 所说,它直接复制 /dev/sda4(可能复制到 /dev/sda4)。

他的回答非常正确。

检查 rsync 以进行备份。

相关内容