dd 手册页太模糊了,如何创建磁盘映像

dd 手册页太模糊了,如何创建磁盘映像

我正在启动活动磁盘Ubuntu 和我想要将我的整个 SSD(sdb)及其所有 3 个分区(sdb1, sdb2, sdb3)备份到外接硬盘


本指南建议使用这个命令:

dd if=/dev/sdX conv=sync,noerror bs=64K | gzip -c  > /path/to/backup.img.gz
  1. 我想稍后使用该图像将其转换为qemuVHDVMDK在虚拟机上启动 Ubuntu 系统,所以我不确定.gz那里的压缩。

  2. .img该命令创建的文件的格式是什么?是吗.iso

  3. 为什么命令中有conv?我不想进行任何转换,我想要将原始克隆转换为图像。

  4. 我还注意到该dd命令甚至没有任何of=部分。

  5. bs=128k提高速度吗bs=64k


因此,据我所知,我认为满足我需要的正确命令是:

dd if=/dev/sdb bs=64k of=/dev/sdd1/image.img

注意:sdd1是我的外部硬盘的唯一分区。

答案1

  1. 我想稍后使用该图像将其转换为qemuVHDVMDK在虚拟机上启动 Ubuntu 系统,所以我不确定.gz那里的压缩。

如果您想要将其用于虚拟机,则不希望对其进行压缩。而且您可能也不想要原始图像,而是 p2v(物理到虚拟)转换。对于 VirtualBox,您可以例如执行

cat /dev/sda | VBoxManage convertfromraw stdin OutPutFile.vdi NUMBEROFBYTES

这将为您创建驱动器的有效 vboximage。

  1. .img该命令创建的文件的格式是什么?是吗.iso

Iso 指的是 ISO9660 文件系统。如果您对整个硬盘进行映像,它将是一个硬盘映像,包括引导扇区和分区表。如果您对单个分区进行映像,则格式基本上将是该分区所具有的任何格式。

  1. 为什么命令中有conv?我不想进行任何转换,我想要将原始克隆转换为图像。

conv指定参数,这些参数可能会进行一些转换。在这种情况下,它指示dd使用同步 I/O,而不是在出现错误时中止。输入man dd/syncEnter在手册页中搜索同步

  1. 我还注意到该dd命令甚至没有任何of=部分。

dd除非重定向,否则输出到 stdout。在这种情况下,stdout 通过管道传输到gzip,这将压缩文件并写入/path/to/backup.img.gz

  1. bs=128k提高速度吗bs=64k

可能吧。确切的答案是进行测试,例如,使用time dd if=/dev/sda of=/dev/zero bs=64k count=10000,然后用不同的尺寸重复测试。

答案2

的手册页dd并不模糊。您只是不了解所有的概念。

您不应该使用任何转换选项来实现您的目的。只需将其忽略即可。

你不需要压缩。无论如何,你只需要在之后立即提取图像。

第一个命令没有参数,of因为数据被管道传输到不同的命令。因此dd会生成一些数据,然后将其推送到gzip执行压缩的命令,然后将结果写入指定位置。要了解有关管道的更多信息,只需谷歌搜索“Linux 管道”。它们真的很有用。但是,您不需要任何管道来实现您的目的。

dd.的输出没有特定的格式,dd只是复制数据。它会获取在输入位置找到的任何内容并将其复制到输出位置。通常使用文件扩展名“.img”。但是,由于复制的内容dd可以是任何内容,因此在某些情况下使用更具体的扩展名(例如“.iso”)很有用。

在现代计算机上,块大小(通过 指定bs)甚至可能更大。如果您使用的是近几年制造的任何计算机,请直接输入bs=4M或类似命令。如果它在正确的范围内,则摆弄它不会有太大变化。

要备份您的磁盘,您可以使用以下命令:

sudo dd if=/dev/sda bs=4M of=/path/to/your/storage/location/filename.img

请注意,您需要 root 权限才能直接从硬盘驱动器的设备文件读取。

但请确保你of不会开始,/dev除非你确切知道自己在做什么!这样做可能会抹掉整个磁盘!它不应指向您希望映像所在的设备的位置,而应指向映像的安装位置。这些路径通常以/media或开头/mnt

相关内容