dd
是 Linux 中一个强大的命令行工具,用于复制和转换原始数据。它可以直接操作磁盘、分区、文件等,常用于备份、克隆、数据转换等场景。以下是详细的操作方法:
dd if=<输入文件> of=<输出文件> [选项]
bs=4M
(默认单位为字节,可指定 K/M/G
)。status=progress
(现代版本支持)。# 将 /dev/sda 克隆到 /dev/sdb(整个磁盘)
sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress
# 克隆分区(如 /dev/sda1 到 /dev/sdb1)
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
注意: 目标磁盘容量需 ≥ 源磁盘,操作会覆盖目标数据!
# 备份 /dev/sda 到镜像文件
sudo dd if=/dev/sda of=/home/user/backup.img bs=4M status=progress
# 恢复镜像到磁盘
sudo dd if=/home/user/backup.img of=/dev/sda bs=4M status=progress
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
警告: 确保 of=
指定的是 U 盘设备(如 /dev/sdb
),而不是分区(如 /dev/sdb1
)。
# 将文件转为大写并输出
dd if=input.txt of=output.txt conv=ucase
# 将文件转为小写
dd if=input.txt of=output.txt conv=lcase
# 生成 1GB 的空白文件
dd if=/dev/zero of=testfile bs=1G count=1
# 生成随机文件(用于测试)
dd if=/dev/urandom of=random.bin bs=100M count=1
# 跳过输入文件前 1MB 的数据
dd if=input.bin of=output.bin bs=1M skip=1
# 在输出文件开头预留 1MB 空间
dd if=input.bin of=output.bin bs=1M seek=1
of=
参数(如误选系统磁盘)会导致数据丢失!建议先通过 lsblk
确认设备名。bs
(如 bs=4M
)可提升速度,但需权衡内存占用。status=progress
不可用,可通过发送 USR1
信号查看进度:
bash
# 查看 dd 进程 PID
pgrep -l dd
# 发送信号(例如 PID 是 1234)
kill -USR1 1234
md5sum
或 sha256sum
校验源和目标:
bash
sudo md5sum /dev/sda /dev/sdb
pv
:显示进度条(需安装):
bash
sudo dd if=/dev/sda | pv | dd of=/dev/sdb bs=4M
rsync
:更适合文件级同步。cat
或 cp
:简单文件复制时更直观。通过合理使用 dd
,可以高效完成底层数据操作,但务必确保理解每条命令的作用,避免误操作!