Linux dd命令詳解:數據備份,並在備份過程中進行格式轉換案例
dd 命令主要用來進行數據備份,並且可以在備份的過程中進行格式轉換。其實 dd 命令可以把源數據復制成目標數據,而且不管源數據是文件、分區、磁盤還是光盤,都可以進行數據備份。
dd 命令的基本格式如下:
[root@localhost ~]# dd if="輸入文件" of="輸出文件" bs="數據塊" count="數量"
參數:
- if:定義輸入數據的文件,也可以是輸入設備;
- of:定義輸出數據的文件,也可以是輸出設備;
- bs:指定數據塊的大小,也就是定義一次性讀取或寫入多少字節。模式數據塊大小是 512 字節;
- count:指定 bs 的數量;
- conv=標志:依據標志轉換文件。標志有以下這些:
- ascii:由 EBCDIC 碼轉換至 ASCII 碼;
- ebcdic:由 ASCII 碼轉換至 EBCDIC 碼;
- ibm:由 ASCII 碼轉換至替換的 EBCDIC 碼;
- block:將結束字符塊裡的換行替換成等長的空格;
- unblock:將 cbs 大小的塊中尾部的空格替換為一個換行符;
- lcase:將大寫字符轉換為小寫;
- notrunc:不截斷輸出文件;
- ucase:將小寫字符轉換為大寫;
- swab:交換每一對輸入數據字節;
- noerror:讀取數據發生錯誤後仍然繼續;
- sync:將每個輸入數據塊以 NUL 字符填滿至 ibs 的大小;當配合 block 或 unblock 時,會以空格代替 NUL 字符填充;
【例 1】備份文件
[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak 記錄瞭67+1 的讀入 #數據占瞭寫滿的67個數據塊,以及1個沒有寫滿的數據塊 記錄瞭67+1 的寫出 #默認數據塊大小是512字節 34439字節(34 kB)已復制,0.0524897 秒,656 kB/秒 #如果要備份文件,那麼dd命令和cp命令非常類似 [root@localhost ~]# ll -h /tmp/httpd.bak -rw-r--r--.1 root root 34K 6月 5 18:04 /tmp/httpd.bak #查看一下生成的備份文件的大小
【例 2】備份分區為一個備份文件
[root@localhost ~]# df -h 文件系統 容量 已用 可用 已用%% 掛載點 /dev/sda3 20G 2.0G 17G 11% / tmpfs 306M 0 306M 0% /dev/shm /dev/sda1 194M 27M 157M 15% /boot /dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom #查看一下分區容量,我們備份/boot分區 [root@localhost ~]# dd if=/dev/sda1 of=/tmp/boot.bak #備份完成 [root@localhost ~]# ll -h /tmp/boot.bak -rw-r--r--.1 root root 200M 6月 5 18:14 /tmp/boot.bak #查看生成的備份文件 #如果需要恢復,則執行以下命令 [root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1
如果想要把分區直接備份成另一個分區,就需要生成一個新的分區,這個分區的大小不能比源分區小,隻能和源分區大小一致或比它大。命令如下:
[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1 #如果需要恢復,則隻需把輸入項和輸出項反過來即可,命令如下 [root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1
【例 3】整盤備份
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb #把磁盤a備份到磁盤b [root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak #把磁盤a備份成文件disk.bak #備份恢復 #如果要備份到另一塊硬盤上,那麼,當源硬盤數據損壞時,隻需用備份硬盤替換源硬盤即可 #如果要備份成文件,那麼在恢復時需要把備份數據復制到其他Linux中,然後把新硬盤安裝到這臺Linux #服務器上,再把磁盤備份數據復制到新硬盤中。命令如下 [root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb
【例 4】復制軟盤
[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak #在Linux中軟盤的設備文件名是/dev/fd0 #這條命令先把軟盤中的數據保存為臨時數據文件 [root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0 #然後更換新的軟盤,把數據備份復制到新軟盤中,就實現瞭軟盤的復制
如果需要備份的是光盤,那麼在 Linux 中就是使用 dd 命令制作光盤的 ISO 鏡像的。命令如下:
#制作光盤ISO鏡像 [root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盤中所有的數據制作成ISO鏡像 [root@localhost ~J # mkdir /mnt/cd #建立一個新的掛載點 [root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #掛栽ISO文件到掛載點 [root@localhost ~]# cd /mnt/cd #進入掛栽點 [root@localhost cd]# ls CentOS_BuildTag images RELEASE-NOTES-en-tJS.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL EULA isolinux repodata RPM-GPG-KEY-CentOS-Security-6 GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6 #數據是光盤當中的數據,這個ISO鏡像是可以被當作真正的光盤使用的
我們有時需要制作指定大小的文件,比如,在增加 swap 分區時,就需要建立指定大小的文件,這時也使用 dd 命令。命令如下:
[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10 #數據輸入項是/dev/zero會向目標文件中不停地寫入二進制的0 #指定數據塊大小是1MB #指定生成10個數據塊。也就是定義輸出的文件大小為10MB 記錄瞭10+0 的讀入 #顯示數據占滿瞭10個數據塊 記錄瞭10+0 的寫出 #不過這裡數據塊的大小已經是1MB瞭 10485760字節(10 MB)已復制,0.00709902 秒,1.5 GB/秒 [root@localhost ~]# ll -h /tmp/testfile -rw-r--r--.1 root root 10M 6月 5 18:46 /tmp/testfile #生成的testfile文件的大小剛好是10MB
dd 命令在進行整盤復制時,類似於 GHOST 工具的功能,不過通過 dd 命令復制出來的硬盤數據要比 GHOST 復制出來的硬盤數據穩定得多。雖然 dd 命令功能強大,不過也有一個明顯的缺點,就是復制的時間較長,復制 100GB 的數據需要 15~25 分鐘(根據服務器的性能不同而不同)。
實現數據備份還有非常多的方法和工具,比如 tar 和 cpio 命令。至於網絡復制工具,如 rsync 和 scp 等,需要較完善的網絡知識才能夠學習,這裡不再介紹。
到此這篇關於Linux dd命令詳解:數據備份,並在備份過程中進行格式轉換案例的文章就介紹到這瞭,更多相關Linux dd命令內容請搜索GuideAH以前的文章或繼續瀏覽下面的相關文章,希望大傢以後多多支持GuideAH!
閱讀更多:
- linux怎麼調整swap大小? linux擴容swap分區的技巧
- 如何從零開始制作一個linux iso鏡像(圖文教程)
- 在 Linux 中如何恢復已刪除的文件
- linux系統下安裝dubbo-admin的詳細過程
- 如何使用SecureCRT連接虛擬機中的Linux?