我正在启动活动磁盘Ubuntu 和我想要将我的整个 SSD(sdb)
及其所有 3 个分区(sdb1, sdb2, sdb3)
备份到外接硬盘。
本指南建议使用这个命令:
dd if=/dev/sdX conv=sync,noerror bs=64K | gzip -c > /path/to/backup.img.gz
我想稍后使用该图像将其转换为
qemu
或VHD
并VMDK
在虚拟机上启动 Ubuntu 系统,所以我不确定.gz
那里的压缩。.img
该命令创建的文件的格式是什么?是吗.iso
?为什么命令中有
conv
?我不想进行任何转换,我想要将原始克隆转换为图像。我还注意到该
dd
命令甚至没有任何of=
部分。比
bs=128k
提高速度吗bs=64k
?
因此,据我所知,我认为满足我需要的正确命令是:
dd if=/dev/sdb bs=64k of=/dev/sdd1/image.img
注意:sdd1
是我的外部硬盘的唯一分区。
答案1
- 我想稍后使用该图像将其转换为
qemu
或VHD
并VMDK
在虚拟机上启动 Ubuntu 系统,所以我不确定.gz
那里的压缩。
如果您想要将其用于虚拟机,则不希望对其进行压缩。而且您可能也不想要原始图像,而是 p2v(物理到虚拟)转换。对于 VirtualBox,您可以例如执行
cat /dev/sda | VBoxManage convertfromraw stdin OutPutFile.vdi NUMBEROFBYTES
这将为您创建驱动器的有效 vboximage。
.img
该命令创建的文件的格式是什么?是吗.iso
?
Iso 指的是 ISO9660 文件系统。如果您对整个硬盘进行映像,它将是一个硬盘映像,包括引导扇区和分区表。如果您对单个分区进行映像,则格式基本上将是该分区所具有的任何格式。
- 为什么命令中有
conv
?我不想进行任何转换,我想要将原始克隆转换为图像。
conv
指定参数,这些参数可能会进行一些转换。在这种情况下,它指示dd
使用同步 I/O,而不是在出现错误时中止。输入man dd
和/sync
Enter在手册页中搜索同步
- 我还注意到该
dd
命令甚至没有任何of=
部分。
dd
除非重定向,否则输出到 stdout。在这种情况下,stdout 通过管道传输到gzip
,这将压缩文件并写入/path/to/backup.img.gz
。
- 比
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
。