背景
已为 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] 用户密码:2019 年 6 月 3 日星期一 23:42:17 EDT
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...
如果您只是想将一张 SD 卡从一张卡复制到另一张卡,那么您可以在命令行上使用dd进行操作。
您不应该从您自己的操作系统中的树莓派执行此操作。这是因为操作系统可能会在复制和损坏副本时写入 SD 卡。
要复制 SD 卡,请将两者都插入您的两个读卡器(无论它们是否是 USB 都无关紧要)。然后检查
/dev
. 卡片应显示为/dev/sd*
。例如/dev/sdb
。 请小心,因为您的内部硬盘驱动器可能已经打开/dev/sda
。确保没有安装任何 SD 卡,在命令提示符下键入以下内容,通读输出:
还要检查输出,以便您知道哪个卡具有哪个文件名(作为根):
要实际复制(例如从 /dev/sdb 到 /dev/sdc)类型(以 root 身份):
Unix 系统通过设备文件使存储设备可用。设备文件在许多方面表现得像普通文件。特别是,要制作存储设备的精确副本,只需将源设备的内容复制到目标设备即可。
首先需要确定源设备文件和目标设备文件。该名称取决于您的 Unix 变体及其配置方式,但实际上设备文件始终位于该
/dev
目录下。如果你安装了 SD 卡,你可以找到设备文件是什么设备文件位于第一列。其他工具可以提供相同的信息,例如插入 SD 卡时的内核日志消息,或
lsblk
Linux 上的命令。卡上可能有分区。如果是这样,请复制整个卡,即使只有一个分区,因为某些启动时间信息可能位于分区之外。例如,如果在 Linux 上
df
显示,请复制而不仅仅是./dev/sdb1
/dev/sdb
/dev/sdb1
如果您将 SD 卡拔出并重新插入,它通常会具有与以前相同的设备文件名,但这不能保证。
在复制之前,请确保:
lsblk
显示设备大小。假设您已经确定源设备是
/dev/sdb
并且目标设备是/dev/sdc
。要复制内容,请以 root 身份运行以下命令:如果您使用 sudo,重定向
>
需要以 root 身份发生,因此您需要编写类似或者,为确保您不会意外覆盖错误的设备,您可以分两步进行:
gatorback
在我的示例中)从源设备读取(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
默认情况下很少安装,但它在大多数发行版上都以包的形式提供)。