如何将分区表从一个相同的磁盘复制并写入另一个磁盘?

如何将分区表从一个相同的磁盘复制并写入另一个磁盘?

我有几十台 Raspberry Pi,用于家庭实验室实验。我在一台 Pi 上创建了 Rasbian(Pi 专用的 Debian 版本)安装,我想将其扩展到其余的 Pi。

Pis 使用 MicroSD 卡(我购买的所有卡都是相同的 8GB 容量和相同的型号)。以前,我使用 dd 创建“gold master”MicroSD 卡的映像,但这需要很长时间,因为它会逐字节生成 8GB SD 卡的映像,并且必须将其全部写入(即使卡上的总使用空间可能只有 300 MB 或更少)。

有 3 个分区;一个启动分区(包含内核)、一个根文件系统分区(包含操作系统的大部分内容)和第三个特殊分区。

除了使用 dd,我想知道是否有办法将分区表复制到文件,将分区表写回新的 SD 卡,然后使用我信赖的 rsync 命令将数据本身复制回每个分区。

这可能吗?或者我最好只使用 parted 并尝试编写脚本来复制分区表?

谢谢!

答案1

即使你明确询问“...复制并写入分区表...“我认为你真正想要的是:

  • 将你的金主图像克隆到其他全新的、相同的 SD 卡上:
  • 以避免“添加”整个 8GB 源 SD 卡,因为它只包含 300 MB 的数据。

在这种情况下,“dd” 有替代方案,可以完全满足您的需要:磁盘克隆,但要考虑文件系统的属性/结构/边界。

其中一个替代方案是部分图像[1]:“...它将具有受支持的文件系统的分区按扇区保存到映像文件中 [...]Partimage 将仅从分区已使用的部分复制数据...

请注意部分图像也可以在客户端-服务器网络环境中使用,并且它包含在几个 live-linux-CD 中,例如系统救援光盘[2](以便更容易地克隆系统磁盘的过程)。

你可能想要检查的另一个工具是档案存档器


[1]http://www.partimage.org/Main_Page

[2]http://www.sysresccd.org/SystemRescueCd_Homepage


PS:抱歉没有发布其他相关 URL,但...这是我的第一个答案,我不能包含超过 2 个 URL

答案2

当然可以,您可以使用 来实现dd。MSDOS 又名 MBR 分区表位于前 512 个字节中:

head -c 512 /dev/sdb > mbr.bin
cp mbr.bin /dev/sdc
partprobe

dd if=/dev/sde bs=512 count=1 of=mbr.bin
dd if=mbr.bin of=/dev/sdf
partprobe

然而,这不会复制实际文件系统结构;无论如何您都必须mkfs在空白分区上运行。

您可能更喜欢使用脚本sfdiskparted工具来创建特定大小的分区。

答案3

您可以dd通过使用标志增加块大小来加快速度bs。我通常使用以下内容:dd if=/dev/source of=/dev/destination bs=8M。老实说,dd或者parted是您的最佳选择,dd是质量的优越选择(在我看来)。 

答案4

(如果我有足够的声誉,我会对上面的@ray 的回答发表评论)

如果您满意数据位于 SD 卡的开头,那么只需使用count选项dd

添加到@ray 的示例:

dd if=/dev/source of=/dev/destination bs=8M count=38

38 个 8MB 块共计 304MB。如果您使用的是中间文件,则大小为 304MB,写回时可以省略该count选项。

dd if=/dev/source of=~/intermediate_file bs=8M count=38
dd if=~/intermediate_file of=/dev/destination bs=8M

中间文件的另一个优势是它会更快(假设你将中间文件保存在 HDD 或 SSD 上),因为每次克隆时不会从 SD 卡缓慢读取。

相关内容