dd,,是 device driver 的縮寫,,它可以稱得上是“Linux 世界中的搬運(yùn)工”,,它用來讀取設(shè)備、文件中的內(nèi)容,,并原封不動地復(fù)制到指定位置,。 當(dāng)我們用 dd 命令讀取 /dev/null 文件時,就可以創(chuàng)造出空洞文件,,而如果你的磁盤足夠大,,你甚至可以創(chuàng)造出一個宇宙黑洞呢! 備份磁盤并恢復(fù)好記性不如爛筆頭,,好硬盤不如常備份,。硬盤的損壞雖然是個小概率事件,但是一旦發(fā)生卻會帶來災(zāi)難性的后果,。對重要數(shù)據(jù)進(jìn)行備份,,不僅是一個好習(xí)慣,,更體現(xiàn)了對別人對自己負(fù)責(zé)的態(tài)度。寫到這里,,突然意識到我的硬盤里面存有很多珍貴的資料,,一想到可能會因?yàn)榇疟P故障而永遠(yuǎn)失去它們,心里就不禁一顫,,趕緊把數(shù)據(jù)備份提上日程吧,! 之前看過一些介紹 dd 的文章,例子中基本都是使用 hda,、hdb 這種 IDE 接口的硬盤,,其實(shí)現(xiàn)在的主流硬盤已經(jīng)是 SATA 接口的了,下面我要備份的硬盤是 dev/sda,,它就是塊 SATA 盤,。 [root@roclinux ~]# dd if=/dev/sda of=/root/sda.img 這個命令將 sda 盤備份到指定文件 /root/sda.img 中去,其中用到了如下兩個選項:
通過上面的 dd 命令,,我們得到了 sda.img 文件,,它就是已經(jīng)備份好了的磁盤映像文件,里面存儲著 /dev/sda 整塊硬盤的內(nèi)容,。 在未來的某天,,假如 /dev/sda 硬盤真的出現(xiàn)了故障,我們就可以將曾經(jīng)備份的 sda.img 復(fù)制到另一臺電腦上,,并將其恢復(fù)到指定的 sdb 盤中去,。 [root@roclinux ~]# dd if=/root/sda.img of=/dev/sdb 如果能把目標(biāo)硬盤直接連接到我們現(xiàn)在的電腦上,并讓系統(tǒng)識別到這塊新硬盤,,例如識別成 /dev/sdc,,那么我們可以直接使用 dd 命令將 sda 盤復(fù)制到 sdc 中去。這種用法既可以用來整盤備份,,也可以用來快速復(fù)制系統(tǒng)環(huán)境,。下面來看看具體的命令: [root@roclinux ~]# dd if=/dev/sda of=/dev/sdc 對 dd 來說,所有設(shè)備和文件都一視同仁,,所謂的“備份”和“恢復(fù)”,,dd 都認(rèn)為是一種內(nèi)容的復(fù)制。dd 操作就是簡單的按字節(jié)復(fù)制。簡單,、直觀,,就是我對 dd 的最直接的感受。 備份時進(jìn)行壓縮數(shù)據(jù)沒有壓縮就進(jìn)行整盤備份,,勢必需要很大的備份空間,,從而導(dǎo)致備份成本升高。這對于備份場景來說,,是低效能的表現(xiàn),。假如遇到磁盤空間不足,連備份操作都沒辦法圓滿完成: #看, 報出了磁盤空間不足的警告 [root@roclinux ~]# dd if=/dev/sda of=/root/sda.img dd: writing to '/root/sda.img': No space left on device 其實(shí)我們在使用 dd 做備份時,,可以使用 gzip 或者 bzip2 壓縮算法進(jìn)行數(shù)據(jù)壓縮處理,,這樣可以大大減少我們的磁盤空間用量,,也就降低了備份成本,。 下面就使用 gzip 壓縮算法配合 dd 命令來備份 /dev/sda 盤: #沒有指定of則表示輸出到標(biāo)準(zhǔn)輸出 [root@roclinux ~]# dd if=/dev/sda | gzip > /root/sda.img.gz 然后再將其恢復(fù)到 /dev/sdb 盤中去,方法如下: #沒有指定if就表示從標(biāo)準(zhǔn)輸入讀取 下面我們更換 bzip2 壓縮算法配合 dd 命令再來實(shí)現(xiàn)一遍上面示例的效果: [root@roclinux ~]# dd if=/dev/sda | bzip2 > disk.img.bz2 [root@roclinux ~]# bzip2 -dc /root/sda.img.gz | dd of=/dev/sdc 分區(qū),、內(nèi)存,、軟盤一個都不能少在上面的內(nèi)容中,介紹的都是備份整盤的知識,,那如果只是想備份某一個分區(qū)的數(shù)據(jù),,應(yīng)該如何操作呢?賣了一個關(guān)子,,其實(shí)在 dd 命令看來,,備份整盤和備份分區(qū),在命令形式上并沒有區(qū)別,,我們來看示例: [root@roclinux ~]# dd if=/dev/sda2 of=/root/sda_part1.img 同理,,將內(nèi)存中的數(shù)據(jù)整體備份,照樣可以如法炮制: [root@roclinux ~]# dd if=/dev/mem of=/root/mem.img 隨著科技的飛速發(fā)展,,無論是臺式機(jī)還是筆記本,,都已經(jīng)取消了軟驅(qū)和光驅(qū)設(shè)備,軟盤和光盤也已經(jīng)接近滅絕的邊緣,,很多九零后們應(yīng)該都不知道軟驅(qū)為何物了吧,。 所以接下來要介紹的軟盤、光盤備份法,,權(quán)當(dāng)是追憶過去吧,,謹(jǐn)以此內(nèi)容來懷念我們逝去的青春。 #備份軟盤 [root@roclinux ~]# dd if=/dev/fd0 of=/root/fd0.img count=1 bs=1440k #備份光盤 [root@roclinux ~]# dd if=/dev/cdrom of=/root/cd.img 對于 dd 命令來說,,除了 if,、of 兩個選項之外,還應(yīng)該掌握下面這兩個重要選項:
所以這里備份的軟盤大小是 1440kB,,可以看出這是一塊 3 寸盤,,其大小為 1.44MB。為了追憶青春,,我們再來一起看看軟盤的樣子,。 備份磁盤的 MBRMBR,是 Master Boot Record,,即硬盤的主引導(dǎo)記錄,,MBR 一旦損壞,分區(qū)表也就被破壞,,數(shù)據(jù)大量丟失,,系統(tǒng)就再也無法正常引導(dǎo)了,真是不堪設(shè)想??!所以,對 MBR 的定期備份是十分必要的,,在緊急關(guān)頭,,把它比喻成一顆救死扶傷的速效救心丸,也絕不為過,。一塊磁盤的第一個扇區(qū)的 512 個字節(jié)所存儲的正是這塊磁盤的 MBR 信息,,我們嘗試用 dd 命令備份 MBR: [root@roclinux ~]# dd if=/dev/sda of=/root/sda_mbr.img count=1 bs=512 如果未來遇到分區(qū)表損壞的情況,我們用曾經(jīng)備份的 MBR 信息寫回磁盤,,就能起到立竿見影的效果,。下面來一起看看如何將 MBR 寫回硬盤: [root@roclinux ~]# dd if=/root/sda_mbr.img of=/dev/sda 方法是不是比你想象得要簡單,即使是面對 MBR 如此重要的敏感數(shù)據(jù),,dd 命令也是閑庭信步,,信手拈來。 使用 /dev/zero 和 /dev/null 來測試磁盤本段落開始前,,我們要為大家介紹兩位新朋友:
我們可以觀察下面兩個命令的執(zhí)行時間,來計算出硬盤的讀,、寫性能: #向磁盤上寫一個大文件, 來看寫性能 [root@roclinux ~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file #從磁盤上讀取一個大文件, 來看讀性能 [root@roclinux ~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null 上面命令生成了一個 1GB 的文件 1Gb.file,,下面我們配合 time 命令,可以看出不同的塊大小數(shù)據(jù)的寫入時間,,從而可以測算出到底塊大小為多少時可以實(shí)現(xiàn)最佳的寫入性能,。 [root@roclinux ~]# time dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file [root@roclinux ~]# time dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file [root@roclinux ~]# time dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file [root@roclinux ~]# time dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file 利用 /dev/urandom 進(jìn)行格式化除了 /dev/null 和 /dev/zero 之外,還有一個很重要的文件,,即 /dev/urandom,,它是“隨機(jī)數(shù)設(shè)備”,它的本領(lǐng)就是可以生成理論意義上的隨機(jī)數(shù),。如果我們想清除硬盤里的某些機(jī)密數(shù)據(jù),,就可以使用 /dev/urandom 這個隨機(jī)數(shù)生成器來產(chǎn)生隨機(jī)數(shù)據(jù),寫到磁盤上,,以確保將磁盤原始數(shù)據(jù)完全覆蓋掉,。 [root@roclinux ~]# dd if=/dev/urandom of=/dev/sda 好了,有關(guān) dd 的故事就介紹到這里了,。雖然我們不能創(chuàng)造出真正的宇宙黑洞,但學(xué)習(xí)了這么多的實(shí)用技能,,也算不虛此行啦,! |
|