首页
学习
活动
专区
圈层
工具
发布

复制SD卡
EN

Unix & Linux用户
提问于 2019-05-31 11:36:30
回答 2查看 4.6K关注 0票数 3

背景

一个SD卡已经配置为一个覆盆子π。其目标是准确地复制SD卡(OS、应用程序、数据),以便副本在rPi中的功能与原来的\主SD卡完全一样。

更新:假设:

  • 复制将由配置有UNIX操作系统的膝上型计算机执行
  • 不应从rPi执行复制。
  • 目标SD卡是相同的make /型号
  • 源SD卡被划分为不同的文件系统:

问题

对于带有SD卡槽和USB读卡器/写入器的Ubuntu HP膝上型计算机,有哪些UNIX克隆选项可用。

如果USB卡RW是读取器还是写入器,会有什么区别吗?

一个目标(限制)是避免购买额外的硬件。

溶液观测

代码语言:javascript
复制
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date

周一6月3日17:53:18 EDT 2019用户密码: Mon 3 23:42:17 EDT 2019

代码语言:javascript
复制
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date

用户密码:119 100 6:06:12 100% Tue Jun 4 06:43:05

对闪存SD卡的gParted分析显示出相同的分区:

MacOS \ OSX

查找SD卡的位置

代码语言:javascript
复制
diskutil list

在写入SD卡时,一定要卸载它:

代码语言:javascript
复制
sudo diskutil unmount /dev/disk#

其中#是1,2,3.

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-06-02 22:26:35

Unix系统通过设备文件提供存储设备。设备文件在许多方面都像普通文件一样。特别是,要准确复制存储设备,只需将源设备的内容复制到目标设备中即可。

首先,您需要确定源设备文件和目标设备文件。名称取决于Unix变体及其配置方式,但实际上设备文件总是在/dev目录下。如果安装了SD卡,则可以找到设备文件的内容。

代码语言:javascript
复制
df /media/sdcard1/some/file/on/the/sdcard

设备文件位于第一列中。其他工具可以提供相同的信息,例如在Linux上插入SD卡或lsblk命令时的内核日志消息。

卡片上可能有分区。如果是这样的话,复制整个卡,即使有一个分区,因为一些启动时间信息可能位于分区之外。例如,如果df在Linux上显示/dev/sdb1,那么复制/dev/sdb而不仅仅是/dev/sdb1

如果您拔出SD卡并重新插入它,它通常会有相同的设备文件名,但这是不能保证的。

在复制之前,请确保:

  • 源设备未安装或仅安装只读。
  • 目标设备根本没有安装。
  • 目标设备至少和源一样大。在Linux上,lsblk显示设备大小。
  • 你有正确的目标设备。请注意,下面的命令将覆盖其内容,而不要求确认!

假设您已经确定源设备是/dev/sdb,目标设备是/dev/sdc。若要复制内容,请以root用户身份运行以下命令:

代码语言:javascript
复制
cat /dev/sdb >/dev/sdc

如果您使用sudo,则重定向>需要以root形式出现,因此您需要编写如下

代码语言:javascript
复制
sudo sh -c 'cat /dev/sdb >/dev/sdc'

或者,为了确保您不会意外地覆盖错误的设备,您可以分两个步骤进行:

  1. 允许用户(在我的示例中为gatorback)读取源设备(在我的示例中为dev/sdb)并写入源设备(在我的示例中为/dev/sdc)。sudo setfacl -m用户:gatorback:r /dev/sdb sudo setfacl -m用户: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而不是cat (pv在默认情况下很少安装,但在大多数发行版中都可以作为包使用)。

票数 1
EN

Unix & Linux用户

发布于 2019-05-31 11:50:31

如果您只是想将SD卡精确地从一个复制到另一个,那么您可以在命令行上使用dd进行复制。

你不应该这样做从你的覆盆子π从它自己的操作系统。这是因为操作系统可能会在复制和损坏副本时写入SD卡。

若要复制sd卡,请将两者都插入到两个阅读器中(不管它们是否为USB)。然后检查/dev的内容。卡片应该以/dev/sd*的形式出现。例如/dev/sdbBe要小心,因为您的内部硬盘驱动器可能已经在 /dev/sda上了。

请确保没有安装SD卡,请在命令提示符下输入此命令读取输出:

代码语言:javascript
复制
mount | grep /dev/sd

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

代码语言:javascript
复制
sudo blkid

实际复制(如从/dev/sdb到/dev/sdc)类型(作为根):

代码语言:javascript
复制
dd if=/dev/sdb of=/dev/sdc bs=4096 status=progress
票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/522138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档