我在一个分区上有一个物理卷,它延伸到整个磁盘,比如 /dev/sda1 使用 100% 的 /dev/sda。现在我需要缩小它来创建/dev/sda2。一个逻辑卷实际上使用了大约 50% 的 PV,因此理论上有足够的可用空间,但它们都是使用单个 PV 分配的。有没有一种安全的方法来缩小物理卷(和底层磁盘分区),为第二个分区创造一些额外的空间?不幸的是,我的配置排除了临时将物理卷 pvmove 到另一台设备的可能性。
当然,我知道我可以在文件级别上执行此操作(例如备份内容、重新分区磁盘驱动器和重新创建 LVM 配置),但我更愿意在不需要从头开始配置 LV 的情况下完成这项工作。
谢谢你。
如果您只需要另一个单独的文件系统,则不必创建新分区:您可以使用 PV 中未分配的空间在现有卷组中创建另一个 LVM 逻辑卷。但是如果你特别需要一个新的分区,那么你必须按照你最初的计划去做。
GParted是一个 GUI 工具,可以为您完成整个 PV + 分区大小调整操作。您很可能会在您的发行版的软件包集合中找到它。
但是,如果您由于某种原因不能或不想使用它,请继续阅读...
减少其中包含未分配空间的 LVM 物理卷非常简单。例如,要将 /dev/sda1 的大小减小到 40 GiB:
该命令是安全的,因为如果它要切除的 PV 部分包含已分配的范围,它将拒绝执行任何操作。
但这只是第一步。第二步是减小分区本身的大小。
为了安全起见,建议您最初收缩 PV 的程度比实际收缩分区的计划要多一点,这样在收缩分区后,您可以显式地扩展 PV 以覆盖分区的全部大小。如果扩展操作失败,您将立即知道调整分区大小时出现问题,并且不会留下隐藏的错误来让您或其他人陷入困境。
您可以使用普通的 Linux
fdisk
命令缩小分区,但您必须记住以下几点:fdisk
调整分区大小时,请确保将其设置为首先显示所有分区大小和扇区中的起始位置。在 Linux 的历史中fdisk
,它的行为在这里有所不同:现代版本默认执行此操作,旧版本可能需要一个-u
or-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
再次使用来创建所需的第二个分区。是的,您也可以在调整分区大小时一起执行此操作,但一次只执行一件事更安全,并确保您可以在需要时轻松回滚更改。