如何備份一個磁盤分區
通常你可能會把數據放在一個分區上,有時候可能需要對該設備或者上麵的一個分區進行備份。樹莓派用戶為了可引導 SD 卡當然有這個需求。其它小體積計算機的用戶也會發現這非常有用。有時候設備看起來要出現故障時最好快速做個備份。
進行本文中的實驗你需要一個叫 dcfldd
的工具。
dcfldd 工具
該工具是 coreutils 軟件包中 dd
工具的增強版。dcfldd
是 Nicholas Harbour 在美國國防部計算機取證實驗室(DCFL)工作期間研發的。該工具的名字也基於他工作的地方 - dcfldd
。
對於仍然在使用 CoreUtils 8.23 或更低版本的係統,並沒有一個可以輕鬆查看正在創建副本的進度的選項。有時候看起來就像什麼都沒有發生,以至於你就想取消掉備份。
注意:如果你使用 8.24 或更新版本的 dd
工具,你就不需要使用 dcfldd
,隻需要用 dd
替換 dcfldd
即可。所有其它參數仍然適用。
在 Debian 係統上你隻需要在 Package Manager 中搜索 dcfldd
。你也可以打開一個終端然後輸入下麵的命令:
sudo apt-get install dcfldd
對於 Red Hat 係統,可以用下麵的命令:
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 位版本。對於 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
每組命令中的最後一個語句會列出 dcfldd
的版本並顯示該命令文件已經被加載。
注意:確保你以 root 用戶執行 dd
或者 dcfldd
命令。
安裝完該工具後你就可以繼續使用它備份和恢複分區。
備份分區
備份設備的時候可以備份整個設備也可以隻是其中的一個分區。如果設備有多個分區,我們可以分別備份每個分區。
在進行備份之前,先讓我們來看一下設備和分區的區別。假設我們有一個已經被格式化為一個大磁盤的 SD 卡。這個 SD 卡隻有一個分區。如果空間被切分使得 SD 卡看起來是兩個設備,那麼它就有兩個分區。
假設我們有一個樹莓派中的 SD 卡。SD 卡容量為 8 GB,有兩個分區。第一個分區存放 BerryBoot 啟動引導器。第二個分區存放 Kali(LCTT 譯注:Kali Linux 是一個 Debian 派生的 Linux 發行版)。現在已經沒有可用的空間用來安裝第二個操作係統。我們使用大小為 16 GB 的第二個 SD 卡,但拷貝到第二個 SD 卡之前,第一個 SD 卡必須先備份。
要備份第一個 SD 卡我們需要備份設備 /dev/sdc
。進行備份的命令如下所示:
dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img
備份包括輸入文件(if
)以及被設置為 /tmp
目錄下名為 SD-Card-Backup.img
的輸出文件(of
)。
dd
和 dcfldd
默認都是每次讀寫文件中的一個塊。通過上述命令,它可以一次默認讀寫 512 個字節。記住,該複製是一個精準的拷貝 - 逐位逐字節。
默認的 512 個字節可以通過塊大小參數 - bs=
更改。例如,要每次讀寫 1 兆字節,參數為 bs=1M
。使用以下所用的縮寫可以設置不同大小:
- b – 512 字節
- KB – 1000 字節
- K – 1024 字節
- MB – 1000x1000 字節
- M – 1024x1024 字節
- GB – 1000x1000x1000 字節
- G – 1024x1024x1024 字節
你也可以單獨指定讀和寫的塊大小。要指定讀塊的大小使用 ibs=
。要指定寫塊的大小使用 obs=
。
我使用三種不同的塊大小做了一個 120 MB 分區的備份測試。第一次使用默認的 512 字節,它用了 7 秒鍾。第二次塊大小為 1024 K,它用時 2 秒。第三次塊大小是 2048 K,它用時 3 秒。用時會隨係統以及其它硬件實現的不同而變化,但通常來說更大的塊大小會比默認的稍微快一點。
完成備份後,你還需要知道如何把數據恢複到設備中。
恢複分區
現在我們已經有了一個備份點,假設數據可能被損毀了或者由於某些原因需要進行恢複。
命令和備份時相同,隻是源和目標相反。對於上麵的例子,命令會變為:
dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img
這裏,鏡像文件被用作輸入文件(if
)而設備(sdc)被用作輸出文件(of
)。
注意: 要記住輸出設備會被重寫,它上麵的所有數據都會丟失。通常來說在恢複數據之前最好用 GParted 刪除 SD 卡上的所有分區。
假如你在使用多個 SD 卡,例如多個樹莓派主板,你可以一次性寫多塊 SD 卡。為了做到這點,你需要知道係統中卡的 ID。例如,假設我們想把鏡像 BerryBoot.img
拷貝到兩個 SD 卡。SD 卡分別是 /dev/sdc
和/dev/sdd
。下麵的命令在顯示進度時每次讀寫 1 MB 的塊。命令如下:
dcfldd if=BerryBoot.img bs=1M status=progress | tee >(dcfldd of=/dev/sdc) | dcfldd of=/dev/sdd
在這個命令中,第一個 dcfldd
指定輸入文件並把塊大小設置為 1 MB。status
參數被設置為顯示進度。然後輸入通過管道 |
傳輸給命令 tee
。tee
用於將輸入分發到多個地方。第一個輸出是到命令 dcfldd of=/dev/sdc
。命令被放到小括號內被作為一個命令執行。我們還需要最後一個管道 |
,否則命令 tee
會把信息發送到 stdout
(屏幕)。因此,最後的輸出是被發送到命令 dcfldd of=/dev/sdd
。如果你有第三個 SD 卡,甚至更多,隻需要添加另外的重定向和命令,類似 >(dcfldd of=/dev/sde
。
注意:記住最後一個命令必須在管道 |
後麵。
必須驗證寫的數據確保數據是正確的。
驗證數據
一旦創建了一個鏡像或者恢複了一個備份,你可以驗證這些寫入的數據。要驗證數據,你會使用名為 diff
的另一個不同程序。
使用 diff
,你需要指定鏡像文件的位置以及係統中拷貝自或寫入的物理媒介。你可以在創建備份或者恢複了一個鏡像之後使用 diff
命令。
該命令有兩個參數。第一個是物理媒介,第二個是鏡像文件名稱。
對於例子 dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img
,對應的 diff
命令是:
diff /dev/sdc /tmp/SD-Card-Backup.img
如果鏡像和物理設備有任何的不同,你會被告知。如果沒有顯示任何信息,那麼數據就驗證為完全相同。
確保數據完全一致是驗證備份和恢複完整性的關鍵。進行備份時需要注意的一個主要問題是鏡像大小。
分割鏡像
假設你想要備份一個 16GB 的 SD 卡。鏡像文件大小會大概相同。如果你隻能把它備份到 FAT32 分區會怎樣呢?FAT32 最大文件大小限製是 4 GB。
必須做的是文件必須被切分為 4 GB 的分片。通過管道 |
將數據傳輸給 split
命令可以切分正在被寫的鏡像文件。
創建備份的方法相同,但命令會包括管道和切分命令。示例備份命令為 dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img
,其切分文件的新命令如下:
dcfldd if=/dev/sdc | split -b 4000MB - /tmp/SD-Card-Backup.img
注意: 大小後綴和對 dd
及 dcfldd
命令的意義相同。 split
命令中的破折號用於將通過管道從 dcfldd
命令傳輸過來的數據填充到輸入文件。
文件會被保存為 SD-Card-Backup.imgaa
和 SD-Card-Backup.imgab
,如此類推。如果你擔心文件大小太接近 4 GB 的限製,可以試著用 3500MB。
將文件恢複到設備也很簡單。你使用 cat
命令將它們連接起來然後像下麵這樣用 dcfldd
寫輸出:
cat /tmp/SD-Card-Backup.img* | dcfldd of=/dev/sdc
你可以在命令中 dcfldd
部分包含任何需要的參數。
我希望你了解並能執行任何需要的數據備份和恢複,正如 SD 卡和類似設備所需的那樣。
原文發布時間為:2017-05-04
本文來自雲棲社區合作夥伴“Linux中國”
最後更新:2017-05-19 14:04:46
上一篇:
Nature | 幹細胞圖片數據庫共享,深度學習預測細胞外觀
下一篇:
數據脫口秀 | 醫療 + 人工智能的現狀、痛點與前景
C# 動態加載Dll
怎樣用 Tar 和 OpenSSL 給文件和目錄加密及解密
我同桌搶到X了 你搶到了麼?
支撐百度搜索引擎99.995%可靠名字服務架構設計
讀書筆記:Borg, Omega, and Kubernetes Lessons learned from three container-management systems over a decade
市場分析:2016年光伏行業出口有望續增
2019年CFA考試確認新增Fintech科目,大數據、人工智能、區塊鏈通通要考
麥科文大學
RDS最佳實踐(三)—如何製定相關的流程來規範RDS的使用
android 係統日誌Logcat 完全捕獲