Linux常用命令之dd命令详解

dd 命令详解

dd 命令是 Unix 和 Linux 系统中一个非常强大的工具,用于转换和复制文件。它可以用来备份和恢复磁盘或分区、创建和修改文件系统、以及进行各种数据操作。dd 命令的灵活性和强大功能使其在系统管理、数据恢复和安全领域中广泛使用。

基本语法
dd [选项] if=输入文件 of=输出文件

其中:

  • if=输入文件:指定输入文件。默认为标准输入(stdin)。
  • of=输出文件:指定输出文件。默认为标准输出(stdout)。
  • bs=块大小:指定读取和写入的块大小。默认为 512 字节。
  • count=块数:指定要复制的块数。
  • skip=块数:在读取输入文件之前跳过的块数。
  • seek=块数:在写入输出文件之前跳过的块数。
  • conv=转换列表:指定数据转换方式。
常用选项
  1. if=输入文件

    • 指定输入文件。例如:
      dd if=input.img
      
  2. of=输出文件

    • 指定输出文件。例如:
      dd of=output.img
      
  3. bs=块大小

    • 指定读取和写入的块大小。例如:
      dd bs=1M
      
  4. count=块数

    • 指定要复制的块数。例如:
      dd count=10
      
  5. skip=块数

    • 在读取输入文件之前跳过的块数。例如:
      dd skip=1
      
  6. seek=块数

    • 在写入输出文件之前跳过的块数。例如:
      dd seek=1
      
  7. conv=转换列表

    • 指定数据转换方式。常见的转换选项包括:
      • notrunc:不截断输出文件。
      • noerror:遇到读取错误时继续。
      • sync:使用零填充不足的块。
      • swab:交换每对字节。
      • ascii:转换为 ASCII。
      • ebcdic:转换为 EBCDIC。
      • ibm:转换为 IBM EBCDIC。
      • lcase:转换为小写。
      • ucase:转换为大写。
      • block:转换为块格式。
      • unblock:转换为非块格式。
    • 例如:
      dd conv=notrunc,noerror
      
常见用法
  1. 备份和恢复磁盘或分区

    • 备份磁盘
      sudo dd if=/dev/sda of=backup.img bs=4M
      
    • 恢复磁盘
      sudo dd if=backup.img of=/dev/sda bs=4M
      
  2. 创建启动盘

    • 将 ISO 文件写入 USB 驱动器
      sudo dd if=path/to/iso of=/dev/sdb bs=4M
      
  3. 创建空文件

    • 创建一个 1GB 的空文件
      dd if=/dev/zero of=emptyfile bs=1G count=1
      
  4. 克隆磁盘

    • 克隆一个磁盘到另一个磁盘
      sudo dd if=/dev/sda of=/dev/sdb bs=4M
      
  5. 擦除磁盘

    • 使用随机数据擦除磁盘
      sudo dd if=/dev/urandom of=/dev/sda bs=4M
      
  6. 转换文件格式

    • 将 EBCDIC 文件转换为 ASCII 文件
      dd if=input.ebcdic of=output.ascii conv=ascii
      
  7. 复制并压缩文件

    • 复制文件并使用 gzip 压缩
      dd if=inputfile | gzip > outputfile.gz
      
  8. 检查磁盘读取速度

    • 测试磁盘读取速度
      dd if=/dev/sda of=/dev/null bs=4M
      
  9. 检查磁盘写入速度

    • 测试磁盘写入速度
      dd if=/dev/zero of=testfile bs=4M count=1024
      
注意事项
  1. 谨慎使用

    • dd 命令非常强大,但也非常危险。特别是当涉及到磁盘和分区操作时,错误的命令可能会导致数据丢失。在执行任何操作之前,请确保备份重要数据。
  2. 确认设备名称

    • 在使用 dd 命令时,务必确认设备名称(如 /dev/sda/dev/sdb 等)正确无误,以免误操作导致数据丢失。
  3. 合理设置块大小

    • 合理设置 bs 参数可以提高 dd 命令的性能。通常情况下,较大的块大小(如 4M1G)可以提高读写速度。
  4. 使用 sudo

    • 对于涉及磁盘和分区的操作,通常需要超级用户权限。使用 sudo 可以确保命令具有足够的权限。
示例
  1. 备份整个磁盘

    • /dev/sda 磁盘备份到 backup.img 文件中,块大小为 4M。
      sudo dd if=/dev/sda of=backup.img bs=4M
      
  2. 恢复磁盘备份

    • backup.img 文件恢复到 /dev/sda 磁盘中,块大小为 4M。
      sudo dd if=backup.img of=/dev/sda bs=4M
      
  3. 创建启动 USB 驱动器

    • 将 ISO 文件 ubuntu-20.04.iso 写入 USB 驱动器 /dev/sdb,块大小为 4M。
      sudo dd if=ubuntu-20.04.iso of=/dev/sdb bs=4M
      
  4. 创建 1GB 的空文件

    • 创建一个 1GB 的空文件 emptyfile
      dd if=/dev/zero of=emptyfile bs=1G count=1
      
  5. 克隆磁盘

    • 将磁盘 /dev/sda 克隆到磁盘 /dev/sdb,块大小为 4M。
      sudo dd if=/dev/sda of=/dev/sdb bs=4M
      
  6. 使用随机数据擦除磁盘

    • 使用随机数据擦除磁盘 /dev/sda,块大小为 4M。
      sudo dd if=/dev/urandom of=/dev/sda bs=4M
      
  7. 转换文件格式

    • 将 EBCDIC 文件 input.ebcdic 转换为 ASCII 文件 output.ascii
      dd if=input.ebcdic of=output.ascii conv=ascii
      
  8. 复制并压缩文件

    • 复制文件 inputfile 并使用 gzip 压缩,输出为 outputfile.gz
      dd if=inputfile | gzip > outputfile.gz
      
  9. 检查磁盘读取速度

    • 测试磁盘 /dev/sda 的读取速度,块大小为 4M。
      dd if=/dev/sda of=/dev/null bs=4M
      
  10. 检查磁盘写入速度

    • 测试磁盘的写入速度,创建一个 4GB 的文件 testfile,块大小为 4M。
      dd if=/dev/zero of=testfile bs=4M count=1024
      
  11. 测试硬盘性能

  • 向硬盘写入 4G 大小的内容,测试硬盘读写性能,oflag=direct 不经过内存,直接写入硬盘。
    dd if=/dev/zero of=/data/testfile bs=1M count=4096 oflag=direct
    
  1. 观察 IO 变化
  • 开两个终端,一个终端执行此命令,另一个终端执行 iostat -x 1 观察 IO 变化。
    time -p bash -c "(dd if=/dev/zero of=/root/cc/a.txt bs=1M count=4096)"
    
  1. 备份 MBR
  • 备份 MBR,默认单位字节,K 为千字节。
    dd if=/dev/sda of=/mnt/mbr.backup bs=512 count=1
    
  • 还原 MBR
    dd if=/mnt/mbr.backup of=/dev/sda bs=512 count=1
    
  1. 备份主引导程序
  • 备份主引导程序,注意存储单位,默认为字节,K 为千字节,备份不要放在 /dev/sda分区。
    dd if=/dev/sda of=/root/init bs=1 count=446
    
  • 使用备份的主引导程序进行恢复
    dd if=/root/init of=/dev/sda
    
  1. 备份超级块
  • 备份超级块
    dd if=/dev/sdb of=/root/block bs=1K count=4
    
  • 利用备份的超级块进行恢复
    dd if=/root/block of=/dev/sdb
    
  1. 备份 MBR 分区表
  • 备份 MBR 分区表
    dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
    
  1. 将 ISO 文件写入 USB 驱动器
    • 创建可启动 USB,一次读 4M 的数据,status=progress 显示进度
      dd if=/path/to/image.iso of=/dev/sde bs=4M status=progress
      
  2. 创建一个 1G 的文件,将其制作为交换分区
    • 创建一个 1G 的文件
      dd if=/dev/zero of=/var/swapfile bs=1M count=1024
      
    • 将其制作为交换分区
      mkswap /var/swapfile
      swapon /var/swapfile
      
  3. 制作光盘镜像
  • 制作光盘镜像
    dd if=/dev/cdrom of=/root/rhel5.iso
    
  • 另一种方法
    cat /dev/cdrom > /root/rhel5.iso
    
  1. 进程
  • dd if=/dev/zero of=/dev/null 会占用大量的 CPU 资源,因为进程优先级相同,系统大概率不会死机。
  • 调高优先级占用 CPU,-f 优先级 1-99,系统会死机。
    chrt -f 10 dd if=/dev/zero of=/dev/null
    

总结

dd 命令是一个功能强大且灵活的工具,适用于多种数据操作任务,如备份和恢复磁盘、创建启动盘、克隆磁盘等。通过合理使用 dd 命令及其各种选项,可以高效地完成各种复杂的文件和磁盘操作。希望本文能帮助你更好地理解和使用 dd 命令。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值