複製 SD 卡
背景
已為 Raspberry pi 配置了 SD 卡。目標是準確複製 SD 卡(作業系統、應用程序、數據),以便副本在 rPi 中的功能與原始\主 SD 卡完全相同。
更新:假設:
- 複製將在配置有類似 UNIX 作業系統的筆記型電腦上執行
- 不應從 rPi 執行複制
- 目標 SD 卡的品牌/型號相同
- 源 SD 卡使用不同的文件系統進行分區:
問題
哪些 UNIX 複製選項適用於帶有 SD 卡插槽和 USB SD 卡讀卡器/寫卡器的 Ubuntu HP 筆記型電腦。
USB SD卡RW是讀卡器還是寫卡器有區別嗎?
一個目標(約束)是避免購買額外的硬體。
解決方案觀察
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
2019 年 6 月 3 日星期一 17:53:18 EDT
$$ 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…
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
預設情況下很少安裝,但它在大多數發行版上都以包的形式提供)。
如果您只是想將一張 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