linux--dd

dd

if=xxx 從xxx讀取,如if=/dev/zero,該設(shè)備無窮盡地提供0,(不產(chǎn)生讀磁盤IO)of=xxx 向xxx寫出,可以寫文件,可以寫裸設(shè)備。如of=/dev/null,"黑洞",它等價(jià)于一個(gè)只寫文件. 所有寫入它的內(nèi)容都會(huì)永遠(yuǎn)丟失. (不產(chǎn)生寫磁盤IO)bs=8k 每次讀或?qū)懙拇笮。匆粋€(gè)塊的大小。count=xxx 讀寫塊的總數(shù)量。
null是個(gè)空文件,而zero是個(gè)無顯示的無限輸入文件,永遠(yuǎn)無盡頭,這就代表zero可以作為一個(gè)無限寫入硬盤的文件,而null是個(gè)無限空的文件可以理解為windows下的垃圾桶。

實(shí)例

[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
該命令創(chuàng)建了一個(gè)1M大小的文件sun.txt,其中參數(shù)解釋:
if 代表輸入文件。如果不指定if,默認(rèn)就會(huì)從stdin中讀取輸入。of 代表輸出文件。如果不指定of,默認(rèn)就會(huì)將stdout作為默認(rèn)輸出。bs 代表字節(jié)為單位的塊大小。count 代表被復(fù)制的塊數(shù)。/dev/zero 是一個(gè)字符設(shè)備,會(huì)不斷返回0值字節(jié)(\0)。

dd if=/dev/zero of=/home/jli/testfile bs=1M count=100 
if=filename 指定將要拷貝輸入的文件名。ibs=blocksize 指定輸入文件的塊大小。ifskip=numberofeof 指定前跳過的eof標(biāo)志的個(gè)數(shù)。files=numberofblocks 在拷貝前,在輸入文件上跳過指定數(shù)目的塊.of=filename 指定創(chuàng)建的輸出文件obs=blocaksize 指定輸出塊大小seek=recordnumber 拷貝文件時(shí),指定輸入文件的開始記錄號(hào)。conv=conversionparameter 指定數(shù)據(jù)轉(zhuǎn)換的類型,描述數(shù)據(jù)轉(zhuǎn)換類型的參數(shù)有:  ASCII,EBCDIC,block,unblock.lcase,,ucase. 

示例:將file.dd 輸出到磁盤文件.
dd if=file.dd of=/dev/rfd0135ds18
將EBCDIC格式存放的文件轉(zhuǎn)換為ASCII文件
dd if=file1 of =file2 conv=ascii
將磁帶上的三個(gè)文件拷貝到文件file1
dd if=/dev/mnt0 fskip=2 of =file1

實(shí)例:

創(chuàng)建一個(gè)100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1
創(chuàng)建一個(gè)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
  
這里用了一個(gè)新的命令seek,表示略過1000個(gè)Block不寫(這里Block按照bs的定義是1M),count=0表示寫入0個(gè)Block。用ls命令看新生成的文件,大小可以看出是1000M。但是再用du一看,實(shí)際占用硬盤大小只有1M。
if=FILE      : 指定輸入文件,若不指定則從標(biāo)注輸入讀取。這里指定為/dev/zero是Linux的一個(gè)偽文件,它可以產(chǎn)生連續(xù)不斷的null流(二進(jìn)制的0)
of=FILE      : 指定輸出文件,若不指定則輸出到標(biāo)準(zhǔn)輸出
bs=BYTES     : 每次讀寫的字節(jié)數(shù),可以使用單位K、M、G等等。另外輸入輸出可以分別用ibs、obs指定,若使用bs,則表示是ibs和obs都是用該參數(shù)
count=BLOCKS : 讀取的block數(shù),block的大小由ibs指定(只針對(duì)輸入?yún)?shù))

1.將本地的/dev/hdb整盤備份到/dev/hdd

dd if=/dev/hdb of=/dev/hdd

2.將/dev/hdb全盤數(shù)據(jù)備份到指定路徑的image文件

dd if=/dev/hdb of=/root/image

3.將備份文件恢復(fù)到指定盤

dd if=/root/image of=/dev/hdb

4.備份/dev/hdb全盤數(shù)據(jù),并利用gzip工具進(jìn)行壓縮,保存到指定路徑

dd if=/dev/hdb | gzip > /root/image.gz

5.將壓縮的備份文件恢復(fù)到指定盤

gzip -dc /root/image.gz | dd of=/dev/hdb

6.備份磁盤開始的512個(gè)字節(jié)大小的MBR信息到指定文件

dd if=/dev/hda of=/root/image count=1 bs=512
count=1指僅拷貝一個(gè)塊;bs=512指塊大小為512個(gè)字節(jié)。
恢復(fù):dd if=/root/image of=/dev/hda

7.備份軟盤

dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即塊大小為1.44M)

8.拷貝內(nèi)存內(nèi)容到硬盤

dd if=/dev/mem of=/root/mem.bin bs=1024 (指定塊大小為1k)

9.拷貝光盤內(nèi)容到指定文件夾,并保存為cd.iso文件

dd if=/dev/cdrom(hdc) of=/root/cd.iso

1.1整盤數(shù)據(jù)備份與恢復(fù)

備份

將本地的/dev/hdx整盤備份到/dev/hdy :
dd if=/dev/hdx of=/dev/hdy
將/dev/hdx全盤數(shù)據(jù)備份到指定路徑的image文件:
dd if=/dev/hdx of=/path/to/image
備份/dev/hdx全盤數(shù)據(jù),并利用gzip工具進(jìn)行壓縮,保存到指定路徑:
dd if=/dev/hdx | gzip>/path/to/image.gz

恢復(fù)

將備份文件恢復(fù)到指定盤:
dd if=/path/to/image of=/dev/hdx
將壓縮的備份文件恢復(fù)到指定盤:
gzip -dc /path/to/image.gz | dd of=/dev/hdx

2.1利用netcat遠(yuǎn)程備份

在源主機(jī)上執(zhí)行此命令備份/dev/hda:
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在目的主機(jī)上執(zhí)行此命令來接收數(shù)據(jù)并寫入/dev/hdc:
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
以下兩條指令是目的主機(jī)指令的變化分別采用bzip2 gzip對(duì)數(shù)據(jù)進(jìn)行壓縮,并將備份文件保存在當(dāng)
前目錄: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
恢復(fù):將備份的MBR信息寫到磁盤開始部分:
dd if=/path/to/image of=/dev/hdx

4.1備份軟盤

將軟驅(qū)數(shù)據(jù)備份到當(dāng)前目錄的disk.img文件:
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
將內(nèi)存里的數(shù)據(jù)拷貝到root目錄下的mem.bin文件:
dd if=/dev/mem of=/root/mem.bin bs=1024

5.1從光盤拷貝iso鏡像

拷貝光盤數(shù)據(jù)到root文件夾下,并保存為cd.iso文件:
dd if=/dev/cdrom of=/root/cd.iso

6.1增加Swap分區(qū)文件大小創(chuàng)建一個(gè)足夠大的文件(此處為256M):

dd if=/dev/zero of=/swapfile bs=1024 count=262144
把這個(gè)文件變成swap文件:
mkswap /swapfile
啟用這個(gè)swap文件:
swapon /swapfile
在每次開機(jī)的時(shí)候自動(dòng)加載swap文件, 需要在 /etc/fstab 文件中增加一行:
/swapfile swap swap defaults 0 0

7.1銷毀磁盤數(shù)據(jù)

利用隨機(jī)的數(shù)據(jù)填充硬盤:
dd if=/dev/urandom of=/dev/hda1
在某些必要的場合可以用來銷毀數(shù)據(jù)。執(zhí)行此操作以后,/dev/hda1將無法掛載,創(chuàng)建和拷貝操作無法執(zhí)行。

8.1磁盤管理

通過比較dd指令輸出中所顯示的命令執(zhí)行時(shí)間,即可確定系統(tǒng)最佳的block size大?。?/h4>

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

測(cè)試硬盤讀寫速度

通過兩個(gè)命令輸出的執(zhí)行時(shí)間,可以計(jì)算出測(cè)試硬盤的讀/寫速度:

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

加入這個(gè)參數(shù)后,dd命令執(zhí)行到最后會(huì)真正執(zhí)行一次“同步(sync)”操作,這樣算出來的時(shí)間才是比較符合實(shí)際使用結(jié)果的。conv=fsync表示把文件的“數(shù)據(jù)”和“metadata”都寫入磁盤(metadata包括size、訪問時(shí)間st_atime & st_mtime等等),因?yàn)槲募臄?shù)據(jù)和metadata通常存在硬盤的不同地方,因此fsync至少需要兩次IO寫操作,fsync 與fdatasync相差不大。(重要,最有參考價(jià)值)

把/mnt/test/1Gb.file中的數(shù)據(jù)寫入/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

修復(fù)硬盤

當(dāng)硬盤較長時(shí)間(比如一兩年年)放置不使用后,磁盤上會(huì)產(chǎn)生magnetic flux point。當(dāng)磁頭讀到
這些區(qū)域時(shí)會(huì)遇到困難,并可能導(dǎo)致I/O錯(cuò)誤。當(dāng)這種情況影響到硬盤的第一個(gè)扇區(qū)時(shí),可能導(dǎo)致
硬盤報(bào)廢。下面的命令有可能使這些數(shù)據(jù)起死回生。且這個(gè)過程是安全,高效的。dd if=/dev/sda of=/dev/sda

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 命令 dd 參數(shù)說明:if=文件名:輸入文件名,缺省為標(biāo)準(zhǔn)輸入。即指定源文件。< if=input file >o...
    LGmark閱讀 868評(píng)論 0 4
  • 1 概述 本文對(duì)配額,RAID,LVM的概念和具體創(chuàng)建過程做了介紹 2 配額 2.1 配額概念 在內(nèi)核中執(zhí)行 以文...
    ghbsunny閱讀 3,148評(píng)論 0 1
  • RAID 創(chuàng)建RAID5 新建/dev/sdb1、/dev/sdb2、/dev/sdb3、/dev/sdb4、/d...
    JevonWei閱讀 1,222評(píng)論 0 0
  • 第1章 小試牛刀 $ 是普通用戶,# 表示管理員用戶 root。 shebang:#!。sharp / hash ...
    巴喬書摘閱讀 6,659評(píng)論 1 4
  • 昨天我家小胖多在姥姥姥爺?shù)膸ьI(lǐng)下來醫(yī)院看我了。小家伙在米色小棉襖的映襯下,膚色愈發(fā)粉嫩。特別是肉肉的小臉蛋上有了兩...
    奶曦閱讀 203評(píng)論 0 0

友情鏈接更多精彩內(nèi)容