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