Позволяет ли lvm уменьшить файловую систему без простоя

Обновлено: 04.07.2024

У нас есть виртуальная машина на VMware, на ней есть диск. Диск большой, данных мало. Наша задача - сделать диск меньшего размера. На борту Logical Volume Manager ( LVM ).

Gparted не умеет переносить данные на LVM разделах. Будем делать всё руками.

1. Остановим процессы на сервере.

2. Создадим клон виртуалки. Если мы напортачим - возрадуемся бэкапу как родному.

3. Пока создаётся клон рассчитаем место, которое нужно оставить на дисках.

Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_smartfe00-lv_root 50G 15G 33G 30% /tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/sda2 477M 104M 348M 23% /boot /dev/sda1 197M 253K 197M 1% /boot/efi /dev/mapper/vg_smartfe00-lv_home 211G 11G 190G 6% /home

lv_root уменьшим с 50G до 30G, lv_home уменьшим с 211G до 25G

4. Выключаем ось.

5. Переключаем UEFI на BIOS.

6. Переключаем vlan на PXE или вставляем образ Resque CD.

7. Загружаемся с Resque CD.

8. Через gparted убеждаемся в том, что /dev/sdb активен (не обязательно).

9. Уменьшаем размеры файловых систем, уменьшаем логические разделы, сдвигаем данные к началу диска, уменьшаем физический раздел.

Список логических томов:

Ресайзим root до 30 Гб:

e2fsck -f /dev/mapper/vg_smartfe00-lv_home
resise2fs /dev/mapper/vg_smartfe01-lv_root 30G

Ресайзим home до 25 Гб:

e2fsck -f /dev/mapper/vg_smartfe00-lv_home
resise2fs /dev/mapper/vg_smartfe01-lv_home 25G

Уменьшаем размер логических томов:

lvreduce -L 30G /dev/mapper/vg_smartfe01-lv_root
lvreduce -L 25G /dev/mapper/vg_smartfe01-lv_home

Далее все сегменты вычисляем на калькуляторе для каждого сервера! Смысл в том, чтобы перемещать сегменты только на пустое место.

Включаем мозг, понимаем куда двигать home и сдвигаем его подальше:

Снова смотрим список сегментов:

Двигаем home вплотную к root:

vmove --alloc anywhere /dev/sdb1:19200-25599 /dev/sdb1:7680-14079

Двигаем swap вплотную к home:

pvmove --alloc anywhere /dev/sdb1:67083-71110 /dev/sdb1:14080-18107

Дальше запускаем gparted и работаем через него.

gparted - деактивируем /dev/sdb и ресайзим /dev/sdb1

10. Смотрим инфо получившегося /dev/sdb1 - total sector 148350848. Вычисляем размер нового диска:

148350848*512/1024/1024=72436,9375 Мб

Новый диск будем делать 72438 Мб, это в три раза меньше того, что было.

11. Выключаем ось.

12. Добавляем через vCenter новый диск на 72438 Мб.

13. Снова загружаемся через Resque CD.

14. gparted на /dec/sdc делаем device - create partition table.

15. gparted на /dev/sdc делаем новый раздел /dev/sdc1 в файловой системе lvm2 pv.

16. Проверяем через инфо, чтобы количество секторов на /dev/sdc1 (148350976) было не меньше чем на /dev/sdb1 (148350848).

17. Расширяем группу:vgextend vg_smartfe00 /dev/sdc1.

18. Мувим диск с /dev/sdb1 на /dev/sdc1:pvmove /dev/sdb1 /dev/sdc1.

19. Исключаем из группы /dev/sdb1:vgreduce vg_smartfe00 /dev/sdb1.

20. gparted - деактивируем диск /dev/sdc1.

21. gparted - check диска /dev/sdc1 - дополнительно раздел расширяется до полного объёма.

22. Выключаем ось.

23. Удаляем ненужный более диск через vCenter.

24. Переключаем BIOS обратно на EFI.

25. Переключаем vlan на боевой, если ранее переключались на PXE.

26. Включаем тачку.

Вот так легко и непринуждённо мы уменьшили диск и виртуального сервера с LVM.

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.

Изменение размера дисков LVM


На днях пришлось менять диски на сервере CentOS 6.7. Старые диски хоть и рабочие еще, но с нагрузкой не справлялись. Поэтому раскошелились и купили SSD диски такой же емкости, как и старые. Но т.к. стоимость 1 Гб на SSD диске намного дороже, то посмотрев на размер /var (180 Гб) и / (корневой раздел) 300 Гб, само собой напросилось решение увеличить размер / за счет уменьшения размера /var. Идея, конечно, хорошая, но раньше я никогда таким не баловался, поэтому провел выходные на форумах, проверил сначала все на виртуальной машине без raid, потом подумал, что на моем сервере работает софтовый raid1 и сделал тестовый стенд (на старый комп поставил CentOS 6.7 с двумя дисками в программном raid1) и проверил все на нем, потом уже выполнил повторно на рабочем сервере. Но все же волнительно было, чего уж. Итак, поехали!

Совет: если вы раньше никогда не развлекались изменениями разделов, никогда не пробуйте это делать на рабочем компьютере.

Итак, есть система из двух дисков, объединенных в raid1 (зеркало).

Разбивка примерно такая:

/dev/sda:
/dev/sda1 200 Мб, /dev/md0
/dev/sda2 480 Гб, /dev/md1

/dev/sdb:
/dev/sdb1 200 Мб, /dev/md0
/dev/sdb2 480 Гб, /dev/md1

/dev/md0 отдан под /boot

На /dev/md1 тома LVM:
/dev/VolGroup/LogVol00 swap 2 Гб
/dev/VolGroup/LogVol01 /var 180 Гб, ext4
/dev/VolGroup/LogVol02 / 300 Гб, ext4

Для чего я привел пример разбивки? Чтобы вы обратили внимание, что мы в дальнейшем ни разу не будем ресайзить тома на устройствах /dev/sdXY. Мы все изменения разделов будем проводить только с логическими томами LVM!

Задача: изменить размер /var до 30 Гб и отдать все освободившееся место в / (корень). Файловая система обоих разделов ext4. Система CentOS 6.7.

Шаг 1: уменьшаем /var

В моем случае (софтовый raid1) я сначала проверил на всякий случай, что все диски подключены и ошибок нет (cat /proc/mdstat).

Я не был уверен, что размонтировать /var (umount /var) в рабочем режиме хорошая мысль, поэтому загрузился с LiveCD CentOS в Rescue Mode (можно было войти в single mode и без LiveCD).

Проверяем доступность физического тома LVM:

Проверяем доступность групп томов:

Активируем логические тома:

Смотрим логические тома:

Можно посмотреть подробности тома /dev/VolGroup/LogVol01 (он у нас /var):

а можно и не смотреть.

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

Отмонтируем том, который у нас /var и который будет уменьшать:

Выполняем проверку файловой системы тома:

Команда должна пройти без ошибок.

Выполняем проверку на наличие ошибок (-f - force):

Сначала уменьшаем размер файловой системы тома:

resize2fs -p /dev/VolGroup/LogVol01 30G

Внимание: здесь "30G" - это размер, который мы хотим задать для файловой системы, а не на который мы хотим уменьшить файловую систему.

И только после этого изменяем размер тома LVM:

Теперь можно и не монтировать обратно раздел, а сразу перезагрузиться и проверить, что все ок, система загружается, df -h выдает размер /var равным 30 Гб.

Шаг 2: увеличиваем размер тома LVM (который у нас / ) без перезагрузки

Да, вы не очитались. Чтобы увеличить размер тома LVM нам не придется загружаться в single mode (или через LiveCD в Rescue mode).

На всякий случай, чтобы не перепутать, какому тому вы хотите отдать свободное место, выполните cat /etc/fstab и lvscan, убедитесь, что раздел / (корень) - это /dev/VolGroup/LogVol02, а не что-то иное ;)

Именно так, без пробелов между -l (это маленькая L) и +100%FREE. Заметьте, я не стал указывать, на сколько точно я хочу увеличть размер тома. В данной ситуации мне это было не нужно и чтобы не гадать, сколько конкретно надо добавить Гбайт, я просто указал, чтобы было добавлено все, что можно. man lvextend для ознакомления с вариациями -L+100G ;) Опция -r указывает на то, чтобы был выполнен ресайз файловой системы после увеличения логического тома. Без этой опции команды было бы две:

После успешного завершения я бы перезагрузился и проверил, что все ок.

Естественно, все вышеописанное может дать сбой на любом этапе, хотя бы из-за сбоя электропитания. Поэтому если данные на изменяемых разделах хоть как-то важны, вы должны иметь их копию.

Все вышеперечисленное верно для CentOS. Для Ubuntu вроде бы все то же самое. Думаю (не знаю) что для всех современных Linux все команды такие же.

Коротко: у меня есть lv 140GB, но я использую там всего 10Mb, как я могу уменьшить свободное пространство на этом lv? Я пробовал команду: lvextend -l -100%FREE /dev/volgroup/logvol, но ничего не помогло, он всего лишь переносит пару блоков, но не делает lv меньше.

Во-вторых, у меня есть /dev/sda2 - LVM2_member и он имеет 199GB, после уменьшения lv, как я могу уменьшить и сжать партицию до минимума и выкинуть свободное место, чтобы потом удалить его (возможно потребуется передвинуть разделы с помощью gparted)?

p.s. Я не могу уменьшить lv или раздел через resize2fs, потому что не могу уменьшить файловую систему XFS.

Средний 1 комментарий

Adamos

Коротко: у меня есть lv 140GB, но я использую там всего 10Mb

Совсем коротко: есть неудачное решение, содержащее всего 10 мег полезной инфы.
Высоко и коротко: слить куда-нибудь эти 10 мег, удалить неудачную разметку и переделать, как надо.

Все верно, это "неудачное решение" - /home ок, без проблем, я так и делал:

1. Как потом уменьшить LVM2_member - /dev/sda2?

Adamos

Alex Pebody, понятия не имею, не трогал LVM никогда.
Насколько я знаю об XFS, редактированию эта система не поддается в принципе, и проблема скорее в этом.

leahch

XFS? А! Да, ее нельзя уменьшить, только расширить, в отличии от ext3/4.

Вариант только один:
- копируем данные
- отмонтируем раздел
- сносим логический том
- создаем новый нужного размера
- форматируем
- копируем данные обратно

И да, на будущее, XFS конечно же хороша (особенно автоматической дефрагментацией), но EXT4 совсем не хуже, что говорят те пол петабайта данных в наших рабочих хранилищах!

Спасибо. Да я понял, это реальный выход из положения, задавал XFS не я, вот проблема: КАК ПОТОМ уменьшить раздел LVM2_member - /dev/sda2? Требуется ВЫКИНУТЬ неиспользуемое место и потом может с gparted или еще чем то, сдвинуть существующие разделы, а свободное место удалить и тем самым уменьшив диск в 500ГБ. Пробую сейчас: rescuezilla вроде как копирует только существующие данные в отличии от clonezilla, было бы просто замечательно, найти систему клонирования, которая копирует и создает разделы, при этом копируя только существующие данные, а не блоком LVM как кусок блочный и не важно забит он на 100% или на 1%.

leahch

Alex Pebody, LVM2_member - /dev/sda2 Это физический раздел таблицы дисков или логический раздел LVM? Подозреваю, что логический, хотя неплохо бы прилепить вывод команд, чтобы знать точно куда и как у вас что распределено

Ну и хорошо бы знать, что за файловая система на этом разделе.

Алексей Черемисин, LVM2_member - /dev/sda2 это сам LMV2_member партиция /dev/sda2, когда разберемся с LV внутри /dev/sda2, те с самим LVM, как уменьшить сам диск? А над ним еще /dev/sda который 500ГБ, еще его надо будет уменьшить, а после уменьшения партиции /dev/sda2, но это уже танцы с gparted. Главное - уменьшить LVM2 - /dev/sda2 КАК?

leahch

Если честно, не стал бороться, попробовал resize2fs, tune2fs и забил, если честно мне не совсем понятен процесс? Вот я пересобрал LV, далее что, мой /dev/sda2 как был 199ГБ так и остался, чтобы его уменьшить ЧТО НАДО СДЕЛАТЬ?

Далее после уменьшение, пустая область будет ПЕРЕД /dev/sda2 или после? Дело в том, что перед /dev/sda2 есть раздел /dev/sda1 и я не очень верю, что можно просто "выкинуть" часть неиспользуемой емкости /dev/sda2 перед /dev/sda2 и после /dev/sda1, не совсем понимаю процесс.

Как итог, нужны проверенные команды для /dev/sda2 - LVM2_member раздела, чтобы его уменьшить и получить свободное место, далее, как я уже сказал в том же GParted я буду двигать разделы, как уже не раз делал, чтобы все свободное место передвинуть вконец, далее там же уменьшить /dev/sda. Вот суть задачи.

Здравствуйте! Стоит 64-битная CentOS 5, по железу 4 SATA-диска, сколоченных по 2 в зеркальный RAID-1. Всё это объединено в LVM. Корневой раздел / работает на ext3 и занимает очень много, поэтому его необходимо уменьшить и высвободить свободное место для последующего монтирования разделов под xen. Вопрос: как уменьшить раздел без потери данных на ФС? Ведь для уменьшения раздел надо отмонтировать, а он является корневым. Заранее благодарен!


Загрузиться с LiveCD.

Обязательно, ОБЯЗАТЕЛЬНО(!) сначала уменьшите файловую систему, а потом -- раздел. Причем файловую систему надо уменьшить на бóльшую величину, чем планируется уменьшить раздел. Потом раздел уменьшается до нужной величины, а ФС растягивается обратно на остаток.

Корневой раздел / работает на ext3 и занимает очень много, поэтому его необходимо уменьшить и высвободить свободное место для последующего монтирования разделов под xen. Вопрос: как уменьшить раздел без потери данных на ФС? Ведь для уменьшения раздел надо отмонтировать, а он является корневым.

+1 к написанному выше. Во время работы (без размонтирования) ext* можно только увеличивать. Для уменьшения придётся загружаться с livecd.

Так, значит как я понимаю грузимся с LiveCD в режиме Rescue, ищем LVM, подмонтируем их, изменяем размер ext3, затем размер тома. Сейчас попробую.


>Так, значит как я понимаю грузимся с LiveCD в режиме Rescue, ищем LVM, подмонтируем их

Нормальные LiveCD сам детектят все LVM, что найдут в системе :)


Интересно, pmagic сам всё подхватит?


>о, как раз в тему, сегодня вечером собирался резать один немаленький раздел с екст3.

dumpe2fs покажет общее количество блоков и размер одного блока.


о, благодарю, что доктор прописал. пойду на кош^Wобразах тренироваться, пока данные с реального переносятся %)


мда, всё украдено до нас. даже файл образа укоротило… >_<"

За исключением ext4, но его в продакшене пока что нет.

За исключением ext4, но его в продакшене пока что нет.

Хм. Я как-раз недавно пытался уменьшить раздел с ext4 - без размонтирования не дало. Хотя увеличение без размонтирования прошло нормально.

Увеличение вроде и на ext3 нормально прокатывает. Вечером попробую на F11 поиграть с разделом каким-нибудь.


Я пытаюсь уменьшить пространство, выделенное для корневого LVM, поскольку мне это действительно не нужно, и у меня есть некоторые сомнения. Ниже приведены результаты для lvdisplay :

Что мне не хватает?

РЕДАКТИРОВАТЬ: Файловая система:

По запросу это используемая файловая система:

Примечание: я читал о некоторых Live CD для управления разделами LVM (например, GParted), но пока я не нашел ни одного, если вы знаете что-нибудь добавить к своему ответу !!

Прочитанные статьи: 1, 2, 3, 4 и многие другие

РЕДАКТИРОВАТЬ: не могу вырастить другой LVM

Я выполнил команду для сжатия pc_lvm_root и все было хорошо, как показано ниже:

Теперь я хочу добавить эти 50G к pc_rperez_lvm-home но я не могу, см. вывод ниже:

РЕДАКТИРОВАТЬ: все еще не удается вырастить LVM

К сожалению, я пока не могу вырастить домашний LVM, ниже я сделал следующие предложения из ответа:

Идеи на данный момент?

РЕДАКТИРОВАТЬ: необходимая информация


  • Не могли бы вы добавить, какую файловую систему вы используете для / в свой вопрос? Самый быстрый способ найти это, вероятно, cat /etc/fstab .
  • @JasonAzze добавлен в OP .

В resize2fs не поддерживает сжатие смонтированной файловой системы:

ОПИСАНИЕ Программа resize2fs изменяет размер файловых систем ext2, ext3 или ext4. Его можно использовать для увеличения или уменьшения размонтированной файловой системы, расположенной на устройстве. Если файловая система смонтирована, ее можно использовать для увеличения размера смонтированной файловой системы, если ядро ​​и файловая система поддерживают изменение размера в режиме онлайн.

Поскольку вы используете дистрибутив Fedora, его намного проще использовать System Storage Manager чтобы изменить размер вашей файловой системы, так как она заботится об изменении размера базового раздела / логического тома за один раз. Хотя вам нужно будет загрузить систему с одного из вращений LiveCD, предоставленного сообществом Fedora (я рекомендую XFCE или LXDE, чтобы немного уменьшить размер загрузки), поэтому в окне терминала просто введите:

уменьшить root fs на 5 гигабайт, или

Установить размер fs на 15 гигабайт.

Если ssm недоступен на live CD, который вы бы загрузили, тогда выполните

перед изменением размеров.

чтобы расширить том до максимально доступного пространства, просто опустите -s вариант:

  • Можете ли вы взглянуть на мою вторую правку и улучшить свой ответ, добавив это?
  • Я считаю, что это связано с фактическим свободным пространством в группе томов чуть меньше 50 ГБ. посмотри обновление, пожалуйста
  • Я не могу вырастить LVM, увидеть последние изменения в OP, есть еще совет?
  • какие vgdisplay показывает и что dumpe2fs -h /dev/mapper/pc_rperez_lvm-home показывает?
  • Я добавил информацию в ОП .

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

Теперь вам нужно сделать это на live CD, поскольку корневой раздел необходимо размонтировать, а затем с терминала в реальном сеансе мы сделаем следующее.

Убедитесь, что корневой LVM отключен

В mount должен показывать только точки монтирования, относящиеся к live CD

Проверьте корневую файловую систему на наличие ошибок

Уменьшите корневую файловую систему

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

Уменьшить корневой LV

Проверяем корневой LV

Теперь вы должны увидеть, что у вас есть Free PE и ваша корневая файловая система составляет

Разверните корневую файловую систему, чтобы заполнить LV

Читайте также: