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

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

是場災難....手續繁雜還不說,參數還一堆.

一點都不人性化.

---

備份原因:SD卡插在樹莓派都沒啥用到, 512GB 太浪費, 換成小一點的128GB.

步驟1: 找 SD 卡的路徑

$ diskutil list

可看到在/dev/disk19 



很重要!備份前先卸載SD卡:

sudo diskutil unmount /dev/disk19    


----

然後是很複雜的參數:

What is the 'bs' option in dd?


answer: ‘bs=BYTES’, read and write up to BYTES bytes at a time.
     Set both input and output block sizes to BYTES.  This makes ‘dd’
     read and write BYTES per block, overriding any ‘ibs’ and ‘obs’
     settings.  In addition, if no data-transforming ‘conv’ option is
     specified, input is copied to the output as soon as it’s read, even
     if it is smaller than the block size.


如果沒加bs選項 ,dd指令會跑很久.

1MB到32MB:大部分bs=1m到`bs=32m是合理的選擇。

---

看進度要安裝 pv

brew install pv

使用

使用 pv 的方法就是把它夾在 input 與 output 中間執行,例如:
$ sudo dd if=/dev/disk19  | pv | sudo dd of=./BACKUP.dmg
添加參數 -s [ 記憶卡容量 ] ,就會以進度條的方式呈現,並預估還要多久,例如:
$ sudo dd if=/dev/disk19 | pv -s 512G | sudo dd of=./BACKUP.dmg
使用dd這個備份工具的話, 預設是沒有明顯的備份過程顯示, 所以常常不知道現在的進度到那裡了, 所以筆者建議可以在dd指令中多加一個參數, 將dd的狀態(status)用pv這隻小程式顯示出來。

os: 真是爛死了~mac 要備份sd這麼麻煩....

----

加上 GZ.

Or, with gzip, to save a substantial amount of space:

sudo dd if=/dev/rdisk1 bs=1m | gzip > /path/to/backup.gz

And, to copy the image back onto the SD:

gzip -dc /path/to/backup.gz | sudo dd of=/dev/rdisk1 bs=1m

----
我的sd是mount 在 disk6. 
故 備份指令為:

重點:

sudo dd if=/dev/disk6 bs=4M | pv | gzip > ./PiSDBak.img.gz



然後你會看到:

1.25GiB 0:01:37 [12.4MiB/s] [                   <=>                                                                                        ]

慢慢等.

---

縮減備份sd 映像檔的大小

實際上, 備份出來的映像檔雖然經過gzip壓縮後, 看起來會比較小, 但是在燒錄到新的SD Card時, 還是會解壓縮成原始的大小, 也就是原本的SD Card大小如果是16GB(即便是Raspberry Pi的系統實際上只用了6GB左右), 所以在這一小節, 我們要來探討一下怎麼縮減掉映像檔中不必要的部份。


---

還原:

經過壓縮的備份影像檔如果要回復的話,就先用 gzip 解壓縮,再給 dd 寫入 MicroSD 卡即可:

sudo gzip -dc /home/gtwang/image.gz | dd bs=1M of=/dev/sdb


---

os: 以上問chatGPT一下就找到答案了....(不用查資料查得半死.)...

需要在 Mac 上備份複製並安裝一張 Raspberry Pi 作業系統的 512GB SD 卡到一張 128GB SD 卡,步驟如下:

前提:

  • 你要確保512GB SD卡上的可用空間不超過128GB,否則目標SD卡無法容納資料。
  • 備份資料前請確保所有重要資料已儲存,因為此操作可能會刪除目標 SD 卡。

步驟1:使用Disk Utility確保SD卡掛載正確

  1. 將512GB SD卡插入Mac。
  2. 開啟磁碟工具(磁碟工具),檢查SD是否卡片正確掛載。
  3. 確保您能看到 SD 卡及其分區名稱/dev/disk2

步驟2:建立SD卡的圖片文件

  1. 打開終端機

  2. 使用以下指令將512GB SD卡建立為鏡像檔(假設SD卡的裝置名為/dev/disk2,請依實際情況取代):

    sudo dd if=/dev/disk2 of=~/Desktop/raspberry_backup.img bs=1m

    這將創建一個名為raspberry_backup.img的圖像文件,並保存在桌面上。

步驟3:壓縮圖片檔案(可選,但建議)

由於 512GB 的圖片檔案會佔用大量空間,您可以透過以下命令將其壓縮:


gzip ~/Desktop/raspberry_backup.img

步驟4:插入128GB SD並卡格式化

  1. 將128GB SD卡插入Mac。
  2. Disk Utility,選擇SD卡,然後點選Erase開啟(抹掉)。
  3. 選擇MS-DOS (FAT)ExFAT格式化檔案系統(依需求),並點選Erase

步驟5:恢復備份到128GB SD卡

  1. 現在使用dd指令將壓縮後的照片恢復到 128GB SD 卡上:


    gunzip -c ~/Desktop/raspberry_backup.img.gz | sudo dd of=/dev/disk3 bs=1m

    (假設128GB SD卡的裝置名為/dev/disk3,請依實際裝置名稱替換)。

  2. 完成後,可以彈出SD卡將其用於Raspberry Pi。

注意事項:

  • 克隆時請確保目標SD卡足夠大以承載備份。
  • dd操作可能會花費一些時間,耐心等待。
  • 如果圖片檔案壓縮後仍超過目標SD卡的容量,可能需要清理來源SD卡上不必要的檔案或縮小分割區。

這就是 Mac 上備份並複製 Raspberry Pi 系統的 SD 卡的詳細步驟。

---

看一下 df -h

markchiu@MacPro ~ % df -h

Filesystem        Size    Used   Avail Capacity iused ifree %iused  Mounted on

/dev/disk3s1s1   460Gi   9.9Gi    87Gi    11%    407k  915M    0%   /

devfs            239Ki   239Ki     0Bi   100%     826     0  100%   /dev

/dev/disk3s6     460Gi    24Ki    87Gi     1%       0  915M    0%   /System/Volumes/VM

/dev/disk3s2     460Gi   6.1Gi    87Gi     7%    1.2k  915M    0%   /System/Volumes/Preboot

/dev/disk3s4     460Gi   2.8Mi    87Gi     1%      56  915M    0%   /System/Volumes/Update

/dev/disk1s2     500Mi   6.0Mi   480Mi     2%       1  4.9M    0%   /System/Volumes/xarts

/dev/disk1s1     500Mi   5.4Mi   480Mi     2%      32  4.9M    0%   /System/Volumes/iSCPreboot

/dev/disk1s3     500Mi   4.3Mi   480Mi     1%      72  4.9M    0%   /System/Volumes/Hardware

/dev/disk3s5     460Gi   356Gi    87Gi    81%    2.9M  915M    0%   /System/Volumes/Data

map auto_home      0Bi     0Bi     0Bi   100%       0     0     -   /System/Volumes/Data/home

/dev/disk5s1      16Gi    15Gi   471Mi    98%    498k  4.8M    9%   /Library/Developer/CoreSimulator/Volumes/iOS_21A342

/dev/disk8s1      16Gi    16Gi   469Mi    98%    524k  4.8M   10%   /Library/Developer/CoreSimulator/Volumes/iOS_21F79

/dev/disk10s1    8.0Gi   7.8Gi   239Mi    98%      13  2.4M    0%   /Library/Developer/CoreSimulator/Cryptex/Images/bundle/SimRuntimeBundle-045528DA-3556-486F-92A5-9CC81ED0D87A

/dev/disk12s1     18Gi    17Gi   461Mi    98%    444k  4.7M    9%   /Library/Developer/CoreSimulator/Volumes/iOS_22A3351

/dev/disk14s1    8.3Gi   7.5Gi   785Mi    91%    498k  8.0M    6%   /Library/Developer/CoreSimulator/Volumes/iOS_21A328

/dev/disk16s1     16Gi    16Gi   467Mi    98%    507k  4.8M   10%   /Library/Developer/CoreSimulator/Volumes/iOS_21C62

/dev/disk18s1     16Gi    16Gi   460Mi    98%    521k  4.7M   10%   /Library/Developer/CoreSimulator/Volumes/iOS_21E213

/dev/disk19s2    1.8Ti   4.5Gi   1.8Ti     1%       1     0  100%   /Volumes/SSD-2T_PNY

/dev/disk6s1     255Mi    52Mi   203Mi    21%       0     0     -   /Volumes/bootfs



/dev/disk6s1 就是我的sd路徑. 但是 disk6s2 沒顯示出來...

這備份真是不人性化,等有夠久...

512711720960 bytes transferred in 11394.065723 secs (44998136 bytes/sec)

 477GiB 3:09:54 [42.9MiB/s] [        <=>                    ]



等很久....最後, 512gb sd卡 被壓縮成5.7GB.. gz

另外, raspberry PI 的檔案系統是ext4, Mac 暫時不支援讀取或讀取 Linux 檔案系統(如 **ext4**),這就是為什麼你無法在 **Finder** 中看到 **`disk6s2`** 分割區內容的原因。


----
還原:

gunzip -c ./PiSDBak.img.gz | pv | sudo dd of=/dev/rdisk6 bs=32m





m@MacPro% gunzip -c /Users/markchiu/pi_sd/PiSDBak.img.gz | pv | sudo dd of=/dev/rdisk6 bs=32m


64.0KiB 0:00:01 [62.1KiB/s] [  <=> 64.0KiB 0:00:04 [0.00  B/s] [  <=>                                                                                                         ]

dd: /dev/rdisk6: short write on character device<=>                                                                                        ]

dd: /dev/rdisk6: Input/output error

0+1908736 records in

3727+1 records out

125069950976 bytes transferred in 3844.507405 secs (32532113 bytes/sec)

 116GiB 1:04:09 [31.0MiB/s] [              <=>              ]

markchiu@MacPro pi_sd % 



修復:

sudo diskutil repairVolume /dev/disk6s1

Started file system repair on disk6s1 (bootfs)

Checking file system and repairing if necessary and if possible

Volume was successfully unmounted

Performing fsck_msdos -y /dev/rdisk6s1

** /dev/rdisk6s1

** Phase 1 - Preparing FAT

** Phase 2 - Checking Directories

** Phase 3 - Checking for Orphan Clusters

Warning: 448 files, 207950 KiB free (103975 clusters)

File system check exit code is 0

Restoring the original state found as mounted

Finished file system repair on disk6s1 (bootfs)


搞了老半天,真是麻煩.
其實pi 上面就有一個軟體可以copy sd..
可用來備份pi 的sd 以防系統崩潰.




留言

這個網誌中的熱門文章

更改google drive預設存放目錄位置Change Google Drive Default Folder Location in Windows

最爛的銀行服務-玉山銀行

ios app 上架時app icon要注意事項

SMR疊瓦式hdd致命缺陷被解決????!!!

app廣告營利: 該選擇admob 或是 Facebook Audience Network?

google play 正式發布前測試報告...非常好用.

寫APP真的是好工作嗎? Firebase host與我對Kotlin的感想

舊有app在Android 12 閃退問題& app Splash screens

關於google play console app應用程式簽署

Mark App Design Apps - Terms and Privacy Policy (服務條款,隱私權政策)