如何复制bios_grub分区?

如何复制bios_grub分区?

我有一个 60GB 的 AWS 卷,我想将其缩小到 30GB。计划是手动重新创建相同的分区表(唯一的区别是主分区大小),然后用于partclone克隆文件系统。

乍一看,源盘看起来非常简单:

lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL /dev/xvdf
NAME    SIZE TYPE FSTYPE LABEL
xvdf     60G disk        
└─xvdf1  60G part xfs    /

然而,parted显示了这个“bios_grub”分区,尽管它位于第一位,但编号为 128:

Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdf: 125829120s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End         Size        File system  Name                 Flags
128     2048s  4095s       2048s                    BIOS Boot Partition  bios_grub
 1      4096s  125829086s  125824991s  xfs          Linux

  1. 为什么lsblk不显示“bios_grub”分区?
  2. 为何坐在第一的却是 128?
  3. 如何在新磁盘上重新创建/克隆它?

答案1

1.) 可能是因为它只保存了 GRUB 版本的核心映像i386-pc,而不是可识别的文件系统,因此lsblk将其视为“空设备”。尝试lsblk -a查看所有块设备,包括空块设备。

2.) 因为无论创建什么,它都决定使用 GPT 分区表中的最后一个槽,而不是按顺序填充槽。这是一个有点不寻常的选择,但它应该没有任何影响......除非您使用更迂腐的分区编辑器,它可能会重新排列分区条目以匹配它们在磁盘上的顺序;那么如果您使用设备名称,您可能需要调整/etc/fstab以匹配(而不是遵循当前使用文件系统 UUID 的最佳实践)。

3.) 在 GPT 分区磁盘上创建一个 1MiB 大小的空分区,将其类型设置为bios_grub,然后在该磁盘上运行grub-install(或grub2-install取决于发行版)。

每当您在 GPT 分区磁盘上安装i386-pcGRUB 版本(即与旧版 BIOS 样式启动一起使用的版本)时,bios_grub都需要一个分区来包含 GRUB 核心映像,该映像在 MBR 分区磁盘上将嵌入到可用空间中。 MBR 和第一个分区开头之间的空间。grub-install会自动检测GPT分区

答案2

  1. 这可能是由于多种原因造成的——主要可以追溯到lsblk工作原理。查看/dev/disk 的内容。另外,运行partprobe -s并查找“gpt 分区...”,如果分区设置正确,其中应包含 128。如果没有,则 VM 映像可能存在问题。

  2. 该数字是任意的,通常反映创建顺序或某些脚本中使用的约定,而不是顺序。因此,这可能是分区表在 mbr 后更改为 gpt 的产物。

  3. BIOS_grub 分区最好由您的操作系统管理。例如,Ubuntu 的 subiquity 自动安装程序和 curtin 将允许您进行设置。这是有道理的,因为分区内容可能需要不同,而克隆会产生相同的内容。除此之外,XFS 无法缩小。因此,我的建议是进行专为双 BIOS_grub 分区设计的全新安装,然后复制相关分区或应用程序。

相关内容