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


30
[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

PV:

[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

因此,我有一个具有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

因此错误消息是:

cannot resize to 63231 extents as later ones are allocated.

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

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

Answers:


31

您可以用于pvmove将这些扩展区移动到设备或其他设备的开头:

sudo pvmove --alloc anywhere /dev/device:60000-76182

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

请参阅pvs -v --segments /dev/device以查看当前分配的范围。


1
对我来说,问题在于将PE转移到其他地方。必须指定目的地,例如:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov

29

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

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

sudo pvresize --setphysicalvolumesize {any size here} /dev/sda5

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

/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.

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

pvs -v --segments /dev/sda5

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

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

sudo pvmove --alloc anywhere /dev/sda5:yyyy-end

现在让我们看一下移动交换量是否成功。

pvs -v --segments /dev/sda5

应该显示新的卷顺序:

/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

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


这是一个非常全面的答案-如果它包括执行文件系统调整大小的步骤0,例如resize2fs,则将很有帮助。我认为并不需要详细介绍,但在那儿带些东西来吸引未来的观众会有所帮助
贾斯汀(Justin)

开始时我有可用空间,没有目的地的情况下调用pvmove并没有将其移到开始处。有效的是pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newend将“ newend”计算为结束-yyyy。但是,我不确定如果开头的可用空间小于要移动的范围,是否可行。另外,我认为您的pvs输出中有错别字,我想您的意思/dev/sda5:0-xxx不是/dev/sda:0-xxx
pcworld

2
@Justin的--resizefs参数lvresize已经负责调整基础文件系统的大小。
pcworld

@pcworld刚刚阅读了手册页,似乎您是对的
贾斯汀

很好的答案-但是您可以详细说明最后一步吗?我假设“调整LVM的大小”是指“调整物理卷的大小?”。对于没有GUI的系统,有没有办法在命令行上没有GParted?
凯文·基恩

1

这篇较旧的文章介绍了这种缩小的情况,因此您可以将新空间用于其他用途。但是,您需要先将其调整为数据大小。这应该涵盖该错误以及其他错误。随着年龄的增长,请先通读:


0

我使用这种方法,不确定是否最好,但对我有用

谨慎使用而不是 SysAdmin

计算导致问题的差异

324%4 = 0没问题

324%32 = 10.125

那是问题,所以不合适

我认为这叫做“获取实数”

lvmdiskscan

列出涉及的分区

然后

pvresize /dev/*** --setphysicalvolumesize ***M

我必须添加额外的4M才能工作,我认为这与旧的PE尺寸有关

最后

vgchange -s 32M **

0

先前的答案帮助我解决了这个问题,但是我需要将其自动化,所以写了pvshrink

# ./pvshrink /dev/vda2 
Moving 50 blocks from 714 to 664
  /dev/vda2: Moved: 4.00%
  /dev/vda2: Moved: 100.00%
50 of 50 (100.00%) done
Defragmentation complete.
Metadata size: 1048576 b
PE size: 4.0 MiB
Total size 1048576 b + 714 x 4194304 b = 2995781632 b (2.8 GiB)
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
    Archiving volume group "fedora" metadata (seqno 15).
    /dev/vda2: Pretending size is 5851136 not 6287360 sectors.
    Resizing volume "/dev/vda2" to 5851136 sectors.
    Resizing physical volume /dev/vda2 from 0 to 714 extents.
    Updating physical volume "/dev/vda2"
    Creating volume group backup "/etc/lvm/backup/fedora" (seqno 16).
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

这会为您调用pvmove多次,以对PV进行碎片整理,然后将其调整为最小可能的大小(由于元数据而略大于所使用的大小)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.