如何减少 LVM 中的卷组大小?

gas*_*ter 41 partition lvm scientific-linux

[root@localhost ~] vgdisplay
  --- Volume group ---
  VG Name               vg_root
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               297,59 GiB
  PE Size               4,00 MiB
  Total PE              76182
  Alloc PE / Size       59392 / 232,00 GiB
  Free  PE / Size       16790 / 65,59 GiB
  VG UUID               XXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

光伏:

[root@localhost ~] pvdisplay

  --- Physical volume ---
  PV Name               /dev/mapper/udisks-luks-uuid-ASDFASDF
  VG Name               vg_root
  PV Size               297,59 GiB / not usable 2,00 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              76182
  Free PE               16790
  Allocated PE          59392
  PV UUID               YYYYYYYYYYY
Run Code Online (Sandbox Code Playgroud)

所以我有一个有 65 GB 可用空间的 VG。但是当我想缩小这个卷组大约 50 GB 时:

pvresize -tv --setphysicalvolumesize 247G /dev/mapper/udisks-luks-uuid-ASDFASDF
  Test mode: Metadata will NOT be updated and volumes will not be (de)activated.
    Using physical volume(s) on command line
    Test mode: Skipping archiving of volume group.
    /dev/mapper/udisks-luks-uuid-ASDFASDF: Pretending size is 517996544 not 624087040 sectors.
    Resizing volume "/dev/mapper/udisks-luks-uuid-ASDFASDF" to 624087040 sectors.
    Resizing physical volume /dev/mapper/udisks-luks-uuid-ASDFASDF from 0 to 63231 extents.
  /dev/mapper/udisks-luks-uuid-ASDFASDF: cannot resize to 63231 extents as later ones are allocated.
  0 physical volume(s) resized / 1 physical volume(s) not resized
    Test mode: Wiping internal cache
    Wiping internal VG cache
Run Code Online (Sandbox Code Playgroud)

所以错误信息是:

cannot resize to 63231 extents as later ones are allocated.
Run Code Online (Sandbox Code Playgroud)

问:如何对 vg_root 进行碎片整理,以便删除不需要的部分?

ps:我已经发现我只需要调整 PV 的大小来调整 VG 的大小,或者有没有更好的命令来调整 VG 的大小(例如:如果我在一个 PV 上有几个 VG,我该怎么办?... )?

小智 45

以下是调整 LVM 或 LVM2 分区大小所需的步骤:

sudo lvresize --verbose --resizefs -L -150G /dev/ubuntu/root

sudo pvresize --setphysicalvolumesize {any size here} /dev/sda5
Run Code Online (Sandbox Code Playgroud)

最后一个命令 ,pvresize可能会产生错误

/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.
Run Code Online (Sandbox Code Playgroud)

您必须重新排列 LVM 末尾的未分配空间。这意味着在 root 和 swap_1 分区之后。您可以使用此命令查看当前的空间排列

pvs -v --segments /dev/sda5
Run Code Online (Sandbox Code Playgroud)

pvs 将显示这样的输出

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii 0 free
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy jjj swap 0 linear /dev/sda5:yyyy-end
Run Code Online (Sandbox Code Playgroud)

现在用于pvmove去除外部碎片:

sudo pvmove --alloc anywhere /dev/sda5:yyyy-end
Run Code Online (Sandbox Code Playgroud)

现在让我们看看移动交换卷是否成功。

pvs -v --segments /dev/sda5
Run Code Online (Sandbox Code Playgroud)

应该显示新的卷顺序:

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii swap 0 linear /dev/sda5:xxx+1-yyyy
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy+1 end 0 free
Run Code Online (Sandbox Code Playgroud)

之后,使用 GParted 并将 LVM 调整为最大使用区域。其余的将在未分配的空间中。

  • @Justin `lvresize` 的 `--resizefs` 参数已经负责调整底层文件系统的大小。 (3认同)

Sté*_*las 39

您可以使用pvmove将这些范围移动到设备或其他设备的开头:

sudo pvmove --alloc anywhere /dev/device:60000-76182
Run Code Online (Sandbox Code Playgroud)

然后pvmove选择将范围移动到的位置,或者您可以指定将它们移动到的位置。

查看pvs -v --segments /dev/device以查看当前分配了哪些范围。

  • 对我来说,问题是它将 PE 移到了其他地方。必须指定目的地,例如: `sudo pvmove --alloc Anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182` (2认同)