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

mav*_*vix 1 dual-boot backup 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
Run Code Online (Sandbox Code Playgroud)

Rma*_*ano 5

如果使用 复制分区 dd,则输出文件将与分区一样大。 dd对光盘进行物理复制,它不知道空白或已用空间。

但是,如果压缩结果文件,您将节省大量空间,因为空白空间会很好地压缩掉(请注意,这将在计算上非常繁重)。您甚至可以dd使用dd if=/dev/sdaX | gzip -c > compressed_file.gz.

真的很重要:

此外,您不能(永远)dd在活动(挂载)分区上执行操作,记录的数据将完全不一致并且绝对对备份没有用。想一想:不断地分配、移动和删除数据块;就像对移动目标拍摄长时间曝光的照片一样。

要复制分区,dd您必须从不同的分区启动 - live USB 或其他任何东西。

我会怎么做才能解决手头的问题(注意,只有通用说明,因为您需要知道自己在做什么)

首选购买 Norton Ghost,或探索开源选项:partimageclonezilla(我自己从未测试过)。

第二个选项手动执行:

  1. 为备份创建一个额外的分区,将其命名为 /dev/sdX(或使用公共数据分区,无论如何)。

  2. 备份:

    • 使用实时 USB 启动
    • 在 /real 中挂载真正的根分区
    • 在 /extra 中挂载额外的分区
    • 做一个大焦油,就行了 (cd /real && tar cvf /extra/mybck.tar.gz)
  3. 恢复

    • 使用实时 USB 启动
    • 在 /real 中挂载真正的根分区
    • 在 /extra 中挂载额外的分区
    • 还原,就行(cd /real && tar xvpf /extra/mybck.tar.gz),注意p保留元数据的选项
    • chroot 在 /real
    • 更新 grub 或您正在使用的引导加载程序

你可以tar用你喜欢的归档程序代替,只要确保它会尊重文件的所有权/模式。rsync值得探索。