欢迎光临护送网
详情描述

dd(数据复制)是Linux中一个功能强大且底层的磁盘/数据操作工具,常用于备份、转换和复制文件。

一、基本语法和关键参数

dd if=输入文件 of=输出文件 [选项]

核心参数:

  • if=:输入文件(input file)
  • of=:输出文件(output file)
  • bs=:块大小(block size),如 1M, 4K
  • count=:复制块的数量
  • skip=:跳过输入文件开头的块
  • seek=:跳过输出文件开头的块
  • conv=:转换参数

二、数据备份案例

1. 备份整个磁盘到镜像文件

# 备份整个磁盘到压缩镜像
dd if=/dev/sda bs=4M status=progress | gzip > /backup/sda_backup.img.gz

# 恢复备份
gzip -dc /backup/sda_backup.img.gz | dd of=/dev/sda bs=4M status=progress

2. 备份分区

# 备份根分区
dd if=/dev/sda1 of=/backup/root_partition.img bs=4M status=progress

# 只备份已使用空间(配合resize2fs)
e2image -ra /dev/sda1 /backup/root_partition.img

3. 增量备份

# 首次完整备份
dd if=/dev/sda1 of=/backup/full_backup.img

# 后续只备份变更部分(使用ddrescue更合适)
ddrescue --idirect --retry-passes=3 /dev/sda1 /backup/incremental.img

三、格式转换案例

1. 磁盘格式转换

# 从RAW格式转换为VMDK(VMware)
qemu-img convert -f raw -O vmdk input.img output.vmdk

# 从VMDK转换为QCOW2(KVM)
qemu-img convert -f vmdk -O qcow2 input.vmdk output.qcow2

2. 转换时修改参数

# 转换时改变块大小
dd if=input.img of=output.img bs=1M conv=noerror,sync

# ASCII与EBCDIC编码转换(旧系统数据迁移)
dd if=ebcdic_file.txt of=ascii_file.txt conv=ascii

3. 创建特定格式文件

# 创建固定大小文件(测试用)
dd if=/dev/zero of=testfile.bin bs=1M count=100

# 创建swap文件
dd if=/dev/zero of=/swapfile bs=1M count=4096
mkswap /swapfile
swapon /swapfile

四、实用备份脚本示例

#!/bin/bash
# 自动化备份脚本

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
TARGET_DISK="/dev/sda"

# 1. 创建磁盘完整备份
echo "开始完整磁盘备份..."
dd if=$TARGET_DISK bs=4M status=progress | \
   pigz -c > $BACKUP_DIR/full_backup_${DATE}.img.gz

# 2. 备份分区表
echo "备份分区表..."
sfdisk -d $TARGET_DISK > $BACKUP_DIR/partition_table_${DATE}.txt

# 3. 备份MBR
echo "备份MBR..."
dd if=$TARGET_DISK of=$BACKUP_DIR/mbr_backup_${DATE}.bin bs=512 count=1

# 4. 验证备份完整性
echo "验证备份..."
pigz -dc $BACKUP_DIR/full_backup_${DATE}.img.gz | md5sum > $BACKUP_DIR/checksum_${DATE}.txt

echo "备份完成: $BACKUP_DIR/full_backup_${DATE}.img.gz"

五、恢复操作

1. 完整恢复

# 从镜像恢复整个磁盘
gunzip -c backup.img.gz | dd of=/dev/sda bs=4M status=progress

# 恢复后修复引导(如果需要)
grub-install /dev/sda
update-grub

2. 选择性恢复

# 只恢复MBR(前446字节)
dd if=mbr_backup.bin of=/dev/sda bs=446 count=1

# 恢复分区表(不破坏MBR)
dd if=partition_backup.bin of=/dev/sda bs=1 skip=446 seek=446

六、注意事项和最佳实践

安全第一:操作前确认设备路径,错误的of=可能覆盖重要数据

性能优化

# 使用更大块大小提高速度
dd bs=64K if=/dev/sda of=backup.img

# 使用pv显示进度
dd if=/dev/sda bs=4M | pv | dd of=backup.img

错误处理

# 忽略错误继续复制
dd if=/dev/sda of=backup.img conv=noerror,sync

# 使用ddrescue处理坏道
ddrescue -d -r3 /dev/sda backup.img rescue.log

验证完整性

# 比较源和目标
cmp /dev/sda backup.img

# 检查MD5
md5sum /dev/sda backup.img

七、替代工具推荐

对于常规备份,考虑使用更高级的工具:

  • rsync - 文件级同步
  • tar - 归档文件
  • Clonezilla - 完整的磁盘克隆
  • Borg Backup - 去重备份

dd最适合:

  • 低级磁盘操作
  • 创建磁盘镜像
  • 数据恢复
  • 测试I/O性能

记住:使用dd时要格外小心,错误的参数可能导致数据丢失! 在执行重要操作前,先在不重要的数据上测试命令。

相关帖子
面对餐厅使用过期食材的嫌疑,普通消费者应该如何收集证据并进行投诉?
面对餐厅使用过期食材的嫌疑,普通消费者应该如何收集证据并进行投诉?
参加单位组织的团建或文体活动时受伤,能否被认定为工伤?
参加单位组织的团建或文体活动时受伤,能否被认定为工伤?
办理“带押过户”的完整步骤是什么?从申请到拿到新证需要多久?
办理“带押过户”的完整步骤是什么?从申请到拿到新证需要多久?
如何从法律定义上理解“高温津贴属于工资”而不仅仅是一种福利?
如何从法律定义上理解“高温津贴属于工资”而不仅仅是一种福利?
2026年亲人离世后,如何通过“身后一件事”联办服务一次性处理多项事务?
2026年亲人离世后,如何通过“身后一件事”联办服务一次性处理多项事务?
作为租户,不文明养犬行为除了影响自己,是否还会关联到房东的信用记录?
作为租户,不文明养犬行为除了影响自己,是否还会关联到房东的信用记录?
以为抵押合同和借款合同一样,金额期限不一致要以借款为准
以为抵押合同和借款合同一样,金额期限不一致要以借款为准
设立居住权登记后,对房产的继承与后续处置会产生什么影响?
设立居住权登记后,对房产的继承与后续处置会产生什么影响?
如何确保一个农村养老互助项目或模式能够长期、稳定地运行下去?
如何确保一个农村养老互助项目或模式能够长期、稳定地运行下去?
怀化市app开发@专业网站建设公司,一站式建站服务
怀化市app开发@专业网站建设公司,一站式建站服务
关于指甲月牙能预示健康状况的说法,现代医学究竟是如何看待的?
关于指甲月牙能预示健康状况的说法,现代医学究竟是如何看待的?
发烧时出的汗和身体主动散热之间,到底是什么因果关系,很多人是不是搞反了?
发烧时出的汗和身体主动散热之间,到底是什么因果关系,很多人是不是搞反了?
在嘈杂的现代都市环境中,我们应该如何科学地保护耳朵和鼻子?
在嘈杂的现代都市环境中,我们应该如何科学地保护耳朵和鼻子?
汉中市小视频制作#专业网站设计服务,网站制作
汉中市小视频制作#专业网站设计服务,网站制作
梅州市营销网站建设@品牌网站建设开发,收费标准
梅州市营销网站建设@品牌网站建设开发,收费标准
三亚市私人救护车跨省转运-专业接送病人救护车
三亚市私人救护车跨省转运-专业接送病人救护车
免费时段快结束了还没到目的地,先在就近出口下高速再重新上来,真的能少算一段费用吗?
免费时段快结束了还没到目的地,先在就近出口下高速再重新上来,真的能少算一段费用吗?
共享单车企业如何通过技术升级,从源头减少车辆乱停乱放的行为?
共享单车企业如何通过技术升级,从源头减少车辆乱停乱放的行为?
医保电子凭证的刷码支付密码和实体卡的交易密码是一套吗,会不会互相影响呢?
医保电子凭证的刷码支付密码和实体卡的交易密码是一套吗,会不会互相影响呢?
为什么山火现场要尽量避开山谷、陡坡和反斜面,哪些地形更容易积聚浓烟?
为什么山火现场要尽量避开山谷、陡坡和反斜面,哪些地形更容易积聚浓烟?