幫助中心
技術(shù)運(yùn)維百科
如何備份一個(gè)磁盤分區(qū)
2017-05-12 10:12:10
  通常你可能會(huì)把數(shù)據(jù)放在一個(gè)分區(qū)上,有時(shí)候可能需要對(duì)該設(shè)備或者上面的一個(gè)分區(qū)進(jìn)行備份。樹(shù)莓派用戶為了可引導(dǎo) SD 卡當(dāng)然有這個(gè)需求。其它小體積計(jì)算機(jī)的用戶也會(huì)發(fā)現(xiàn)這非常有用。有時(shí)候設(shè)備看起來(lái)要出現(xiàn)故障時(shí)最好快速做個(gè)備份。
  進(jìn)行本文中的實(shí)驗(yàn)?zāi)阈枰粋€(gè)叫 dcfldd 的工具。   dcfldd 工具   該工具是 coreutils 軟件包中 dd 工具的增強(qiáng)版。dcfldd 是 Nicholas Harbour 在美國(guó)國(guó)防部計(jì)算機(jī)取證實(shí)驗(yàn)室(DCFL)工作期間研發(fā)的。該工具的名字也基于他工作的地方 - dcfldd。   對(duì)于仍然在使用 CoreUtils 8.23 或更低版本的系統(tǒng),并沒(méi)有一個(gè)可以輕松查看正在創(chuàng)建副本的進(jìn)度的選項(xiàng)。有時(shí)候看起來(lái)就像什么都沒(méi)有發(fā)生,以至于你就想取消掉備份。   注意:如果你使用 8.24 或更新版本的 dd 工具,你就不需要使用 dcfldd,只需要用 dd 替換 dcfldd 即可。所有其它參數(shù)仍然適用。   在 Debian 系統(tǒng)上你只需要在 Package Manager 中搜索 dcfldd。你也可以打開(kāi)一個(gè)終端然后輸入下面的命令:   sudo apt-get install dcfldd   對(duì)于 Red Hat 系統(tǒng),可以用下面的命令:   cd /tmp   wget dl.fedoraproject.org/pub/epel/6/i386/dcfldd-1.3.4.1-4.el6.i686.rpm   sudo yum install dcfldd-1.3.4.1-4.el6.i686.rpm   dcfldd --version   注意: 上面的命令安裝的是 32 位版本。對(duì)于 64 位版本,使用下面的命令:   cd /tmp   wget dl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpm   sudo yum install dcfldd-1.3.4.1-4.el6.x86_64.rpm   dcfldd --version   每組命令中的最后一個(gè)語(yǔ)句會(huì)列出 dcfldd 的版本并顯示該命令文件已經(jīng)被加載。   注意:確保你以 root 用戶執(zhí)行 dd 或者 dcfldd 命令。   安裝完該工具后你就可以繼續(xù)使用它備份和恢復(fù)分區(qū)。   備份分區(qū)   備份設(shè)備的時(shí)候可以備份整個(gè)設(shè)備也可以只是其中的一個(gè)分區(qū)。如果設(shè)備有多個(gè)分區(qū),我們可以分別備份每個(gè)分區(qū)。   在進(jìn)行備份之前,先讓我們來(lái)看一下設(shè)備和分區(qū)的區(qū)別。假設(shè)我們有一個(gè)已經(jīng)被格式化為一個(gè)大磁盤的 SD 卡。這個(gè) SD 卡只有一個(gè)分區(qū)。如果空間被切分使得 SD 卡看起來(lái)是兩個(gè)設(shè)備,那么它就有兩個(gè)分區(qū)。   假設(shè)我們有一個(gè)樹(shù)莓派中的 SD 卡。SD 卡容量為 8 GB,有兩個(gè)分區(qū)。第一個(gè)分區(qū)存放 BerryBoot 啟動(dòng)引導(dǎo)器。第二個(gè)分區(qū)存放 Kali(LCTT 譯注:Kali Linux 是一個(gè) Debian 派生的 Linux 發(fā)行版)?,F(xiàn)在已經(jīng)沒(méi)有可用的空間用來(lái)安裝第二個(gè)操作系統(tǒng)。我們使用大小為 16 GB 的第二個(gè) SD 卡,但拷貝到第二個(gè) SD 卡之前,第一個(gè) SD 卡必須先備份。   要備份第一個(gè) SD 卡我們需要備份設(shè)備 /dev/sdc。進(jìn)行備份的命令如下所示:   dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img   備份包括輸入文件(if)以及被設(shè)置為 /tmp 目錄下名為 SD-Card-Backup.img 的輸出文件(of)。   dd 和 dcfldd 默認(rèn)都是每次讀寫文件中的一個(gè)塊。通過(guò)上述命令,它可以一次默認(rèn)讀寫 512 個(gè)字節(jié)。記住,該復(fù)制是一個(gè)精準(zhǔn)的拷貝 - 逐位逐字節(jié)。   默認(rèn)的 512 個(gè)字節(jié)可以通過(guò)塊大小參數(shù) - bs= 更改。例如,要每次讀寫 1 兆字節(jié),參數(shù)為 bs=1M。使用以下所用的縮寫可以設(shè)置不同大?。?   b – 512 字節(jié)   KB – 1000 字節(jié)   K – 1024 字節(jié)   MB – 1000x1000 字節(jié)   M – 1024x1024 字節(jié)   GB – 1000x1000x1000 字節(jié)   G – 1024x1024x1024 字節(jié)   你也可以單獨(dú)指定讀和寫的塊大小。要指定讀塊的大小使用 ibs=。要指定寫塊的大小使用 obs=。   我使用三種不同的塊大小做了一個(gè) 120 MB 分區(qū)的備份測(cè)試。第一次使用默認(rèn)的 512 字節(jié),它用了 7 秒鐘。第二次塊大小為 1024 K,它用時(shí) 2 秒。第三次塊大小是 2048 K,它用時(shí) 3 秒。用時(shí)會(huì)隨系統(tǒng)以及其它硬件實(shí)現(xiàn)的不同而變化,但通常來(lái)說(shuō)更大的塊大小會(huì)比默認(rèn)的稍微快一點(diǎn)。   完成備份后,你還需要知道如何把數(shù)據(jù)恢復(fù)到設(shè)備中。   恢復(fù)分區(qū)   現(xiàn)在我們已經(jīng)有了一個(gè)備份點(diǎn),假設(shè)數(shù)據(jù)可能被損毀了或者由于某些原因需要進(jìn)行恢復(fù)。   命令和備份時(shí)相同,只是源和目標(biāo)相反。對(duì)于上面的例子,命令會(huì)變?yōu)椋?   dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img   這里,鏡像文件被用作輸入文件(if)而設(shè)備(sdc)被用作輸出文件(of)。   注意: 要記住輸出設(shè)備會(huì)被重寫,它上面的所有數(shù)據(jù)都會(huì)丟失。通常來(lái)說(shuō)在恢復(fù)數(shù)據(jù)之前最好用 GParted 刪除 SD 卡上的所有分區(qū)。   假如你在使用多個(gè) SD 卡,例如多個(gè)樹(shù)莓派主板,你可以一次性寫多塊 SD 卡。為了做到這點(diǎn),你需要知道系統(tǒng)中卡的 ID。例如,假設(shè)我們想把鏡像 BerryBoot.img 拷貝到兩個(gè) SD 卡。SD 卡分別是 /dev/sdc 和 /dev/sdd。下面的命令在顯示進(jìn)度時(shí)每次讀寫 1 MB 的塊。命令如下:   dcfldd if=BerryBoot.img bs=1M status=progress | tee >(dcfldd of=/dev/sdc) | dcfldd of=/dev/sdd   在這個(gè)命令中,第一個(gè) dcfldd 指定輸入文件并把塊大小設(shè)置為 1 MB。status 參數(shù)被設(shè)置為顯示進(jìn)度。然后輸入通過(guò)管道 |傳輸給命令 tee。tee 用于將輸入分發(fā)到多個(gè)地方。第一個(gè)輸出是到命令 dcfldd of=/dev/sdc。命令被放到小括號(hào)內(nèi)被作為一個(gè)命令執(zhí)行。我們還需要最后一個(gè)管道 |,否則命令 tee 會(huì)把信息發(fā)送到 stdout (屏幕)。因此,最后的輸出是被發(fā)送到命令 dcfldd of=/dev/sdd。如果你有第三個(gè) SD 卡,甚至更多,只需要添加另外的重定向和命令,類似 >(dcfldd of=/dev/sde。   注意:記住最后一個(gè)命令必須在管道 | 后面。   必須驗(yàn)證寫的數(shù)據(jù)確保數(shù)據(jù)是正確的。   驗(yàn)證數(shù)據(jù)   一旦創(chuàng)建了一個(gè)鏡像或者恢復(fù)了一個(gè)備份,你可以驗(yàn)證這些寫入的數(shù)據(jù)。要驗(yàn)證數(shù)據(jù),你會(huì)使用名為 diff 的另一個(gè)不同程序。   使用 diff ,你需要指定鏡像文件的位置以及系統(tǒng)中拷貝自或?qū)懭氲奈锢砻浇?。你可以在?chuàng)建備份或者恢復(fù)了一個(gè)鏡像之后使用 diff 命令。   該命令有兩個(gè)參數(shù)。第一個(gè)是物理媒介,第二個(gè)是鏡像文件名稱。   對(duì)于例子 dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img,對(duì)應(yīng)的 diff 命令是:   diff /dev/sdc /tmp/SD-Card-Backup.img   如果鏡像和物理設(shè)備有任何的不同,你會(huì)被告知。如果沒(méi)有顯示任何信息,那么數(shù)據(jù)就驗(yàn)證為完全相同。   確保數(shù)據(jù)完全一致是驗(yàn)證備份和恢復(fù)完整性的關(guān)鍵。進(jìn)行備份時(shí)需要注意的一個(gè)主要問(wèn)題是鏡像大小。   分割鏡像   假設(shè)你想要備份一個(gè) 16GB 的 SD 卡。鏡像文件大小會(huì)大概相同。如果你只能把它備份到 FAT32 分區(qū)會(huì)怎樣呢?FAT32 最大文件大小限制是 4 GB。   必須做的是文件必須被切分為 4 GB 的分片。通過(guò)管道 | 將數(shù)據(jù)傳輸給 split 命令可以切分正在被寫的鏡像文件。   創(chuàng)建備份的方法相同,但命令會(huì)包括管道和切分命令。示例備份命令為 dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img ,其切分文件的新命令如下:   dcfldd if=/dev/sdc | split -b 4000MB - /tmp/SD-Card-Backup.img   注意: 大小后綴和對(duì) dd 及 dcfldd 命令的意義相同。 split 命令中的破折號(hào)用于將通過(guò)管道從 dcfldd 命令傳輸過(guò)來(lái)的數(shù)據(jù)填充到輸入文件。   文件會(huì)被保存為 SD-Card-Backup.imgaa 和 SD-Card-Backup.imgab,如此類推。如果你擔(dān)心文件大小太接近 4 GB 的限制,可以試著用 3500MB。   將文件恢復(fù)到設(shè)備也很簡(jiǎn)單。你使用 cat 命令將它們連接起來(lái)然后像下面這樣用 dcfldd 寫輸出:   cat /tmp/SD-Card-Backup.img* | dcfldd of=/dev/sdc   你可以在命令中 dcfldd 部分包含任何需要的參數(shù)。   我希望你了解并能執(zhí)行任何需要的數(shù)據(jù)備份和恢復(fù),正如 SD 卡和類似設(shè)備所需的那樣。
新客優(yōu)惠
特價(jià) 酷睿i3系列
性價(jià)比熱銷推薦,年銷量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請(qǐng)免費(fèi)產(chǎn)品試用服務(wù)
立即申請(qǐng)