如何缩小物理卷?

如何缩小物理卷?

我的分区上有一个物理卷,它延伸到整个磁盘,例如 /dev/sda1 使用 100% 的 /dev/sda。现在我需要缩小它以创建/dev/sda2。逻辑卷实际上使用了大约 50% 的 PV,因此理论上有足够的可用空间,但它都是在单个 PV 中分配的。有没有一种安全的方法来缩小物理卷(和底层磁盘分区),为第二个分区创建一些额外的空间?不幸的是,我的配置排除了将物理卷临时 pvmove 到另一个设备的可能性。

当然,我知道我可以在文件级别上完成此操作(例如备份内容、重新分区磁盘驱动器和重新创建 LVM 配置),但我更愿意在不需要从头开始配置 LV 的情况下完成这项工作。

先谢谢你了。

答案1

如果您只需要另一个单独的文件系统,则不必创建新分区:您可以使用 PV 中未分配的空间在现有卷组中创建另一个 LVM 逻辑卷。但如果你特别需要一个新的分割,那么你必须按照你原来的计划去做。

格帕特是一个 GUI 工具,可以为您完成整个 PV + 分区大小调整操作。您很可能会在您的发行版的软件包集合中找到它。

但如果您由于某种原因不能或不想使用它,请继续阅读...

减少包含未分配空间的 LVM 物理卷非常简单。例如,要将 /dev/sda1 的大小减小到 40 GiB:

# pvresize --setphysicalvolumesize 40G /dev/sda1

该命令是安全的,因为如果它要删除的 PV 部分包含已分配的盘区,它将拒绝执行任何操作。

但这只是第一步。第二步是减小分区本身的大小。

为了安全起见,建议您最初收缩 PV 的幅度比您计划实际收缩分区的幅度要大一些,以便在收缩分区后您可以显式扩展 PV 以覆盖分区的完整大小。如果扩展操作失败,您将立即知道调整分区大小时出现问题,并且不会留下隐藏的错误来困扰您或其他人。

您可以使用简单的 Linux 命令缩小分区fdisk,但必须记住以下几点:

  • 当使用fdisk调整分区大小时,请确保将其设置为显示所有分区大小和起始位置部门第一的。在 Linux 的历史中fdisk,其行为有所不同:现代版本默认执行此操作,旧版本可能需要-u-u=sectors选项才能执行此操作。
  • 调整现有分区大小时,无法移动分区的起点。 (如果移动起点,就不再是简单的调整大小操作,而是更复杂的分区移动操作。)

使用 时fdisk,仅当您使用该命令时,任何更改才会写入磁盘w。所以我建议像这样进行:

  • 用于sfdisk -d /dev/sda > /safe/location/partition_table_backup.dump备份现有分区表。
  • fdisk /dev/sda以交互模式启动
  • 使用该p命令查看当前分区表并验证“开始”和“结束”值是否显示为扇区。记下“起始”值。
  • 使用该d命令删除 的当前分区条目sda1
  • 使用该n命令重新创建sda1所需大小的主分区条目 1,注意准确指定第一个扇区的位置(即与命令的“开始”值中显示的数字相同p)。
  • 使用t命令将分区1的类型设置为“Linux LVM”。
  • 仔细检查你的工作
  • 使用w命令写入更新的分区表并退出fdisk

fdisk请注意最后显示的消息。如果它显示“内核仍然使用旧表”,则说明有东西阻止了在线分区表更新。您可以尝试partprobe /dev/sda告诉内核重新读取分区表(使用比某些旧版本使用更新的接口fdisk,因此它可能会有所帮助,并且肯定不会造成伤害),然后查看cat /proc/partitions该分区现在是否被内核识别达到预期的大小。

如果分区大小调整成功,您现在可以运行pvresize /dev/sda1.如果您遵循我的建议,最初将 PV 的大小调整为比分区所需的新大小小一点,那么它现在应该成功地将 PV 扩展一点,以自动完全覆盖调整大小的分区。如果此命令报告错误,则您可能在指定新大小时犯了错误,应该使用它sfdisk /dev/sda < /safe/location/partition_table_backup.dump来将分区表恢复到最初的状态,然后重试。

(在非常旧的系统上,您实际上可能必须在运行之前停用 VG partprobe,甚至重新启动以允许系统重新读取更新的分区表。)

调整大小操作完成后,您现在可以fdisk再次使用它来创建所需的第二个分区。是的,您也可以在调整分区大小时一起执行此操作,但一次只执行一件事更安全,并确保您可以在需要时轻松回滚更改。

相关内容