将 MBR 和引导分区复制到较小的磁盘

ifs*_*ife 5 dd fdisk mbr raspberry-pi

我的树莓派使用的是 32GB SD 卡。我已成功将操作系统 ( Archlinux ARM)转移到 USB 硬盘上。这意味着我只需要 SD 卡上的引导分区。

仅使用大约 100MB 的 32GB 卡是非常浪费空间的,我确实有一个较小的 SD 卡,容量为 4GB。

如何MBR将32GB卡的第一个分区复制到4GB卡?

我尝试使用以下命令保存MBR较大卡的第一个分区dd

dd if=/dev/sdb of=mbr_image bs=446 count=1
dd if=/dev/sdb1 of=boot_image
Run Code Online (Sandbox Code Playgroud)

然后我在较小的卡上创建了一个新的分区表,它看起来与原始 32GB 卡上的表完全一样:

Device    Boot Start       End Blocks  Id System
/dev/sdc1 *     2048    194559  96256  c  W95 FAT32 (LBA)
Run Code Online (Sandbox Code Playgroud)

最后,我将之前存储的图像复制到我的小卡片上:

dd if=mbr_image of=/dev/sdc bs=446 count=1
dd if=boot_image of=/dev/sdc1
Run Code Online (Sandbox Code Playgroud)

一切看起来都很好,fdisk但它不起作用。当我尝试从较小的卡启动时,我的树莓派没有任何反应。

错误在哪里?

Tim*_*tin 0

根据此说明备份您要使用的 MBR bs=512,然后bs=446将其复制到较小的卡。

dd if=/dev/mmcblk0 of=mbr_image bs=512 count=1
dd if=mbr_image of=/dev/mmcblk0 bs=446 count=1
Run Code Online (Sandbox Code Playgroud)

我没有使用 Raspberry Pi 的实践经验,所以我不知道设备标签是否重要。引用的站点建议用于/dev/mmcblk0MBR 和/dev/mmcblk01设备分区。

编辑:

我之前忽略了这一点。您尝试的步骤和我提到的链接似乎都缺少文件系统格式。使用 fdisk创建后/dev/sdc1,您需要格式化文件系统才能使用。

mkfs.vfat -F 32 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

之后,执行dd if=boot_image of=/dev/sdc1它应该可以工作。