背景
已为 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
还要检查输出,以便您知道哪张卡具有哪个文件名(作为 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 卡时的内核日志消息或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
默认情况下很少安装,但它在大多数发行版上作为软件包提供)。