背景

背景

背景

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

还要检查输出,以便您知道哪张卡具有哪个文件名(作为 root):

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默认情况下很少安装,但它在大多数发行版上作为软件包提供)。

相关内容