磁盘上没有分区表的 LVM。如何使用 fdisk 重新分配可用空间?

磁盘上没有分区表的 LVM。如何使用 fdisk 重新分配可用空间?

我使用以下命令将 LVM 缩小了一半:

e2fsck -f /dev/VG/LV
resize2fs /dev/VG/LV 5G
lvreduce -L 5G /dev/VG/LV

检查物理体积可得出以下结论:

  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               VG
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               1279
  Allocated PE          1280

如何通过 fdisk 将空闲的 PE(从哪个磁柱开始)分配为标准分区?

答案1

如果您已将 PV 创建为分区,则必须先使用 缩小 PV ,然后使用或 之pvresize --setphysicalvolumesize 5124M /dev/sdb类的工具调整分区表中分区的大小。fdiskparted

但就您而言,您无法在那里创建新分区,因为 PV 涵盖了整个驱动器,因此您无法安全地创建新的分区表而不破坏 PV。其实,您可以通过直接操作分区表来实现,但这很危险,而且会反过来对您造成进一步的伤害。

相反,最安全的方法是在另一个驱动器上创建另一个 PV,将其添加到卷组,将 LV 移动到另一个 PV,从 VG 中删除第一个 PV,从 /dev/sdb 中删除第一个 PV,在 /dev/sdb 上创建分区,在其中一个分区上创建 PV,将 PV 添加到 VG,将 LV 移动到现在正确的 PV,最后从 VG 中删除临时 PV。

像这样:(请注意,您必须确保使用适用于您的特定配置的设备名称,而不仅仅是复制和粘贴。/dev/sdc这只是一个例子,它可能对你来说有所不同):

# plug in external USB drive

dmesg | tail                     # Check which device name the plugged in drive got.
lsblk                            # another way to verify, assuming `lsblk` is installed
cat /proc/partitions             # one more way to verify, sizes are in KiB

fdisk /dev/sdc                   # Make at least one partition on the drive, minimum of 5124 MiB.

pvcreate /dev/sdc1               # create the Physical Volume (PV)
vgextend VG /dev/sdc1            # add the PV to the Volume Group (VG)

pvmove -i 5 /dev/sdb /dev/sdc1   # Try to move every Logical Volume (LV) on PV /dev/sdb over to PV /dev/sdc1.
                                 # There's no need to unmount anything, the process is completely transparent
                                 # to the LV and anything using it. You may want to make a tea or two ;)
                                 # Watch out for errors regarding insufficient space on the target PV, tho.

vgreduce VG /dev/sdb             # Remove the old PV from the VG.
pvremove /dev/sdb                # Wipe the PV metadata from the drive. Don't continue in case of errors here!

fdisk /dev/sdb                   # Properly partition the drive. Partition for PV should be 5124 MiB minimum.

pvcreate /dev/sdb1               # Create a PV on the just created partition.
vgextend VG /dev/sdb1            # Add PV to the VG.

pvmove -i 5 /dev/sdc1 /dev/sdb1  # Move LVs back from the temporary PV to the freshly partitioned one.

vgreduce VG /dev/sdc1            # Remove temporary PV from the VG.
pvremove /dev/sdc1               # Wipe PV metadata from the drive.

尝试此操作前请先进行备份。

如果像这里所示那样使用,给定的pv*vg*命令是安全的。如果先决条件不满足,它们将拒绝工作,或者会询问您是否要执行此操作(n在这种情况下回答)。特别是,当您将 LV 缩小到恰好 5 GiB 时,您需要一个略大于 5120 MiB 的分区(我建议添加 4 MiB,因此是 5124 MiB),以便 PV 能够容纳元数据,如果不是这种情况,它会抱怨。

然而,fdisk这并不安全,它会很乐意继续执行您的命令,即使它会覆盖您宝贵的数据,所以要格外小心。

相关内容