Come ridurre le dimensioni del gruppo di volumi in 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

Quindi ho un VG con 65 GByte di spazio libero. Ma quando voglio ridurre questo gruppo di volumi di circa 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

Quindi il messaggio di errore è:

cannot resize to 63231 extents as later ones are allocated.

D: Come posso deframmentare vg_root in modo da poterne rimuovere la parte non necessaria?

ps: ho già scoperto che ho solo bisogno di ridimensionare il PV per ridimensionare il VG, o ci sono comandi migliori per fare il ridimensionamento del VG (es .: cosa posso fare se volessi diversi VG su un PV? ... )?

Risposte:


31

Puoi usare pvmoveper spostare quelle estensioni all'inizio del dispositivo o su un altro dispositivo:

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

Quindi pvmovesceglie dove spostare le estensioni oppure è possibile specificare dove spostarle.

Vedere pvs -v --segments /dev/deviceper vedere quali estensioni sono attualmente allocate.


1
Per me il problema era che spostava i PE in altri posti. Ho dovuto specificare la destinazione, ad esempio:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
Akostadinov

29

Questi sono i passaggi necessari per ridimensionare una partizione LVM o LVM2:

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

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

L'ultimo comando pvresize, potrebbe restituire l'errore

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

Devi riorganizzare lo spazio non allocato alla fine di LVM. Ciò significa che dopo la partizione root e swap_1. Puoi vedere l'attuale disposizione dello spazio con questo comando

pvs -v --segments /dev/sda5

pvs mostrerà l'output in questo modo

/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

Ora usa pvmoveper rimuovere la frammentazione esterna:

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

Ora vediamo se lo spostamento del volume di scambio è riuscito.

pvs -v --segments /dev/sda5

dovrebbe mostrare il nuovo ordine di volumi:

/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

Successivamente, usa GParted e ridimensiona LVM nell'area massima utilizzata. Il resto sarà nello spazio non allocato.


Questa è una risposta piuttosto completa - sarebbe utile se includesse un passo 0 per fare il ridimensionamento del filesystem, ad esempio resize2fs. Non penso che debba essere nei dettagli, ma avere qualcosa lì come una spinta per i futuri spettatori sarebbe utile
Justin

All'inizio avevo spazio libero, chiamando pvmove senza destinazione non lo spostavo all'inizio. Ciò che ha funzionato è stato pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendcon "newend" calcolato come end - yyyy. Tuttavia non sono sicuro che funzioni se lo spazio libero all'inizio è inferiore all'intervallo da spostare. Inoltre penso che ci sia un refuso nei tuoi output pvs, penso che volevi dire /dev/sda5:0-xxxinvece di /dev/sda:0-xxx.
pcworld,

2
@Justin Il --resizefsparametro di lvresizegià si occupa del ridimensionamento del filesystem sottostante.
pcworld,

@pcworld ha appena letto la pagina man e sembra che tu abbia ragione
Justin il

Ottima risposta - ma puoi approfondire l'ultimo passo? Presumo "ridimensionare LVM" significa "ridimensionare il volume fisico?" C'è un modo per farlo senza GParted, sulla riga di comando, per i sistemi che non dispongono di una GUI?
Kevin Keane,

1

Questo post più vecchio copre questo tipo di restringimento in modo da poter utilizzare il nuovo spazio per qualcos'altro. Dovrai ridimensionarlo ai dati comunque prima. Questo dovrebbe coprire anche quello e altri errori che si ottengono. Come è più vecchio, leggi prima:


0

uso questo metodo, non sono sicuro che sia il migliore, ma funziona per me

usalo con cautela e non con SysAdmin

calcola la differenza che causa il problema

324% 4 = 0 nessun problema

ma

324% 32 = 10.125

questo è il problema, quindi non si adatta

penso che si chiama "ottieni il numero reale"

lvmdiskscan

per elencare le partizioni coinvolte

poi

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

devo aggiungere altri 4 M per funzionare, penso che sia legato alla vecchia dimensione PE

finalmente

vgchange -s 32M **

0

Le risposte precedenti mi hanno aiutato a risolvere questo problema, ma avevo bisogno di automatizzarlo e così ho scritto 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

Questo invoca pvmove per te tutte le volte che è necessario per deframmentare il PV, quindi ridimensionarlo alla dimensione minima possibile (che è leggermente più grande della dimensione utilizzata a causa dei metadati).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.