在 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致命缺陷被解決????!!!

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

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

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

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

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

Google Play badge徽章產生器