linux之dd命令
復制文件并對原文件的內容進行轉換和格式化處理

補充說明
dd 命令 用于復制文件并對原文件的內容進行轉換和格式化處理。dd 命令功能很強大的,對于一些比較底層的問題,使用 dd 命令往往可以得到出人意料的效果。用的比較多的還是用 dd 來備份裸設備。但是不推薦,如果需要備份 oracle 裸設備,可以使用 rman 備份,或使用第三方軟件備份,使用 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.1M sun.txt
該命令創建了一個 1M 大小的文件 sun.txt,其中參數解釋:
if 代表輸入文件。如果不指定 if,默認就會從 stdin 中讀取輸入。
of 代表輸出文件。如果不指定 of,默認就會將 stdout 作為默認輸出。
bs 代表字節為單位的塊大小。
count 代表被復制的塊數。
/dev/zero 是一個字符設備,會不斷返回 0 值字節(
/dev/zero 是一個字符設備,會不斷返回 0 值字節(\0)。
)。塊大小可以使用的計量單位表
以上命令可以看出 dd 命令來測試內存操作速度:
> 1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s
生成隨機字符串
我們甚至可以使用 /dev/urandom 設備配合 dd 命令 來獲取隨機字符串。
> 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文件: /swapfile swap swap default 0 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
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。