Linux dd命令詳解:數(shù)據(jù)備份,并在備份過(guò)程中進(jìn)行格式轉(zhuǎn)換案例
dd 命令主要用來(lái)進(jìn)行數(shù)據(jù)備份,并且可以在備份的過(guò)程中進(jìn)行格式轉(zhuǎn)換。其實(shí) dd 命令可以把源數(shù)據(jù)復(fù)制成目標(biāo)數(shù)據(jù),而且不管源數(shù)據(jù)是文件、分區(qū)、磁盤(pán)還是光盤(pán),都可以進(jìn)行數(shù)據(jù)備份。
dd 命令的基本格式如下:
[root@localhost ~]# dd if="輸入文件" of="輸出文件" bs="數(shù)據(jù)塊" count="數(shù)量"
參數(shù):
- if:定義輸入數(shù)據(jù)的文件,也可以是輸入設(shè)備;
- of:定義輸出數(shù)據(jù)的文件,也可以是輸出設(shè)備;
- bs:指定數(shù)據(jù)塊的大小,也就是定義一次性讀取或?qū)懭攵嗌僮止?jié)。模式數(shù)據(jù)塊大小是 512 字節(jié);
- count:指定 bs 的數(shù)量;
- conv=標(biāo)志:依據(jù)標(biāo)志轉(zhuǎn)換文件。標(biāo)志有以下這些:
- ascii:由 EBCDIC 碼轉(zhuǎn)換至 ASCII 碼;
- ebcdic:由 ASCII 碼轉(zhuǎn)換至 EBCDIC 碼;
- ibm:由 ASCII 碼轉(zhuǎn)換至替換的 EBCDIC 碼;
- block:將結(jié)束字符塊里的換行替換成等長(zhǎng)的空格;
- unblock:將 cbs 大小的塊中尾部的空格替換為一個(gè)換行符;
- lcase:將大寫(xiě)字符轉(zhuǎn)換為小寫(xiě);
- notrunc:不截?cái)噍敵鑫募?/li>
- ucase:將小寫(xiě)字符轉(zhuǎn)換為大寫(xiě);
- swab:交換每一對(duì)輸入數(shù)據(jù)字節(jié);
- noerror:讀取數(shù)據(jù)發(fā)生錯(cuò)誤后仍然繼續(xù);
- sync:將每個(gè)輸入數(shù)據(jù)塊以 NUL 字符填滿(mǎn)至 ibs 的大小;當(dāng)配合 block 或 unblock 時(shí),會(huì)以空格代替 NUL 字符填充;
【例 1】備份文件
[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak 記錄了67+1 的讀入 #數(shù)據(jù)占了寫(xiě)滿(mǎn)的67個(gè)數(shù)據(jù)塊,以及1個(gè)沒(méi)有寫(xiě)滿(mǎn)的數(shù)據(jù)塊 記錄了67+1 的寫(xiě)出 #默認(rèn)數(shù)據(jù)塊大小是512字節(jié) 34439字節(jié)(34 kB)已復(fù)制,0.0524897 秒,656 kB/秒 #如果要備份文件,那么dd命令和cp命令非常類(lèi)似 [root@localhost ~]# ll -h /tmp/httpd.bak -rw-r--r--.1 root root 34K 6月 5 18:04 /tmp/httpd.bak #查看一下生成的備份文件的大小
【例 2】備份分區(qū)為一個(gè)備份文件
[root@localhost ~]# df -h 文件系統(tǒng) 容量 已用 可用 已用%% 掛載點(diǎn) /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 #查看一下分區(qū)容量,我們備份/boot分區(qū) [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 #查看生成的備份文件 #如果需要恢復(fù),則執(zhí)行以下命令 [root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1
如果想要把分區(qū)直接備份成另一個(gè)分區(qū),就需要生成一個(gè)新的分區(qū),這個(gè)分區(qū)的大小不能比源分區(qū)小,只能和源分區(qū)大小一致或比它大。命令如下:
[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1 #如果需要恢復(fù),則只需把輸入項(xiàng)和輸出項(xiàng)反過(guò)來(lái)即可,命令如下 [root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1
【例 3】整盤(pán)備份
[root@localhost ~]# dd if=/dev/sda of=/dev/sdb #把磁盤(pán)a備份到磁盤(pán)b [root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak #把磁盤(pán)a備份成文件disk.bak #備份恢復(fù) #如果要備份到另一塊硬盤(pán)上,那么,當(dāng)源硬盤(pán)數(shù)據(jù)損壞時(shí),只需用備份硬盤(pán)替換源硬盤(pán)即可 #如果要備份成文件,那么在恢復(fù)時(shí)需要把備份數(shù)據(jù)復(fù)制到其他Linux中,然后把新硬盤(pán)安裝到這臺(tái)Linux #服務(wù)器上,再把磁盤(pán)備份數(shù)據(jù)復(fù)制到新硬盤(pán)中。命令如下 [root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb
【例 4】復(fù)制軟盤(pán)
[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak #在Linux中軟盤(pán)的設(shè)備文件名是/dev/fd0 #這條命令先把軟盤(pán)中的數(shù)據(jù)保存為臨時(shí)數(shù)據(jù)文件 [root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0 #然后更換新的軟盤(pán),把數(shù)據(jù)備份復(fù)制到新軟盤(pán)中,就實(shí)現(xiàn)了軟盤(pán)的復(fù)制
如果需要備份的是光盤(pán),那么在 Linux 中就是使用 dd 命令制作光盤(pán)的 ISO 鏡像的。命令如下:
#制作光盤(pán)ISO鏡像 [root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盤(pán)中所有的數(shù)據(jù)制作成ISO鏡像 [root@localhost ~J # mkdir /mnt/cd #建立一個(gè)新的掛載點(diǎn) [root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #掛栽ISO文件到掛載點(diǎn) [root@localhost ~]# cd /mnt/cd #進(jìn)入掛栽點(diǎn) [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 #數(shù)據(jù)是光盤(pán)當(dāng)中的數(shù)據(jù),這個(gè)ISO鏡像是可以被當(dāng)作真正的光盤(pán)使用的
我們有時(shí)需要制作指定大小的文件,比如,在增加 swap 分區(qū)時(shí),就需要建立指定大小的文件,這時(shí)也使用 dd 命令。命令如下:
[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10 #數(shù)據(jù)輸入項(xiàng)是/dev/zero會(huì)向目標(biāo)文件中不停地寫(xiě)入二進(jìn)制的0 #指定數(shù)據(jù)塊大小是1MB #指定生成10個(gè)數(shù)據(jù)塊。也就是定義輸出的文件大小為10MB 記錄了10+0 的讀入 #顯示數(shù)據(jù)占滿(mǎn)了10個(gè)數(shù)據(jù)塊 記錄了10+0 的寫(xiě)出 #不過(guò)這里數(shù)據(jù)塊的大小已經(jīng)是1MB了 10485760字節(jié)(10 MB)已復(fù)制,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 命令在進(jìn)行整盤(pán)復(fù)制時(shí),類(lèi)似于 GHOST 工具的功能,不過(guò)通過(guò) dd 命令復(fù)制出來(lái)的硬盤(pán)數(shù)據(jù)要比 GHOST 復(fù)制出來(lái)的硬盤(pán)數(shù)據(jù)穩(wěn)定得多。雖然 dd 命令功能強(qiáng)大,不過(guò)也有一個(gè)明顯的缺點(diǎn),就是復(fù)制的時(shí)間較長(zhǎng),復(fù)制 100GB 的數(shù)據(jù)需要 15~25 分鐘(根據(jù)服務(wù)器的性能不同而不同)。
實(shí)現(xiàn)數(shù)據(jù)備份還有非常多的方法和工具,比如 tar 和 cpio 命令。至于網(wǎng)絡(luò)復(fù)制工具,如 rsync 和 scp 等,需要較完善的網(wǎng)絡(luò)知識(shí)才能夠?qū)W習(xí),這里不再介紹。
到此這篇關(guān)于Linux dd命令詳解:數(shù)據(jù)備份,并在備份過(guò)程中進(jìn)行格式轉(zhuǎn)換案例的文章就介紹到這了,更多相關(guān)Linux dd命令內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持!
相關(guān)文章:
1. Linux中Nginx的防盜鏈和優(yōu)化的實(shí)現(xiàn)代碼2. Linux系統(tǒng)如何查看和結(jié)束進(jìn)程?3. Fedora Linux清理回收站內(nèi)容步驟分享4. 如何安裝thefuck?Linux軟件包thefuck的安裝使用教程5. 微軟官方首次提及Windows 8 Embedded嵌入式系統(tǒng)6. Xmanager怎么顯示遠(yuǎn)程linux程序的圖像7. 后XP時(shí)代誰(shuí)主沉浮 Linux還是WIN 7?8. Xshell怎么遠(yuǎn)程桌面連接Linux系統(tǒng)?9. Kali Linux文本選中即復(fù)制設(shè)置流程介紹10. Linux下讀取默認(rèn)MAC地址的方法
