背景
已為 Raspberry pi 設定 SD 卡。目標是精確複製 SD 卡(作業系統、應用程式、資料),以便副本在 rPi 中的功能與原始 \ 主 SD 卡完全相同。
更新:假設:
- 複製將在配置類似 UNIX 作業系統的筆記型電腦上執行
- 不得從 rPi 執行複製
- 目標 SD 卡的品牌/型號相同
- 來源SD卡使用不同的檔案系統進行分區:
問題
具有 SD 卡插槽和 USB SD 卡讀卡機/寫入器的 Ubuntu HP 筆記型電腦可以使用哪些 UNIX 複製選項。
USB SD卡RW是讀卡機還是寫卡機有什麼差別嗎?
一個目標(限制)是避免購買額外的硬體。
解決方案觀察
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Mon Jun 3 17:53:18 EDT 2019 [sudo] 使用者密碼:Mon Jun 3 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
2019 年6 月4 日星期二00:33:50 EDT [sudo] 使用者密碼:119GiB 6:06:12 [5.56MiB/s] [================== == ============>] 100%
2019 年 6 月 4 日星期二 06:43:05 EDT
對快閃記憶體 SD 卡的 gParted 分析顯示相同的分區:
MacOS\OSX
diskutil list
寫入時請務必卸載SD卡:
sudo diskutil unmount /dev/disk#
其中 # 是 1,2,3...
答案1
如果您只是想將一張 SD 卡從一張卡複製到另一張卡,那麼您可以使用DD在命令列上。
您不應該在樹莓派自己的作業系統上執行此操作。這是因為作業系統可能會在複製時寫入 SD 卡並損壞副本。
若要複製 SD 卡,請將兩者插入兩個讀卡機(無論它們是否為 USB)。然後檢查 的內容/dev
。這些卡片應顯示為/dev/sd*
。例如/dev/sdb
。 請小心,因為您的內部硬碟可能已經打開 /dev/sda
。
確保沒有安裝任何 SD 卡,在命令提示字元中鍵入以下內容,仔細閱讀輸出:
mount | grep /dev/sd
也要檢查輸出,以便您知道哪張卡片具有哪個檔案名稱(作為根):
sudo blkid
若要實際複製(例如從 /dev/sdb 到 /dev/sdc),請鍵入(以 root 身分):
dd if=/dev/sdb of=/dev/sdc bs=4096 status=progress
答案2
Unix 系統透過以下方式提供儲存設備裝置檔案。設備文件在許多方面都與普通文件一樣。特別是,要製作儲存裝置的精確副本,只需將來源裝置的內容複製到目標裝置即可。
首先需要確定來源設備文件和目標設備文件。該名稱取決於您的 Unix 變體及其配置方式,但實際上裝置檔案始終位於該/dev
目錄下。如果你安裝了SD卡,你可以找到設備檔案是什麼
df /media/sdcard1/some/file/on/the/sdcard
設備文件位於第一列。其他工具可以提供相同的訊息,例如插入 SD 卡時的核心日誌訊息或lsblk
Linux 上的命令。
卡上可能有分區。如果是這樣,請複製整個卡,即使只有一個分割區,因為某些引導時間資訊可能位於該分割區之外。例如,如果在 Linux 上df
顯示,請複製而不僅僅是./dev/sdb1
/dev/sdb
/dev/sdb1
如果您拔出 SD 卡並重新插入,它通常會具有與之前相同的裝置檔案名,但這並不能保證。
複製之前,請確保:
- 來源設備未安裝或僅以唯讀方式安裝。
- 目標設備根本沒有安裝。
- 目標設備至少與來源設備一樣大。在 Linux 上,
lsblk
顯示裝置大小。 - 您有正確的目標設備。請注意,下面的命令將覆蓋其內容而不要求確認!
假設您已確定來源設備為/dev/sdb
,目標設備為/dev/sdc
。若要複製內容,請以 root 身分執行下列命令:
cat /dev/sdb >/dev/sdc
如果您使用 sudo,則需要以 root 身分進行重定向>
,因此您需要編寫類似的內容
sudo sh -c 'cat /dev/sdb >/dev/sdc'
或者,為了確保您不會意外覆蓋錯誤的設備,您可以執行以下兩個步驟:
- 授予使用者(
gatorback
在我的範例中)從來源設備(dev/sdb
在我的範例中)讀取和寫入來源設備(/dev/sdc
在我的範例中)的權限。sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- 無需 sudo 即可執行複製。
cat /dev/sdb >/dev/sdc
您可以將磁碟映像複製到文件,然後將映像檔複製到目標裝置。如果您需要製作多份副本,或者您只有一個 SD 卡讀卡器,或者為了降低複製方向錯誤的風險,此功能非常有用。
sudo cat /dev/sdb >sdcard.image
- 拔出來源卡並插入目標卡。
- (可選)透過以下方式驗證內容安裝映像,例如
sudo mount -o loop -r sdcard.image /mnt
。 sudo sh -c 'cat sdcard.image >/dev/sdb'
如果您想方便地查看進度信息,請使用pv
而不是cat
(pv
預設很少安裝,但它在大多數發行版上作為軟體包提供)。