Storage

複製 SD 卡

  • October 29, 2021

背景

已為 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

要查找 SD 卡的位置

diskutil list

寫入時請務必解除安裝 SD 卡:

sudo diskutil unmount /dev/disk#

其中 # 是 1,2,3…

Unix 系統通過設備文件使儲存設備可用。設備文件在許多方面表現得像普通文件。特別是,要製作儲存設備的精確副本,只需將源設備的內容複製到目標設備即可。

首先需要確定源設備文件和目標設備文件。該名稱取決於您的 Unix 變體及其配置方式,但實際上設備文件始終位於該/dev目錄下。如果你安裝了 SD 卡,你可以找到設備文件是什麼

df /media/sdcard1/some/file/on/the/sdcard

設備文件位於第一列。其他工具可以提供相同的資訊,例如插入 SD 卡時的核心日誌消息,或lsblkLinux 上的命令。

卡上可能有分區。如果是這樣,請複制整個卡,即使只有一個分區,因為某些啟動時間資訊可能位於分區之外。例如,如果在 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'

或者,為確保您不會意外覆蓋錯誤的設備,您可以分兩步進行:

  1. 授予使用者(gatorback在我的範例中)從源設備讀取(dev/sdb在我的範例中)和寫入源設備(/dev/sdc在我的範例中)的權限。
sudo setfacl -m user:gatorback:r /dev/sdb
sudo setfacl -m user:gatorback:w /dev/sdc
  1. 在沒有 sudo 的情況下執行複制。
cat /dev/sdb >/dev/sdc

您可以將磁碟映像複製到文件,然後將映像文件複製到目標設備。如果您需要製作多份副本,或者您只有一個 SD 卡讀卡器,或者降低複製方向錯誤的風險,這很有用。

  1. sudo cat /dev/sdb >sdcard.image
  2. 拔出源卡,插入目標卡。
  3. 或者,通過掛載圖像來驗證內容,例如sudo mount -o loop -r sdcard.image /mnt
  4. 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

引用自:https://unix.stackexchange.com/questions/522138