更新於 2021/01/16閱讀時間約 5 分鐘

在 Mac 電腦上備份樹莓派 (Raspberry Pi) Micro SD 卡

開發的過程中免不了許多地修修改改,定期地將資料備份是良好的習慣,當發生不可預期又不可逆的錯誤時,若是沒有備份就欲哭無淚了。
此外,每當要起一個新的樹莓派開發專案,若是每一次都要從頭下載安裝 OS 、安裝開發環境所需套件、進行個人化設定等等,總是要花上不少時間。所以,如果將已經完整設置好開發環境的 SD 卡備份成映像檔保存起來,以後每當開新專案時,就只要將映像檔燒錄到 SD 卡就好,節省許多的手續及時間。
雖然網路上不乏相關教學資源,但我還是花了一點時間才摸索整理出適合自己設備的備份流程,避免日後忘記,趕緊記錄下來。

環境

  • MacBook Pro 2016 ( Mac OS Big Sur v11.1 )

備份流程

1. SD 卡插入讀卡機,接上 Mac
2. 開啓 Terminal 指令工具
3. 找 SD 卡的路徑
$ diskutil list
列出所有的硬碟資訊 從檔案大小資訊等蛛絲馬跡中,應該不難找到 SD 卡的路徑 ( /dev/diskN )
以此圖為例:disk2 是 SD 卡 ID ,disk2s1是 boot 分區 ID
4. 卸載 micro SD 卡 boot 分區
$ sudo diskutil unmount /dev/diskNsN
diskNsN 請自行改為 boot 分區 ID 輸入使用者密碼,成功卸載後會顯示 Volume boot on diskNs1 unmounted
5. 執行備份指令,保存 SD 卡資料到映像檔
$ sudo dd if=/dev/diskN of=/PATH/TO/SAVED/BACKUP.dmg conv=sync bs=4k
if  表示 input file,要備份的檔案。diskN 請自行改為 SD 卡 ID of  表示 output file,欲儲存的檔案路徑及名稱。 輸入指令後就會開始備份,游標會停住不動,等待一段時間後就會備份完畢
6. 退出 SD 卡
$ diskutil unmountDisk /dev/diskN

燒錄流程 ( 備份還原 )

燒錄流程基本上與備份完全相同。 差異在於步驟 5 的指令 if 與 of 要交換過來,diskN 改為 rdiskN( raw 模式存取 ) ** 這部分要十分小心,執行 ( Enter ) 前務必再次檢查。若是備份變燒錄,或是燒錄變備份,就GG了...
$ sudo dd if=/PATH/TO/EXTRACTED/BACKUP.dmg of=/dev/rdiskN conv=sync bs=4k

壓縮資料

通常備份的資料都很大,所以可以配合 gzip 壓縮,直接輸出成壓縮過的壓縮檔。 流程都一樣,除了步驟 5 改為:

備份
$ sudo dd if=/dev/diskN conv=sync bs=4k | \ gzip /PATH/TO/SAVED/BACKUP.img.gz

燒錄
$ gzip -dc /PATH/TO/EXTRACTED/BACKUP.img.gz | \ sudo dd of=/dev/rdiskN conv=sync bs=4k

顯示進度

執行備份或燒錄的時候只看得到游標在閃爍,透過安裝 pv ( pipe viewer ) 可以更愉悅地顯示目前的進度與速度,甚至預估尚需多少時間

安裝 pv
brew install pv

使用
使用 pv 的方法就是把它夾在 input 與 output 中間執行,例如:
$ sudo dd if=/dev/diskN | pv | sudo dd of=/PATH/TO/BACKUP.dmg
添加參數 -s [ 記憶卡容量 ] ,就會以進度條的方式呈現,並預估還要多久,例如:
$ sudo dd if=/dev/diskN | pv -s 8G | sudo dd of=/PATH/TO/BACKUP.dmg
執行時,就會像這樣:

目前最終做法

最後,這是我目前統整與試誤後,第 5 步驟最終使用的指令:

備份
sudo dd if=/dev/diskN conv=sync bs=4k |pv -s 8G| gzip BACKUP.img.gz

燒錄(還原)
gzip -dc BACKUP.img.gz |pv -s 8G| sudo dd of=/dev/rdiskN conv=sync bs=4k


參考資料

  1. https://blog.vvtitan.com/2020/01/mac-osx上備份或安裝系統在樹莓派raspberry-pi-sd卡/
  2. https://justinheart.medium.com/在-mac-電腦上燒錄作業系統映像檔到-micro-sd-卡-5cc76dbfb2c2
  3. https://blog.gtwang.org/linux/dd-command-examples/
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.