这 dd 命令 是一种将文件从一个位置复制和转换到另一个位置的实用程序。 有趣的是,它代表“复制和转换”,但由于名称 cc
已经被 C 编译器采用,它被命名为 ‘dd
‘。 自从 dd
直接与磁盘的扇区交互,它是一个潜在的 危险命令 并且应极其谨慎地使用。
dd 命令的基本用法
dd
命令默认从标准输入读取并写入标准输出。 这可以使用 if
和 of
选项。 if
指定输入文件和 of
指定输出文件:
$ dd if=<input-file-name> of=<output-file-name>
别跑 dd
如果你不确定该放什么 if
或者 of
. (dd
臭名昭著的磁盘破坏者。)
一些有用的选项:
选项 | 解释 |
---|---|
bs=BYTES |
定义块大小/数量 BYTES 一次读取或写入。 (默认值 = 512) |
计数=N | 指定仅 N 应复制的块数。 |
|
noerror 指示 dd 如果有错误,继续前进 sync 如果出现读取错误,则指示 dd 用 NUL 填充输入块。 |
status=progress |
可在 dd v8.24 及更新版本,显示操作进度。 (去检查 dd 的版本,类型 $ dd --version ) |
注意:要使用的最佳块大小取决于底层存储介质。 一般来说,更大的块大小意味着更快的读取和写入。
使用 dd 可以做的实际事情
让我们在这里回顾一下 dd 命令的一些实际应用。
1. 克隆整个驱动器/分区
这是 dd 命令最流行的用途之一。 您可以使用 fdisk
命令:
$ sudo fdisk -l
注意:上面显示的分区(对于 2 个 SSD、一个 NVMe 和其他 SATA)可能与您系统上的不同。
要克隆分区类型:
$ sudo dd if=/dev/sda of=/dev/sdb bs=64M conv=noerror status=progress
此命令克隆整个 /dev/sda
到 /dev/sdb
一次读取和写入 64 MiB,如果读取块时出现任何错误,它将继续克隆。 这 of
选项通常是一个外部空硬盘(/dev/sdb
在这种情况下)。
2. 创建分区的压缩备份
有时克隆分区可能是一个太大的过程。 您可能希望创建压缩备份以减少空间。 dd
当与 gzip 命令一起使用时,可以做到这一点:
$ sudo dd if=/dev/sda conv=sync,noerror status=progress | gzip -c > sda_backup.tar.gz
由于没有 of
选项,dd 会写 /dev/sda
到 stdout
. | (管道字符)只是重定向 stdout
的 dd
到 stdin
的 gzip
. -c 选项规定 gzip
将存档写入 stdout
然后被重定向到 tar.gz
文件。
如果你有,你甚至可以在远程机器上备份 ssh
访问那台机器,你有 ssh
在您的机器上设置。 很可能远程机器已经有 ssh
. 要在本地系统上安装它,请遵循本教程。
要在远程机器上备份,请在本地机器上键入:
$ sudo dd if=/dev/sda bs=1M conv=sync,noerror status=progress | gzip -c | ssh [email protected]_machine 'cat > backup.tar.gz'
Enter 您的密码和瞧,远程备份开始。
在上面的屏幕截图中,我从远程机器上的本地机器创建了随机 40 Mib(或 42MB)的备份 ssh
.
使用 ls 命令列出远程机器上的内容:
现在而不是写信给 gzip
的 stdout
备份被流式传输到远程服务器的 stdin
这是由 cat 命令读取的。
没有任何选项的 cat 命令只写入 stdout
它读什么形式 stdin
. 重定向 stdout
到 .tar.gz
文件的作用是 cat
命令读取备份并将其写入 .tar.gz
文件。
3. 创建一个可启动的 USB 驱动器
您甚至可以使用以下方法创建可启动的 USB 驱动器 dd
. 你需要 .iso
为此,您的操作系统的文件。
需要先卸载U盘. 卸载类型:
$ sudo umount /dev/<usb_drive_partition>
要列出 USB 驱动器的分区,请使用 fdisk -l
或使用 lsblk
命令:
$ sudo lsblk
现在驱动器已卸载,我们可以用它创建一个可引导的驱动器。 在这里,我将创建一个可引导的驱动器 /dev/sdb
使用 Ubuntu 20.04:
$ sudo dd if=~/Downloads/ubuntu-20.04.1-desktop-amd64.iso of=/dev/sdb bs=64M status=progress
/dev/sdb
现在是一个可引导的驱动器。
4. 使用 dd 命令擦除驱动器
可以通过使用 0 或随机数据覆盖来擦除驱动器 dd
. 在这里,我将擦拭 /dev/sdb
驾驶。 绝对确定您要输入哪个驱动器 of
选项.
用 0 的类型覆盖:
$ dd if=/dev/zero of=/dev/sdb bs=1M status=progress
/dev/zero
是一种特殊设备,它提供与从中读取的一样多的空字符(ASCII NUL,0x00)。 它会覆盖 /dev/sda
0 有擦掉的效果。
要通过用随机数据覆盖驱动器来擦除驱动器,请键入:
$ dd if=/dev/urandom of=/dev/sdb bs=1M status=progress
/dev/urandom
也是一种可以读取随机数据的特殊设备。
5. 将文件转换为大写
这是一个晦涩的用法 dd
. 然而有趣的是 dd
这个也可以!
$ dd if=file of=new_file conv=ucase
结论
在这篇文章中,我们学习了如何使用 dd
. dd
是一个非常有用的命令,尽管如果使用不当会很危险。 要了解更多关于 dd
命令,查看其手册页。