จะลดขนาดกลุ่มวอลุ่มใน 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

ดังนั้นฉันมี VG ที่มีพื้นที่ว่าง 65 GByte แต่เมื่อฉันต้องการลดขนาดกลุ่มนี้ประมาณ ~ 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

ดังนั้นข้อความแสดงข้อผิดพลาดคือ:

cannot resize to 63231 extents as later ones are allocated.

ถาม:ฉันจะจัดเรียงข้อมูล vg_root เพื่อให้สามารถลบส่วนที่ไม่จำเป็นออกได้อย่างไร

ps: ฉันพบแล้วว่าฉันต้องปรับขนาด PV เพื่อปรับขนาด VG หรือมีคำสั่งที่ดีกว่าในการปรับขนาด VG (เช่น: ฉันจะทำอย่างไรถ้าฉันต้องการ VG หลายแห่งบน PV หรือไม่ ... )?

คำตอบ:


31

คุณสามารถใช้pvmoveเพื่อย้ายขอบเขตเหล่านั้นไปยังจุดเริ่มต้นของอุปกรณ์หรืออุปกรณ์อื่น:

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

จากนั้นpvmoveเลือกตำแหน่งที่จะย้ายส่วนขยายไปหรือคุณสามารถระบุตำแหน่งที่จะย้ายส่วนขยายได้

ดูpvs -v --segments /dev/deviceเพื่อดูว่ามีการจัดสรร extents ใดในปัจจุบัน


1
สำหรับฉันปัญหาคือว่ามันย้าย PEs ไปยังสถานที่อื่น ต้องระบุปลายทางเช่น: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" คำนวณเมื่อสิ้นสุด - ปปปป อย่างไรก็ตามฉันไม่แน่ใจว่าจะใช้งานได้หรือไม่หากพื้นที่ว่างที่จุดเริ่มต้นเล็กกว่าช่วงที่จะย้าย นอกจากนี้ผมคิดว่ามีการพิมพ์ผิดในผล pvs ของคุณผมคิดว่าคุณหมายแทน/dev/sda5:0-xxx /dev/sda:0-xxx
pcworld

2
@Justin --resizefsพารามิเตอร์ของlvresizeการดูแลการปรับขนาดระบบแฟ้มพื้นฐานแล้ว
pcworld

@pcworld เพิ่งอ่าน man page และดูเหมือนว่าคุณจะถูก
Justin

คำตอบที่ยอดเยี่ยม - แต่คุณสามารถทำอย่างละเอียดในขั้นตอนสุดท้าย? ฉันถือว่า "ปรับขนาด LVM" หมายถึง "ปรับขนาดฟิสิคัลวอลุ่มหรือไม่" มีวิธีการทำเช่นนี้หากปราศจาก GParted ในบรรทัดคำสั่งสำหรับระบบที่ไม่มี GUI หรือไม่?
Kevin Keane

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 แล้วปรับขนาดให้เป็นขนาดที่เล็กที่สุดเท่าที่จะเป็นไปได้ (ซึ่งมากกว่าขนาดที่ใช้เล็กน้อยเนื่องจากข้อมูลเมตา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.