插件窝 干货文章 Linux使用dd命令来复制和转换数据的操作方法

Linux使用dd命令来复制和转换数据的操作方法

文件 dev 磁盘 progress 983    来源:    2025-04-02

dd 是 Linux 中一个强大的命令行工具,用于复制和转换原始数据。它可以直接操作磁盘、分区、文件等,常用于备份、克隆、数据转换等场景。以下是详细的操作方法:


1. 基本语法

dd if=<输入文件> of=<输出文件> [选项]
  • if=:输入文件(Input File),默认为标准输入。
  • of=:输出文件(Output File),默认为标准输出。
  • bs=:块大小(Block Size),例如 bs=4M(默认单位为字节,可指定 K/M/G)。
  • count=:复制的块数量。
  • skip=:跳过输入文件开头的指定块数。
  • seek=:跳过输出文件开头的指定块数。
  • status=:显示进度,如 status=progress(现代版本支持)。

2. 常见用途示例

(1) 克隆磁盘/分区

# 将 /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

注意: 目标磁盘容量需 ≥ 源磁盘,操作会覆盖目标数据!


(2) 创建磁盘镜像备份

# 备份 /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

(3) 复制 ISO 到 U 盘(制作启动盘)

sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

警告: 确保 of= 指定的是 U 盘设备(如 /dev/sdb),而不是分区(如 /dev/sdb1)。


(4) 文件转换

# 将文件转为大写并输出
dd if=input.txt of=output.txt conv=ucase

# 将文件转为小写
dd if=input.txt of=output.txt conv=lcase

(5) 生成特定大小的文件

# 生成 1GB 的空白文件
dd if=/dev/zero of=testfile bs=1G count=1

# 生成随机文件(用于测试)
dd if=/dev/urandom of=random.bin bs=100M count=1

(6) 跳过/截取部分数据

# 跳过输入文件前 1MB 的数据
dd if=input.bin of=output.bin bs=1M skip=1

# 在输出文件开头预留 1MB 空间
dd if=input.bin of=output.bin bs=1M seek=1

3. 注意事项

  1. 谨慎操作目标(of=)
    • 错误的 of= 参数(如误选系统磁盘)会导致数据丢失!建议先通过 lsblk 确认设备名。
  2. 性能优化
    • 增大 bs(如 bs=4M)可提升速度,但需权衡内存占用。
  3. 进度查看
    • status=progress 不可用,可通过发送 USR1 信号查看进度: bash # 查看 dd 进程 PID pgrep -l dd # 发送信号(例如 PID 是 1234) kill -USR1 1234
  4. 数据完整性校验
    • 克隆后建议用 md5sumsha256sum 校验源和目标: bash sudo md5sum /dev/sda /dev/sdb

4. 替代工具推荐

  • pv:显示进度条(需安装): bash sudo dd if=/dev/sda | pv | dd of=/dev/sdb bs=4M
  • rsync:更适合文件级同步。
  • catcp:简单文件复制时更直观。

通过合理使用 dd,可以高效完成底层数据操作,但务必确保理解每条命令的作用,避免误操作!