linux之dd命令

一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述linux之dd命令相关的知识,希望能为你提供帮助。
补充说明
建议在有需要的时候使用 dd 对物理磁盘操作,如果是文件系统的话还是使用 tar backup cpio 等其他命令更加方便。另外,使用 dd 对磁盘操作时,最好使用块设备文件。
语法

dd (选项)

命令选项
bs=< 字节数> :将ibs(输入)与obs(输出)设成指定的字节数; cbs=< 字节数> :转换时,每次只转换指定的字节数; conv=< 关键字> :指定文件转换的方式; count=< 区块数> :仅读取指定的区块数; ibs=< 字节数> :每次读取的字节数; obs=< 字节数> :每次输出的字节数; of=< 文件> :输出到文件; seek=< 区块数> :一开始输出时,跳过指定的区块数; skip=< 区块数> :一开始读取时,跳过指定的区块数; --help:帮助; --version:显示版本信息。

实例
> dd if=/dev/zero of=sun.txt bs=1M count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s[root@localhost text] 1.1Msun.txt

该命令创建了一个 1M 大小的文件 sun.txt,其中参数解释:
  • if 代表输入文件。如果不指定 if,默认就会从 stdin 中读取输入。
  • of 代表输出文件。如果不指定 of,默认就会将 stdout 作为默认输出。
  • bs 代表字节为单位的块大小。
  • count 代表被复制的块数。
  • /dev/zero 是一个字符设备,会不断返回 0 值字节(\\0)。
块大小可以使用的计量单位表
单元大小 代码
字节(1B) c
字节(2B) w
块(512B) b
千字节(1024B) k
兆字节(1024KB) M
吉字节(1024MB) G
> 1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s

生成随机字符串
> dd if=/dev/urandom bs=1 count=15|base64 -w 0 15+0 records in 15+0 records out 15 bytes (15 B) copied, 0.000111993 s, 134 kB/s wFRAnlkXeBXmWs1MyGEs

常用案例汇总
1.将本地的/dev/hdb整盘备份到/dev/hdd #dd if=/dev/hdb of=/dev/hdd 2.将/dev/hdb全盘数据备份到指定路径的image文件 #dd if=/dev/hdb of=/root/image 3.将备份文件恢复到指定盘 #dd if=/root/image of=/dev/hdb 4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径 #dd if=/dev/hdb | gzip > /root/image.gz 5.将压缩的备份文件恢复到指定盘 #gzip -dc /root/image.gz | dd of=/dev/hdb 6.备份与恢复MBR 备份磁盘开始的512个字节大小的MBR信息到指定文件: #dd if=/dev/hda of=/root/image count=1 bs=512 count=1指仅拷贝一个块;bs=512指块大小为512个字节。 恢复: #dd if=/root/image of=/dev/had 将备份的MBR信息写到磁盘开始部分 7.备份软盘 #dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M) 8.拷贝内存内容到硬盘 #dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k) 9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件 #dd if=/dev/cdrom(hdc) of=/root/cd.iso 10.增加swap分区文件大小 第一步:创建一个大小为256M的文件: #dd if=/dev/zero of=/swapfile bs=1024 count=262144 第二步:把这个文件变成swap文件: #mkswap /swapfile 第三步:启用这个swap文件: #swapon /swapfile 第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件: /swapfileswapswapdefault0 0 11.销毁磁盘数据 #dd if=/dev/urandom of=/dev/hda1 注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。 12.测试硬盘的读写速度 #dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file #dd if=/root/1Gb.file bs=64k | dd of=/dev/null 通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。 13.确定硬盘的最佳块大小: #dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file #dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file #dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file #dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file 通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。 14.修复硬盘: #dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda 当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。 15.利用netcat远程备份 #dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234 在源主机上执行此命令备份/dev/hda #netcat -l -p 1234 | dd of=/dev/hdc bs=16065b 在目的主机上执行此命令来接收数据并写入/dev/hdc #netcat -l -p 1234 | bzip2 > partition.img #netcat -l -p 1234 | gzip > partition.img 以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。 将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值) echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

原文链接:https://rumenz.com/rumenbiji/linux-dd.html
微信公众号:入门小站
  • 回复【1001】获取 linux常用命令速查手册
  • 回复【10010】获取 阿里云ECS运维Linux系统诊断
  • 回复【10012】获取 Linux学习笔记【强悍总结值得一看】
  • 回复【10013】获取 shell简明教程
【linux之dd命令】
linux之dd命令

文章图片


    推荐阅读