我有一个 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
- 为什么
lsblk
不显示“bios_grub”分区? - 为何坐在第一的却是 128?
- 如何在新磁盘上重新创建/克隆它?
答案1
1.) 可能是因为它只保存了 GRUB 版本的核心映像i386-pc
,而不是可识别的文件系统,因此lsblk
将其视为“空设备”。尝试lsblk -a
查看所有块设备,包括空块设备。
2.) 因为无论创建什么,它都决定使用 GPT 分区表中的最后一个槽,而不是按顺序填充槽。这是一个有点不寻常的选择,但它应该没有任何影响......除非您使用更迂腐的分区编辑器,它可能会重新排列分区条目以匹配它们在磁盘上的顺序;那么如果您使用设备名称,您可能需要调整/etc/fstab
以匹配(而不是遵循当前使用文件系统 UUID 的最佳实践)。
3.) 在 GPT 分区磁盘上创建一个 1MiB 大小的空分区,将其类型设置为bios_grub
,然后在该磁盘上运行grub-install
(或grub2-install
取决于发行版)。
每当您在 GPT 分区磁盘上安装i386-pc
GRUB 版本(即与旧版 BIOS 样式启动一起使用的版本)时,bios_grub
都需要一个分区来包含 GRUB 核心映像,该映像在 MBR 分区磁盘上将嵌入到可用空间中。 MBR 和第一个分区开头之间的空间。grub-install
会自动检测GPT分区
答案2
这可能是由于多种原因造成的——主要可以追溯到
lsblk
工作原理。查看/dev/disk 的内容。另外,运行partprobe -s
并查找“gpt 分区...”,如果分区设置正确,其中应包含 128。如果没有,则 VM 映像可能存在问题。该数字是任意的,通常反映创建顺序或某些脚本中使用的约定,而不是顺序。因此,这可能是分区表在 mbr 后更改为 gpt 的产物。
BIOS_grub 分区最好由您的操作系统管理。例如,Ubuntu 的 subiquity 自动安装程序和 curtin 将允许您进行设置。这是有道理的,因为分区内容可能需要不同,而克隆会产生相同的内容。除此之外,XFS 无法缩小。因此,我的建议是进行专为双 BIOS_grub 分区设计的全新安装,然后复制相关分区或应用程序。