linux--dd

dd

if=xxx 从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)of=xxx 向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)bs=8k 每次读或写的大小,即一个块的大小。count=xxx 读写块的总数量。
null是个空文件,而zero是个无显示的无限输入文件,永远无尽头,这就代表zero可以作为一个无限写入硬盘的文件,而null是个无限空的文件可以理解为windows下的垃圾桶。

实例

[root@localhost text]# 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]# du -sh sun.txt 
1.1M    sun.txt
该命令创建了一个1M大小的文件sun.txt,其中参数解释:
if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。bs 代表字节为单位的块大小。count 代表被复制的块数。/dev/zero 是一个字符设备,会不断返回0值字节(\0)。

dd if=/dev/zero of=/home/jli/testfile bs=1M count=100 
if=filename 指定将要拷贝输入的文件名。ibs=blocksize 指定输入文件的块大小。ifskip=numberofeof 指定前跳过的eof标志的个数。files=numberofblocks 在拷贝前,在输入文件上跳过指定数目的块.of=filename 指定创建的输出文件obs=blocaksize 指定输出块大小seek=recordnumber 拷贝文件时,指定输入文件的开始记录号。conv=conversionparameter 指定数据转换的类型,描述数据转换类型的参数有:  ASCII,EBCDIC,block,unblock.lcase,,ucase. 

示例:将file.dd 输出到磁盘文件.
dd if=file.dd of=/dev/rfd0135ds18
将EBCDIC格式存放的文件转换为ASCII文件
dd if=file1 of =file2 conv=ascii
将磁带上的三个文件拷贝到文件file1
dd if=/dev/mnt0 fskip=2 of =file1

实例:

创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1
创建一个4G的tmp.test 文件
dd if=/dev/zero of=tmp.test bs=4096M count=1

dd if=/dev/zero of=100M.img bs=1M count=100    
dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0    
ls -l 1G.img  
-rw-r-r- 1 root  root  1048576000 Mar 25 15:32 1G.img    
du -m 1G.img
1M
  
这里用了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls命令看新生成的文件,大小可以看出是1000M。但是再用du一看,实际占用硬盘大小只有1M。
if=FILE      : 指定输入文件,若不指定则从标注输入读取。这里指定为/dev/zero是Linux的一个伪文件,它可以产生连续不断的null流(二进制的0)
of=FILE      : 指定输出文件,若不指定则输出到标准输出
bs=BYTES     : 每次读写的字节数,可以使用单位K、M、G等等。另外输入输出可以分别用ibs、obs指定,若使用bs,则表示是ibs和obs都是用该参数
count=BLOCKS : 读取的block数,block的大小由ibs指定(只针对输入参数)

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.备份磁盘开始的512个字节大小的MBR信息到指定文件

dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:dd if=/root/image of=/dev/hda

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

1.1整盘数据备份与恢复

备份

将本地的/dev/hdx整盘备份到/dev/hdy :
dd if=/dev/hdx of=/dev/hdy
将/dev/hdx全盘数据备份到指定路径的image文件:
dd if=/dev/hdx of=/path/to/image
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径:
dd if=/dev/hdx | gzip>/path/to/image.gz

恢复

将备份文件恢复到指定盘:
dd if=/path/to/image of=/dev/hdx
将压缩的备份文件恢复到指定盘:
gzip -dc /path/to/image.gz | dd of=/dev/hdx

2.1利用netcat远程备份

在源主机上执行此命令备份/dev/hda:
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在目的主机上执行此命令来接收数据并写入/dev/hdc:
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
以下两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当
前目录:netcat -l -p 1234 | bzip2 > partition.imgnetcat -l -p 1234 | gzip > partition.img

3.1备份MBR

备份:备份磁盘开始的512Byte大小的MBR信息到指定文件:
dd if=/dev/hdx of=/path/to/image count=1 bs=512
恢复:将备份的MBR信息写到磁盘开始部分:
dd if=/path/to/image of=/dev/hdx

4.1备份软盘

将软驱数据备份到当前目录的disk.img文件:
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
将内存里的数据拷贝到root目录下的mem.bin文件:
dd if=/dev/mem of=/root/mem.bin bs=1024

5.1从光盘拷贝iso镜像

拷贝光盘数据到root文件夹下,并保存为cd.iso文件:
dd if=/dev/cdrom of=/root/cd.iso

6.1增加Swap分区文件大小创建一个足够大的文件(此处为256M):

dd if=/dev/zero of=/swapfile bs=1024 count=262144
把这个文件变成swap文件:
mkswap /swapfile
启用这个swap文件:
swapon /swapfile
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:
/swapfile swap swap defaults 0 0

7.1销毁磁盘数据

利用随机的数据填充硬盘:
dd if=/dev/urandom of=/dev/hda1
在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

8.1磁盘管理

通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小:

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

测试硬盘读写速度

通过两个命令输出的执行时间,可以计算出测试硬盘的读/写速度:

dd if=/dev/zero of=/mnt/test/1Gb.file bs=1024 count=1000000    
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 13.8662 s, 73.8 MB/s 
dd if=/mnt/test/1Gb.file bs=64k | dd of=/dev/null      
15625+0 records in
15625+0 records out
1024000000 bytes (1.0 GB) copied, 6.19643 s, 165 MB/s
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 6.19598 s, 165 MB/s
time dd if=/dev/zero of=/mnt/test/1Gb.file bs=1k count=1000000 conv=fsync
000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 23.9636 s, 42.7 MB/s

real    0m23.968s
user    0m0.100s
sys     0m1.736s

加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,这样算出来的时间才是比较符合实际使用结果的。conv=fsync表示把文件的“数据”和“metadata”都写入磁盘(metadata包括size、访问时间st_atime & st_mtime等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,fsync 与fdatasync相差不大。(重要,最有参考价值)

把/mnt/test/1Gb.file中的数据写入/tmp/test1文件中
time dd if=/mnt/test/1Gb.file of=/tmp/test1 bs=1k count=1000000  
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 24.3568 s, 42.0 MB/s 
real    0m24.437s
user    0m0.212s
sys     0m3.284s

修复硬盘

当硬盘较长时间(比如一两年年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到
这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致
硬盘报废。下面的命令有可能使这些数据起死回生。且这个过程是安全,高效的。dd if=/dev/sda of=/dev/sda

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 命令 dd 参数说明:if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >o...
    LGmark阅读 753评论 0 4
  • 1 概述 本文对配额,RAID,LVM的概念和具体创建过程做了介绍 2 配额 2.1 配额概念 在内核中执行 以文...
    ghbsunny阅读 2,690评论 0 1
  • RAID 创建RAID5 新建/dev/sdb1、/dev/sdb2、/dev/sdb3、/dev/sdb4、/d...
    JevonWei阅读 1,104评论 0 0
  • 第1章 小试牛刀 $ 是普通用户,# 表示管理员用户 root。 shebang:#!。sharp / hash ...
    巴喬書摘阅读 6,326评论 1 4
  • 昨天我家小胖多在姥姥姥爷的带领下来医院看我了。小家伙在米色小棉袄的映衬下,肤色愈发粉嫩。特别是肉肉的小脸蛋上有了两...
    奶曦阅读 158评论 0 0