背景

背景

背景

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

找出SD卡的位置:

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 卡時的核心日誌訊息或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
    
  2. 無需 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而不是catpv預設很少安裝,但它在大多數發行版上作為軟體包提供)。

相關內容