Як зменшити розмір групи томів у 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 ГБ вільного місця. Але коли я хочу скоротити цю групу томів приблизно на 50 Гб:

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щоб побачити, які розширення зараз виділяються.


1
Для мене питання полягало в тому, що воно перемістило ПЕ в інші місця. Довелося вказати призначення, наприклад: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. Я не думаю, що це має бути докладно, але корисність для майбутніх глядачів буде щось корисне
Джастін,

Я мав вільний простір на початку, виклик pvmove без призначення не перемістив його на початок. Те, що працювало, було pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendз "нинде", обчислене як кінець - рік. Однак я не впевнений, чи спрацює це, якщо вільний простір на початку менший, ніж діапазон, який потрібно перемістити. Крім того, я думаю, що у ваших вихідних відеокампаніях є помилка друку, я думаю, ви це мали на увазі /dev/sda5:0-xxxзамість /dev/sda:0-xxx.
pcworld

2
@Justin --resizefsПараметр lvresizeвже доглядає за зміною розміру базової файлової системи.
pcworld

@pcworld просто прочитав сторінку чоловіка і, здається, ти маєш рацію
Джастін

Відмінна відповідь - але чи можете ви детальніше зупинитися на останньому кроці? Я припускаю, що "змінити розмір LVM" означає "змінити фізичний об'єм?" Чи можливо це зробити без GParted, у командному рядку, для систем, які не мають графічного інтерфейсу?
Кевін Кін

1

Ця старша публікація охоплює такий вид скорочення, щоб ви могли використовувати новий простір для чогось іншого. Однак вам потрібно буде змінити розмір даних до даних. Це повинно охоплювати та інші помилки, які ви також отримуєте. Коли вона постаріла, спочатку прочитайте:


0

Я використовую цей метод, не впевнений, що це найкраще, але працює для мене

використовуйте його обережно, а не SysAdmin

обчислити різницю, яка викликає проблему

324% 4 = 0 немає проблем

але

324% 32 = 10,125

це проблема, тому вона не підходить

я думаю, що це називається "отримати реальне число"

lvmdiskscan

перелічити задіяні розділи

потім

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

я повинен додати додаткових 4М для роботи, я думаю, що це пов'язано зі старим розміром 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, а потім змінює його до мінімально можливого розміру (що трохи більше, ніж використовуваний розмір завдяки метаданим).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.