LVM'de Hacim Grubu büyüklüğü nasıl azaltılır?


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

Bu yüzden 65 GB boş boş alana sahip bir VG'm var. Ancak bu Cilt Grubunu yaklaşık ~ 50 GB'lık bir boyuta daraltmak istediğimde:

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

Yani hata mesajı:

cannot resize to 63231 extents as later ones are allocated.

S: Gereksiz kısmını kaldırabilmek için vg_root'u nasıl birleştirebilirim?

ps: VG'yi yeniden boyutlandırmak için yalnızca PV'yi yeniden boyutlandırmam gerektiğini ya da VG'nin yeniden boyutlandırılması için daha iyi komutlar olduğunu zaten öğrendim (örneğin: PV'de birkaç VG's yapsam ne yapabilirim? ... )?

Yanıtlar:


31

Bu pvmoveuzantıları cihazın başına veya başka bir cihaza taşımak için kullanabilirsiniz :

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

Ardından pvmove, uzantıların nereye taşınacağını seçer veya bunları nereye taşıyacağınızı belirleyebilirsiniz.

Bkz pvs -v --segments /dev/devicekapsamlarını şu anda ayrılmış olduğunu görmek için.


1
Benim için sorun, PE'leri başka yerlere taşımasıydı. Hedef belirtmek zorunda kaldım örneğin:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov

29

Bir LVM veya LVM2 bölümünü yeniden boyutlandırmak için gerekli adımlar şunlardır:

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

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

Son komut, pvresizehatayı verebilir.

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

LVM'nin sonundaki ayrılmamış alanı yeniden düzenlemek zorundasınız. Bu root ve swap_1 bölümünden sonra demektir. Geçerli komut dizisini bu komutla görebilirsiniz.

pvs -v --segments /dev/sda5

pvs böyle bir çıktı gösterecek

/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

Şimdi pvmovedış parçalanmayı kaldırmak için kullanın :

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

Şimdi değiş tokuş hacminin taşınmasının başarılı olup olmadığını görelim.

pvs -v --segments /dev/sda5

Yeni cilt sırasını göstermelidir:

/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

Bundan sonra, GParted kullanın ve LVM'yi maksimum kullanılan alana yeniden boyutlandırın. Gerisi ayrılmamış alanda olacaktır.


Bu oldukça kapsamlı bir cevap - eğer yeniden boyutlandırmak için dosya sistemi kullanıyorsanız 0 adım içeriyorsa, örneğin resize2fs. Ayrıntılı olması gerektiğini sanmıyorum, ama sadece gelecek izleyiciler için dürtmek gibi orada bir şey olması yararlı olacaktır
Justin

Başlangıçta boş yerim vardı, bir hedefi olmayan pvmove'yu çağırmak onu başlangıcına taşımamıştı. Ne işe yaradı oldu pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendyyyy - uç olarak hesaplanan "newend" ile. Ancak, başlangıçtaki boş alan taşınacak alandan daha küçükse, bunun işe yarayıp yaramadığından emin değilim. Ayrıca pvs çıktılarınızda bir yazım hatası olduğunu düşünüyorum, /dev/sda5:0-xxxbunun yerine demek istediğinizi düşünüyorum /dev/sda:0-xxx.
pcworld

2
@Justin Alttaki --resizefsparametre lvresizezaten altta yatan dosya sistemini yeniden boyutlandırmayı önemser.
pcworld

@ pcworld sadece man sayfasını oku ve haklı görünüyorsun
Justin

Mükemmel cevap - ama son adımı inceleyebilir misiniz? "LVM'yi yeniden boyutlandır" seçeneğinin "fiziksel hacmi yeniden boyutlandırma" anlamına geldiğini düşünüyorum. GPI'sız, komut satırında, GUI olmayan sistemler için bunu yapmanın bir yolu var mı?
Kevin Keane

1

Bu eski yazı, bu tür bir daralmayı kapsar, böylece yeni alanı başka bir şey için kullanabilirsiniz. Ancak daha önce verilere göre yeniden boyutlandırmanız gerekir. Bu onu ve aldığınız diğer hataları da kapsamalıdır. Yaşlandıkça ilk önce şunu okuyun:


0

Bu yöntemi kullanıyorum, en iyisi olup olmadığından emin değilim ama benim için çalışıyor.

SysAdmin'i değil dikkatli kullanın

soruna neden olan farkı hesaplar

324% 4 = 0 problem yok

fakat

% 324% 32 = 10.125

sorun bu yüzden uymuyor

Bence "gerçek sayı al" denir.

lvmdiskscan

ilgili bölümleri listelemek

sonra

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

çalışmak için ekstra 4M eklemek zorundayım, eski PE boyutuyla ilgili olduğunu düşünüyorum

en sonunda

vgchange -s 32M **

0

Önceki cevaplar bu sorunu çözmeme yardımcı oldu, ancak otomatikleştirmem gerekiyordu ve pvshrink yazdım .

# ./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

Bu, PV'yi birleştirmek için gerektiği kadar pvmove'u çağırır ve daha sonra mümkün olan minimum boyutuna (meta veriler nedeniyle kullanılan boyuttan biraz daha fazladır) yeniden boyutlandırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.