[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
光伏:
[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,我该怎么办?... )?
答案1
以下是调整 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 的大小调整为最大使用区域。其余的将位于未分配的空间中。
答案2
您可以使用pvmove
将这些范围移动到设备或其他设备的开头:
sudo pvmove --alloc anywhere /dev/device:60000-76182
然后pvmove
选择将范围移动到的位置,或者您可以指定将它们移动到的位置。
查看pvs -v --segments /dev/device
当前分配的范围。
答案3
以前的答案帮助我解决了这个问题,但我需要自动化它,所以写道光伏收缩
# ./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 进行碎片整理,然后将其大小调整到可能的最小大小(由于元数据,该大小略大于已使用的大小)。
答案4
我使用这种方法,不确定它是否是最好的,但对我有用
谨慎使用并不是系统管理员
计算导致问题的差异
324%4 = 0 没问题
但
324%32 = 10.125
这就是问题所在,所以它不适合
我认为这叫做“获取实数”
lvmdiskscan
列出涉及的分区
然后
pvresize /dev/*** --setphysicalvolumesize ***M
我必须添加额外的4M才能工作,我认为这与旧的PE大小有关
最后
vgchange -s 32M **