如何将LVM PV扩展到磁盘的开头?

ruf*_*nov 5 linux partition lvm

我有一个 2TB 磁盘的服务器,有人最初这样分区:

  • 操作系统文件的 300GB 标准主分区(CentOS 7)。
  • 1.7TB LVM 和一些相当大的逻辑卷 - 用于其他需求。

由于操作系统文件的实际大小原来只有400GB左右,后来它被移到了LVM上自己的逻辑卷,所以磁盘开头的这个300GB分区就没有使用了。

所以,我删除了这个分区,现在想以某种方式将 PV 的开始位置移动到磁盘的开头,这样它将利用整个磁盘空间。但是我找不到任何工具来这样做 -pvextend只能将 PV 扩展到磁盘的末尾,而不是开头。

是的,我知道我可以将旧分区作为另一个 PV 添加到 VG,但是在单个磁盘上拥有多个 PV 看起来很奇怪。

我也知道我可以将分区复制到一些外部设备或云存储,然后从头开始重新创建物理磁盘分区。但我不想要这个,因为服务器停机时间很长。

那么,有没有什么办法可以快速将 PV 扩展到磁盘的开头呢?

lar*_*sks 10

如果您现有的 PV 有 < 300GB 的数据

如果您现有的 PV 上的数据少于 300GB,那么您可以简单地将该数据重新定位到磁盘的前端,然后使用pvresize. 首先,创建一个新的 pv:

pvcreate /dev/sda1
Run Code Online (Sandbox Code Playgroud)

将数据从现有 pv 重定位到新 pv:

pvmove /dev/sda2 /dev/sda1
Run Code Online (Sandbox Code Playgroud)

删除旧的 pv:

vgreduce myvg /dev/sda2
Run Code Online (Sandbox Code Playgroud)

现在,使用partedorfdisk或其他方法调整大小/dev/sda1以覆盖整个磁盘,然后使用pvresize扩展 pv 以覆盖分区。

无需停机即可使用外部设备

您可以使用pvmove将您的数据重新定位到不同的设备,而无需任何服务器停机。您将创建一个新的 pv:

pvcreate /dev/sdb
Run Code Online (Sandbox Code Playgroud)

将其添加到您的 vg:

vgextend myvg /dev/sdb
Run Code Online (Sandbox Code Playgroud)

将数据从现有 pv 迁移到新 pv:

pvmove /dev/sda2 /dev/sdb
Run Code Online (Sandbox Code Playgroud)

从卷中删除现有的 pv:

pvremove /dev/myvg /dev/sda2
Run Code Online (Sandbox Code Playgroud)

现在,重新分区 /dev/sda,创建一个新的 pv,并逆向上述过程。