Làm cách nào để giảm kích thước Nhóm âm lượng trong 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

Vì vậy, tôi có một VG với không gian trống 65 GByte. Nhưng khi tôi muốn thu nhỏ Nhóm âm lượng này khoảng ~ 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

Vì vậy, thông báo lỗi là:

cannot resize to 63231 extents as later ones are allocated.

H: Làm cách nào tôi có thể chống phân mảnh vg_root để tôi có thể xóa phần không cần thiết của nó?

ps: Tôi đã phát hiện ra rằng tôi chỉ cần thay đổi kích thước PV để thay đổi kích thước VG, hoặc có bất kỳ lệnh nào tốt hơn để thực hiện thay đổi kích thước VG (ví dụ: tôi có thể làm gì nếu tôi thực hiện vài VG trên PV? ... )?

Câu trả lời:


31

Bạn có thể sử dụng pvmoveđể di chuyển các phạm vi đó đến đầu thiết bị hoặc thiết bị khác:

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

Sau đó pvmovechọn nơi để di chuyển phạm vi đến hoặc bạn có thể chỉ định nơi để di chuyển chúng.

Xem pvs -v --segments /dev/deviceđể xem những gì phạm vi hiện đang được phân bổ.


1
Đối với tôi vấn đề là nó đã di chuyển PE đến nơi khác. Phải chỉ định đích, ví dụ:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov

29

Đây là các bước cần thiết để thay đổi kích thước phân vùng LVM hoặc LVM2:

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

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

Lệnh cuối cùng pvresize, có thể mang lại lỗi

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

Bạn phải sắp xếp lại không gian chưa phân bổ ở cuối LVM. Điều đó có nghĩa là sau phân vùng root và exchange_1. Bạn có thể thấy sự sắp xếp không gian hiện tại với lệnh này

pvs -v --segments /dev/sda5

pvs sẽ hiển thị đầu ra như thế này

/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

Bây giờ sử dụng pvmoveđể loại bỏ phân mảnh bên ngoài:

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

Bây giờ hãy xem nếu di chuyển khối lượng trao đổi thành công.

pvs -v --segments /dev/sda5

sẽ hiển thị thứ tự mới của khối lượng:

/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

Sau đó, sử dụng GParted và thay đổi kích thước LVM đến khu vực được sử dụng tối đa. Phần còn lại sẽ ở trong không gian chưa phân bổ.


Đây là một câu trả lời khá toàn diện - nó sẽ hữu ích mặc dù nếu nó bao gồm một bước 0 để thực hiện thay đổi kích thước hệ thống tập tin, ví dụ resize2fs. Tôi không nghĩ rằng nó cần phải chi tiết, nhưng chỉ cần có một cái gì đó để nâng niu người xem trong tương lai sẽ hữu ích
Justin

Tôi đã có không gian trống ngay từ đầu, gọi pvmove mà không có đích đến đã không chuyển nó về đầu. Những gì đã làm việc pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendvới "newend" được tính là kết thúc - yyyy. Tuy nhiên tôi không chắc điều này có hiệu quả không nếu không gian trống lúc ban đầu nhỏ hơn phạm vi cần di chuyển. Ngoài ra tôi nghĩ rằng có một lỗi đánh máy trong đầu ra pvs của bạn, tôi nghĩ rằng bạn có nghĩa là /dev/sda5:0-xxxthay vì /dev/sda:0-xxx.
pcworld

2
@Justin --resizefsTham số lvresizeđã sẵn sàng thay đổi kích thước hệ thống tập tin cơ bản.
pcworld

@pcworld chỉ cần đọc trang người đàn ông và có vẻ như bạn đúng
Justin

Câu trả lời tuyệt vời - nhưng bạn có thể giải thích ở bước cuối cùng không? Tôi giả sử "thay đổi kích thước LVM" có nghĩa là "thay đổi kích thước âm lượng vật lý?" Có cách nào để làm điều này mà không cần GParted, trên dòng lệnh, cho các hệ thống không có GUI không?
Kevin Keane

1

Bài đăng cũ hơn này bao gồm loại thu hẹp này để bạn có thể sử dụng không gian mới cho một cái gì đó khác. Bạn sẽ cần thay đổi kích thước nó thành dữ liệu tuy nhiên trước đây. Điều này sẽ bao gồm điều đó và các lỗi khác bạn cũng nhận được. Khi nó cũ hơn, hãy đọc qua trước:


0

tôi sử dụng phương pháp này, không chắc nó có tốt nhất không nhưng hiệu quả với tôi

sử dụng nó một cách thận trọng và không SysAdmin

tính toán sự khác biệt gây ra vấn đề

324% 4 = 0 không có vấn đề

nhưng

324% 32 = 10.125

đó là vấn đề vì vậy nó không phù hợp

tôi nghĩ nó được gọi là "lấy số thực"

lvmdiskscan

liệt kê các phân vùng liên quan

sau đó

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

Tôi phải thêm 4 triệu để làm việc, tôi nghĩ nó liên quan đến kích thước PE cũ

cuối cùng

vgchange -s 32M **

0

Các câu trả lời trước đã giúp tôi giải quyết vấn đề này, nhưng tôi cần tự động hóa nó và vì vậy đã viết 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

Điều này gọi pvmove cho bạn nhiều lần cần thiết để chống phân mảnh PV, và sau đó thay đổi kích thước của nó về kích thước tối thiểu có thể của nó (nhiều hơn một chút so với kích thước được sử dụng do siêu dữ liệu).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.