¿Cómo reducir el tamaño del grupo de volumen en 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

Entonces tengo un VG con 65 GB de espacio libre. Pero cuando quiero reducir este grupo de volúmenes aproximadamente ~ 50 GByte:

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

Entonces el mensaje de error es:

cannot resize to 63231 extents as later ones are allocated.

P: ¿Cómo puedo desfragmentar vg_root para poder eliminar la parte innecesaria?

ps: Ya descubrí que solo necesito cambiar el tamaño del PV para cambiar el tamaño del VG, o ¿hay algún comando mejor para cambiar el tamaño del VG (por ejemplo: ¿qué puedo hacer si quisiera varios VG en un PV? ... )?

Gasko Peter
fuente

Respuestas:

31

Puede usar pvmovepara mover esas extensiones al comienzo del dispositivo u otro dispositivo:

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

Luego pvmoveelige dónde mover las extensiones, o puede especificar dónde moverlas.

Vea pvs -v --segments /dev/devicepara ver qué extensiones están asignadas actualmente.

Stéphane Chazelas
fuente
1
Para mí el problema fue que trasladó a los PE a otros lugares. Tenía que especificar el destino, por ejemplo:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov
29

Estos son los pasos necesarios para cambiar el tamaño de una partición LVM o LVM2:

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

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

El último comando pvresize, puede producir el error

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

Debe reorganizar el espacio no asignado al final del LVM. Eso significa después de la partición root y swap_1. Puede ver la disposición actual del espacio con este comando

pvs -v --segments /dev/sda5

pvs mostrará resultados como este

/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

Ahora use pvmovepara eliminar la fragmentación externa:

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

Ahora veamos si mover el volumen de intercambio tuvo éxito.

pvs -v --segments /dev/sda5

debería mostrar el nuevo orden de volúmenes:

/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

Después de eso, use GParted y cambie el tamaño del LVM al área máxima utilizada. El resto estará en espacio no asignado.

Ujjal Roy
fuente
Esta es una respuesta bastante completa; sin embargo, sería útil si incluyera un paso 0 para cambiar el tamaño del sistema de archivos, por ejemplo, resize2fs. No creo que deba detallarse, pero sería útil tener algo allí como un empujón para los futuros espectadores
Justin
Al principio tenía espacio libre, llamar a pvmove sin un destino no lo movió al principio. Lo que funcionó fue pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendcon "newend" calculado como final - aaaa. Sin embargo, no estoy seguro de si esto funciona si el espacio libre al principio es más pequeño que el rango a mover. También creo que hay un error tipográfico en tus salidas de pvs, creo que quisiste decir en /dev/sda5:0-xxxlugar de /dev/sda:0-xxx.
pcworld
2
@Justin El --resizefsparámetro de lvresizeya se encarga de cambiar el tamaño del sistema de archivos subyacente.
pcworld
@pcworld acaba de leer la página de manual y parece que tienes razón
Justin
Excelente respuesta, pero ¿puedes dar más detalles sobre el último paso? Supongo que "cambiar el tamaño del LVM" significa "¿cambiar el tamaño del volumen físico?" ¿Hay alguna manera de hacer esto sin GParted, en la línea de comandos, para sistemas que no tienen una GUI?
Kevin Keane
1

Esta publicación anterior cubre este tipo de reducción para que pueda usar el nuevo espacio para otra cosa. Sin embargo, deberá cambiar su tamaño a los datos antes. Esto también debería cubrir ese y otros errores que usted obtiene. Como es más viejo, lea primero:

DigitalTidBits
fuente
0

uso este método, no estoy seguro de si es el mejor pero funciona para mí

úselo con precaución y no con SysAdmin

calcular la diferencia que causa el problema

324% 4 = 0 no hay problema

pero

324% 32 = 10.125

ese es el problema, así que no encaja

creo que se llama "obtener un número real"

lvmdiskscan

para enumerar particiones involucradas

luego

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

Tengo que agregar 4M adicionales para trabajar, creo que está relacionado con el antiguo tamaño de PE

finalmente

vgchange -s 32M **
Mohamed Abo Badawy
fuente
0

Las respuestas anteriores me ayudaron a resolver este problema, pero necesitaba automatizarlo y escribí 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

Esto invoca pvmove para usted tantas veces como sea necesario para desfragmentar el PV y luego lo redimensiona a su tamaño mínimo posible (que es un poco más que el tamaño utilizado debido a los metadatos).

pdw
fuente