linux 命令:dd 的使用

139 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天,点击查看活动详情

dd命令用于复制一个文件,根据输入的参数转换格式化数据

参数

  1. bs=bytes :一次最多复制bytes字节数据,设置读写的块大小
  2. cbs=bytes :一次转换bytes字节数据,
  3. conv=conv[,conv...] :配置转换的参数,多配置使用逗号分隔
  4. ibs=bytes:一次最多读bytes字节,即一个块大小,默认是512
  5. count=N:复制N个块,每块大小ibs
  6. if=file:输入文件名
  7. of=file:输出文件名
  8. iflag=flag[,falg...]:按照flags的配置模式读输入文件
  9. obs=bytes:一次最多写bytes字节,即一个块大小,默认 512
  10. oflag=flags[,flag..]:按照flags的配置模式写入文件
  11. seek=N:跳过输出文件开头N个块空间开始写
  12. skip=N:跳过输入文件N个块空间开始读

bs,cbs,ibs,obs等带数字配置项,数字后面可以跟后缀,需要数字乘以相应字符代表的数值
c =1;w=2;b=512;K=1024;kb=1000;MB=1000*1000;M=1024*1024;GB=1000*1000*1000;G=1024*1024*1024

conv的可用配置 image.png 输入输出配置列表

image.png


常用命令

检测硬盘读写速度 首先介绍两个虚拟设备、/dev/null /dev/zero

/dev/null:空洞,数据可以随意扔进去,只进不出,有多少消费多少,输入性的设备 /dev/zero:输出型的设备,可以无限输出0值,主要用它来生成一个指定大小的空文件,或者用来清空空间

测试硬盘写入:dd if=/dev/zero of=/test bs=64K count=10000 conv=fdatasync
            dd if=/dev/zero of=/test bs=64K count=10000 ofalg=dsync

image.png

建议配置conv=fdatasync或者oflag,能够看出来硬盘的大数据的写入速度。默认dd是写到内存中,就退出命令,根本没写到硬盘,得到的参数也是不对的了。

创建swap分区: dd if=/dev/zero  of=/swapBuf bs=1M count=1024 创建一个1g的文件、
生成swap文件:mkswap /swapBuf 
改一下权限:chmod 0600 /swapBuf
开启swap: swapon /swapBuf
关闭swap:  swapoff /swapBuf

free看一下swap数据,都是0 创建并开启一个swap分区,可以看下图效果

image.png

image.png

image.png

备份MBR:dd if=/dev/sda of=/mbrBak bs=512 count=1
表,2字节的签名(0x55 0xaa)。
恢复mbr:dd if=/mbrBak of=/dev/sda bs=512 count=1
仅恢复分区表:dd if=/mbrBak of=/dev/sda bs=1 count=66 seek=446 skip=446

mbr是采用mbr分区表的硬盘的第一个扇区,大小为512字节,其中446字节启动代码,64字节的硬盘分区
使用命令查看一下 hexdump -C -n 512 /dev/sda

image.png

备份磁盘:dd if=/dev/sda of=/Disk.img
恢复备份: dd if=/Disk.img of=/dev/sdb
清洗磁盘: dd if=/dev/urandom of=/dev/sdb
脑筋可清醒点,别洗自己硬盘