如何将 GPT 驱动器的映像移动到较小的设备?

如何将 GPT 驱动器的映像移动到较小的设备?

我有一张 64GB SD 卡,上面安装了 Linux (Debian)。我想将其移至较小的 SD 卡 (16 GB)。

我使用 resize2fs 和 cfdisk 来调整文件系统和分区的大小,现在它们看起来像这样:

Disk /dev/rdisk4: 122519552 sectors, 58.4 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): C133B5DA-A507-4080-8DBC-9FAD0E960A17
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 122519518
Partitions will be aligned on 2048-sector boundaries
Total free space is 93159357 sectors (44.4 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624         7342079   3.0 GiB     8200  
   3         7342080        15730687   4.0 GiB     8300  
   4        15730688        29362175   6.5 GiB     8300  

现在,我想用 dd 拍摄它的图像。

根据这个:https://en.wikipedia.org/wiki/GUID_Partition_Table GPT 备份标头是最后 33 个扇区。我的最后一个分区使用的最后一个扇区是 29362175。据我所知,扇区从 0 开始,所以总共有 29362176 个扇区,加上 GPT 备份标头的 33 个扇区。

最后,我希望这样的命令能够工作:

sudo dd if=/dev/rdisk4 of=disk4_backup.img bs=512 count=29362209

当我运行它时,生成的 disk4_backup.img 是我期望的大小(15033451008 字节),但是当我在其上运行 gdisk 时:

gdisk disk4_backup.img

它告诉我 GPT 备份标头已损坏。我很确定我可以让 gdisk 使用主 GPT 标头来修复它,但为什么我不能首先备份备份标头?我的数学错了吗?我对 GPT 备份标头所在位置的假设是否错误?

注意:gdisk 不会抱怨我原来的 64 GB SD 卡调整了分区大小。它对上面的 GPT 标头很满意。

答案1

首先,我相信 GPT 备份标头位于磁盘的末尾,因此在尝试制作较小的副本时将无法生存。

其次,您最好在新磁盘上创建匹配的分区,然后复制分区,甚至创建匹配的分区和文件系统,然后复制文件。

答案2

gdisk另外根据维基百科文章,标头包括备份标头的位置,并且具有 crc,因此在不使用及其的情况下很难用新的备份地址更新它。r 恢复和转变菜单命令d 使用主 GPT 标头并重建备份

相关内容