LINUX.ORG.RU

Уменьшить LVM


0

2

Давным-давно жил был ноутбук. Нужного на нем не было и я решил поставить на него Федору, используя разбиение по умолчанию. В результате:

/dev/sda1 /boot 500mb
/dev/sda2 LVM 300gb

LVM:
VolGroup/lv_home 250gb
VolGroup/lv_root 49gb
VolGroup/lv_swap 1gb
Хочу иметь:
/dev/sda1 /boot 500mb
/dev/sda2 LVM 275gb
/dev/sda3 неразмечено 25gb
Что сделал: Удалил VolGroup/lv_root и VolGroup/lv_swap Делаю:
lvm> pvresize --setphysicalvolumesize 275G /dev/sda2
  /dev/sda2: cannot resize to 8799 extents as later ones are allocated.
  0 physical volume(s) resized / 1 physical volume(s) not resized
Что это, б$%&ь, значит?

★★★★★

Последнее исправление: r0ck3r (всего исправлений: 1)

Что это, б$%&ь, значит?

Пишет в том смысле, что нельзя выделить кусок из LVM во вне. Внутри LVM делайте что хотите, а уменьшать его самого пространство нельзя.

iZEN ★★★★★
()

Это значит, что твои lv_root и lv_swap находились не в конце раздела, вследствии чего последний не может быть уменьшен:

***oo***o**
* — занятые участки, o — свободные

Об этом же, кстати, говорится и в man pvresize

RESTRICTIONS
       pvresize will refuse to shrink PhysicalVolume if it has allocated
       extents  after  where  its  new  end  would be. In the future, it
       should relocate these elsewhere in the volume group if  there  is
       sufficient free space, like pvmove does.

И вроде как pvs --segments поможет убедиться в том, так это или нет

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin
lvm> pvs --segments
  PV         VG       Fmt  Attr PSize   PFree  Start SSize
  /dev/sda2  VolGroup lvm2 a-   297,59g 53,44g     0  1600
  /dev/sda2  VolGroup lvm2 a-   297,59g 53,44g  1600  7813
  /dev/sda2  VolGroup lvm2 a-   297,59g 53,44g  9413   110

То есть, один пустой сегмент в начале от 0 до 1600, в конце от 9413 до (9413+110)? Есть ли выход без переноса всех данных на другой винт?

r0ck3r ★★★★★
() автор топика
Ответ на: комментарий от r0ck3r

Честно говоря, не знаю. Из man'а кажется, что может помочь pvmove -n lv_home /dev/sda2:0. Рекомендую или погуглить, или поэкспериментировать, создав мальнький раздел, и попытаться его подвинуть.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

pvmove allows you to move the allocated physical extents (PEs) on SourcePhysicalVolume to one or more other physical volumes (PVs). You can optionally specify a source LogicalVolume in which case only extents used by that LV will be moved to free (or specified) extents on DestinationPhysicalVolume(s). If no DestinationPhysicalVolume is specifed, the normal allocation rules for the volume group are used.

Отсюда видно, что он может помочь перенести только на другой PV

r0ck3r ★★★★★
() автор топика

Такая же задача была, справился путём ресайза раздела на 500 мегабайт — полгига для образов ядра явно многовато, 50-160 мегабайт хватит с лихвой.

Ну мне не так много надо было места.

Вот что советую: можешь попробовать ресайзнуть файловую систему которая у тебя в конце LVM, потом саму LV, а потом и PV. А дальше снова можешь увеличить тот LV, но уже засчёт удаленных из root и swap экстентов (кстати как ты её тогда грузишь без них?

Xenius ★★★★★
()
Ответ на: комментарий от r0ck3r

Отсюда видно, что он может помочь перенести только на другой PV

Очевидно, что ты не желаешь гуглить. --alloc anywhere. Тонкость в том, что тебе нужно будет переносить свой здоровый раздел в середине диска маленькими кусочками. По крайне мере, мне удалось из

$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 4.00m     0     3   #12MB
  /dev/loop1 vt   lvm2 a-   88.00m 4.00m     3    15   #60MB
  /dev/loop1 vt   lvm2 a-   88.00m 4.00m    18     3   #12MB
  /dev/loop1 vt   lvm2 a-   88.00m 4.00m    21     1   #free PE

После удаления первого и последнего раздела lvremove

$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0     3   #free PE
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     3    15   #60MB
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4   #free PE

Прийти к

$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree Start SSize
  /dev/loop1 vt   lvm2 a-   68.00m 8.00m     0    15   #60MB
  /dev/loop1 vt   lvm2 a-   68.00m 8.00m    15     2   #free PE

Путем кучи перемещений по 3 блока:

$ pvmove -v --alloc anywhere /dev/loop1:3-5 /dev/loop1:0-2
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     3     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     6    12
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4

$ pvmove -v --alloc anywhere /dev/loop1:6-8 /dev/loop1:3-5
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0     6
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     6     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     9     9
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4

#следующие шаги — эксперимент, надо было не дурачиться, а продолжать двигать по 3 блока
$ pvmove -v --alloc anywhere /dev/loop1:9 /dev/loop1:6
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0     7
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     7     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    10     8
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4

$ pvmove -v --alloc anywhere /dev/loop1:10-12 /dev/loop1:7-9
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0    10
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    10     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    13     5
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4

$ pvmove -v --alloc anywhere /dev/loop1:13-14 /dev/loop1:10-12
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0    12
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    12     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    15     3
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    18     4

# !!! TEH WIN !!!
$ pvmove -v --alloc anywhere /dev/loop1:15-17 /dev/loop1:12-14
$ pvs --segment /dev/loop1
  PV         VG   Fmt  Attr PSize  PFree  Start SSize
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m     0    15
  /dev/loop1 vt   lvm2 a-   88.00m 28.00m    15     7

После чего pvresize спокойно обрезал хвост, состоящий из свободных чанков.

В общем, кури мануалы, это возможно.

red_eyed_peguin
()

Я нашёл утилиту: http://bisqwit.iki.fi/source/lvm2defrag.html . Изначально она для дефрагментации lvm2, но её удобно использовать для сдвига всех томов в начало pv, чтобы его потом уменьшить. Это набор скриптов, который создаёт последовательность вызовов pvmove.

i-rinat ★★★★★
()

вот я проделал тоже что и ты, все получилось(я воспользовался утилиткой lvm2defrag), такой вопрос, как сделать что-бы это неразмеченное место стало /dev/sda3 ? у меня просто размер LVM уменьшился, и никакого неразмеченного раздела не появилось(

koshmar_
()

в общем у меня в cfdisk размер не поменялся, а в lvm>pvs поменялся, помогите из этого потерятного места сделать отдельный раздел=)

koshmar_
()
Ответ на: комментарий от koshmar_

таки все сделал, если кому то интересно, после pvresiz, я смело обрубил сзади раздел c помощью parted (он был допустим от 100 до 1000 цилиндров, я сделал от 100 до 500), все файлы не пострадали

koshmar_
()
Ответ на: комментарий от iZEN

Лучше повеситься от такого перейти на Btrfs.

Любителям альтернативных ОС, лучше изначально планировать возможность отрезания от PV, путем создания VG из нескольких PV. T.e. вместо одного 300Гб раздела, можно было сделать 3 — 250+25+25. На производительность это не повлияет, зато легко освободить один из 25Гб кусков.

sdio ★★★★★
()
Ответ на: комментарий от sdio

лучше изначально планировать возможность отрезания от PV, путем создания VG из нескольких PV. T.e. вместо одного 300Гб раздела, можно было сделать 3 — 250+25+25. На производительность это не повлияет, зато легко освободить один из 25Гб кусков.

Знал бы прикуп - жил бы в Сочи. Что за микроменеджмент нах? Без него чтоли сложности мало?

anonymous
()
3 июня 2012 г.
Ответ на: комментарий от sdio

А почему именно 250+25+25? Можно тогда уж создать 12 разделов по 12 гигабайт :) и все их выделить под группу.

Только логики в этом вижу маловато.

Вообще наличие нормального дефрагментатора для LVM «искаропки» удручает

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.