Linux уменьшить размер диска 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:

# pvscan
PV /dev/md1 VG VolGroup lvm2 [480.00 GiB / 0 free]

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

# vgscan
Reading all physical volumes. This may take a while.
Found volume group «VolGroup» using metadata type lvm2

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

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

# lvscan
ACTIVE ‘/dev/VolGroup/LogVol01’ [180.00 GiB] inherit
ACTIVE ‘/dev/VolGroup/LogVol00’ [2.00 GiB] inherit
ACTIVE ‘/dev/VolGroup/LogVol02’ [300.00 GiB] inherit

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

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

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

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

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

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

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

# e2fsck -f /dev/VolGroup/LogVol01

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

resize2fs -p /dev/VolGroup/LogVol01 30G

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

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

# lvreduce -L 30G /dev/VolGroup/LogVol01

Получили сообщение об успешном завершении.

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

На CentOS после загрузки до входа в систему появилось сообщение от SELinux, который должен переиндексировать изменения. Ок. Это заняло какое-то время и система сама перезагрузилась. После этого я вошел в систему и убедился, что все ок. Только после этого я перешел ко второму шагу (который оказался намного быстрее и проще), а именно увеличению корневого раздела путем добавления к нему всего доступного свободного места на физическом томе LVM. Заупстите pvscan и посмотрите, в выводе команды будет указано, есть доступное место (это плюс-минус то, что было занято раньше под /var). Теперь мы это свободное место добавим к / (корню).

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

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

Читайте также:  Linux mint драйвер вай фай

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

# lvextend -l+100%FREE -r

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

# lvextend -l+100%FREE /dev/VolGroup/LogVol02
# resize2fs /dev/VolGroup/LogVol02

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

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

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

Источник

Как уменьшить корневой раздел XFS на LVM

Каждый, кто сталкивался с задачей уменьшения XFS знает, что нет штатного решения это сделать. Для изменения размера в меньшую сторону нужно сдампить во временный раздел содержимое текущего и поменять точку монтирования. Затем уменьшить исходный раздел, сдампить уже временный раздел в новый исходный, вернуть точку монтирования.

Данные операции проще сделать, если это раздел с данными и есть возможность отмонировать его в процессе работы операционной системы. Однако, при работе с корневым разделом, это сделать сложнее. Рассмотрим, как это делается.

Хочу обратить внимание, что данная операция крайне опасна — любое неверное действие или нюанс в ранней настройке операционной системы приведет к падению системы без возможности загрузки. Перед началом работы стоит обкатать действия на тестовой машине.

Описание процесса

План действий такой:

  1. Создаем временный раздел XFS на новом томе LVM. Переносим корневой раздел на временный том и загружаемся с него.
  2. Уменьшаем исходный том до нужного размера, возвращаем на него данные. Загружаемся с нового раздела.
  3. Удаляем временный том.

В нашем примере будут такие разделы:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-root 253:0 0 8G 0 lvm /
vg-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk

* в данном примере корневой раздел находится на физическом диске sda и его разделе sda2.

Мы попробуем уменьшить раздел с 8 Гб до 6. Диск sdb будем использовать как временный.

Подготовка

Для решения нашей задачи нам понадобятся две утилиты — установим их.

а) если используем CentOS / Red Hat:

yum install lvm2 xfsdump

б) если используем Ubuntu / Debian:

apt-get install lvm2 xfsdump

Затем рекомендую сделать резервную копию всех важных данных, которые находятся на компьютере. Также стоит выбрать подходящее время для работы, например, в выходные (чтобы было время настроить компьютер или сервер по новой, в случае неудачи).

1. Загрузка с временного раздела

Подготовим временный раздел для корневого тома:

vgcreate vg_tmp_root /dev/sdb

lvcreate -n lv_tmp_root -l +100%FREE /dev/vg_tmp_root

* данными командами мы создали группу томов vg_tmp_root и сделали из нее один логический раздел lv_tmp_root.

Создадим файловую систему XFS и смонтируем ее в каталог /mnt:

mount /dev/vg_tmp_root/lv_tmp_root /mnt

Смотрим расположение корневого раздела командой:

.
— Logical volume —
LV Path /dev/vg/root
LV Name root
VG Name vg
.

Находим среди результатов корневой раздел — нам нужен параметр LV Path.

Сдампим содержимое текущего корневого раздела в наш временный:

xfsdump -J — /dev/vg/root | xfsrestore -J — /mnt

* где /dev/vg/root — то, что мы получили в параметре LV Path командой lvdisplay; /mnt — каталог, в который мы смонтировали наш временный раздел.

Заходим в окружение chroot нашего временного корня:

for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount —bind $i /mnt/$i; done

Запишем новый загрузчик:

grub2-mkconfig -o /boot/grub2/grub.cfg

Обновляем образы загрузки:

cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed «s/initramfs-//g; s/.img//g»` —force; done

Открываем конфигурационный файл grub:

Меняем все значения, которые задействуют старый том lvm — в моем случае, все совпадения:

* так как у меня корневой раздел был в группе vg и имел название root (команда lvdisplay), то под замену попадает vg/root. В вашем случае это будет другое значение.

Этот момент крайне важен. Неправильное редактирование приведет к невозможности загрузки.

Выходим из окружения chroot и перезагружаем компьютер:

. мы должны загрузиться с временного раздела:

Читайте также:  Как войти проводник windows

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-swap 253:1 0 1G 0 lvm [SWAP]
vg-root 253:2 0 8G 0 lvm
sdb 8:16 0 8G 0 disk
vg_tmp_root-lv_tmp_root 253:0 0 8G 0 lvm /

* как видим, теперь корневой раздел на sdb.

2. Уменьшаем раздел и возвращаем с него загрузку

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

Удаляем его логический том:

* напомню, что /dev/vg/root используется в конкретном случае и данный путь нужно подставить свой.

Do you really want to remove active logical volume vg/root? [y/n]:

. отвечаем утвердительно — y;

Создаем новый логический том меньшего размера:

lvcreate -n root -L 6G vg

* мы создали новый том LVM со старым именем root в группе томов vg.

WARNING: xfs signature detected on /dev/vg/root at offset 0. Wipe it? [y/n]:

. отвечаем утвердительно — y;

Создаем на нем файловую систему и монтируем его:

mount /dev/vg/root /mnt

Возвращаем обратно содержимое корня:

xfsdump -J — /dev/vg_tmp_root/lv_tmp_root | xfsrestore -J — /mnt

Заходим в окружение chroot нашего временного корня:

for i in /proc/ /sys/ /dev/ /run/ /boot/; do mount —bind $i /mnt/$i; done

Запишем новый загрузчик:

grub2-mkconfig -o /boot/grub2/grub.cfg

Обновляем образы загрузки:

cd /boot ; for i in `ls initramfs-*img`; do dracut -v $i `echo $i|sed «s/initramfs-//g; s/.img//g»` —force; done

Открываем конфигурационный файл grub:

Проверяем все значения, которые задействуют старый том lvm — в моем случае должны быть:

* так как у меня корневой раздел в группе vg и имеет название root (команда lvdisplay), то корневой раздел имеет точку монтирования lvm vg/root. В вашем случае это будет другое значение.

Выходим из окружения chroot и перезагружаем компьютер:

. мы должны загрузиться с нашего уменьшенного раздела:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 9G 0 part
vg-root 253:0 0 6G 0 lvm /
vg-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk
vg_tmp_root-lv_tmp_root 253:2 0 8G 0 lvm

* как видим, корневой раздел вернулся назад и его размер уменьшен.

3. Удаление временного тома

Для порядка, вернем прежнее состояние без временного тома.

Удаляем том, группу и снимаем lvm-метку с диска, который нами использовался как временный (sdb):

Do you really want to remove active logical volume vg_tmp_root/lv_tmp_root? [y/n]: y

Источник

Как работать с LVM

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

Используемые команды одинаково подойдут как для систем Red Hat / CentOS, так и Debian / Ubuntu.

Уровни абстракции

Работа с томами с помощью LVM происходит на 3-х уровнях абстракции:

  1. Физический уровень (PV). Сначала диск инициализируется командой pvcreate — в начале диска создается дескриптор группы томов. При этом важно заметить, что диск не обязательно должен быть физическим — мы можно отметить на использование обычный раздел диска.
  2. Группа томов (VG). С помощью команды vgcreate создается группа томов из инициализированных на предыдущем этапе дисков.
  3. Логический том (LV). Группы томов нарезаются на логические тома командой lvcreate.

Схематично, уровни можно представить так:

Установка

Для работы с LVM необходима установка одноименной утилиты. В системе Linux она может быть установлена по умолчанию. Но если ее нет, выполняем инструкцию ниже.

Если используем системы на безе deb (Ubuntu, Debian, Mint):

apt-get install lvm2

Если используем системы на безе RPM (Red Hat, CentOS, Fedora):

yum install lvm2

Создание разделов

Рассмотрим пример создания томов из дисков sdb и sdc с помощью LVM.

1. Инициализация

Помечаем диски, что они будут использоваться для LVM:

pvcreate /dev/sdb /dev/sdc

* напомним, что в качестве примера нами используются диски sdb и sdc.

Посмотреть, что диск может использоваться LMV можно командой:

В нашем случае мы должны увидеть что-то на подобие:

«/dev/sdb» is a new physical volume of «1,00 GiB»
— NEW Physical volume —
PV Name /dev/sdb
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rR8qya-eJes-7AC5-wuxv-CT7a-o30m-bnUrWa

«/dev/sdc» is a new physical volume of «1,00 GiB»
— NEW Physical volume —
PV Name /dev/sdc
VG Name
PV Size 1,00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2jIgFd-gQvH-cYkf-9K7N-M7cB-WWGE-9dzHIY

  • PV Name — имя диска.
  • VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
  • PV Size — размер диска.
  • Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
  • PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
  • Total PE — количество физических экстентов.
  • Free PE — количество свободных физических экстентов.
  • Allocated PE — распределенные экстенты.
  • PV UUID — идентификатор физического раздела.

2. Создание групп томов

Инициализированные на первом этапе диски должны быть объединены в группы.

Читайте также:  Windows defender antivirus download

Группа может быть создана:

vgcreate vg01 /dev/sdb /dev/sdc

* где vg01 — произвольное имя создаваемой группы; /dev/sdb, /dev/sdc — наши диски.

Просмотреть информацию о созданных группах можно командой:

На что мы получим, примерно, следующее:

— Volume group —
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 1,99 GiB
PE Size 4,00 MiB
Total PE 510
Alloc PE / Size 0 / 0
Free PE / Size 510 / 1,99 GiB
VG UUID b0FAUz-wlXt-Hzqz-Sxs4-oEgZ-aquZ-jLzfKz

  • VG Name — имя группы.
  • Format — версия подсистемы, используемая для создания группы.
  • Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
  • VG Access — уровень доступа к группе томов.
  • VG Size — суммарный объем всех дисков, которые входят в группу.
  • PE Size — размер физического фрагмента (экстента).
  • Total PE — количество физических экстентов.
  • Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
  • Free PE / Size — свободное пространство: колическтво экстентов / объем.
  • VG UUID — идентификатор группы.

3. Создание логических томов

Последний этап — создание логического раздела их группы томов командой lvcreate. Ее синтаксис:

Примеры создания логических томов:

lvcreate -L 1G vg01

* создание тома на 1 Гб из группы vg01.

lvcreate -L50 -n lv01 vg01

* создание тома с именем lv01 на 50 Мб из группы vg01.

lvcreate -l 40%VG vg01

* при создании тома используется 40% от дискового пространства группы vg01.

lvcreate -l 100%FREE -n lv01 vg01

* использовать все свободное пространство группы vg01 при создании логического тома.
* также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).

Посмотрим информацию о созданном томе:

— Logical volume —
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV UUID 4nQ2rp-7AcZ-ePEQ-AdUr-qcR7-i4rq-vDISfD
LV Write Access read/write
LV Creation host, time vln.dmosk.local, 2019-03-18 20:01:14 +0300
LV Status available
# open 0
LV Size 52,00 MiB
Current LE 13
Segments 1
Allocation inherit
Read ahead sectors auto
— currently set to 8192
Block device 253:2

  • LV Path — путь к устройству логического тома.
  • LV Name — имя логического тома.
  • VG Name — имя группы томов.
  • LV UUID — идентификатор.
  • LV Write Access — уровень доступа.
  • LV Creation host, time — имя компьютера и дата, когда был создан том.
  • LV Size — объем дискового пространства, доступный для использования.
  • Current LE — количество логических экстентов.

Создание файловой системы и монтирование тома

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

Файловая система

Процесс создания файловой системы на томах LVM ничем не отличается от работы с любыми другими разделами.

Например, для создания файловой системы ext4 вводим:

* vg01 — наша группа томов; lv01 — логический том.

Для создания, например, файловой системы xfs вводим:

Монтирование

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

Для разового монтирования пользуемся командой:

mount /dev/vg01/lv01 /mnt

* где /dev/vg01/lv01 — созданный нами логический том, /mnt — раздел, в который мы хотим примонтировать раздел.

Для постоянного монтирования раздела добавляем строку в fstab:

/dev/vg01/lv01 /mnt ext4 defaults 1 2

* в данном примере мы монтируем при загрузке системы том /dev/vg01/lv01 в каталог /mnt; используется файловая система ext4.

Проверяем настройку fstab, смонтировав раздел:

Проверяем, что диск примонтирован:

Просмотр информации

Разберемся, как получить информацию о дисковых накопителях в системе.

1. Для общего представления дисков, разделов и томов вводим:

Мы получим что-то на подобие:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
sda1 8:1 0 1G 0 part /boot
sda2 8:2 0 29G 0 part
sys-root 253:0 0 27G 0 lvm /
sys-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
vg01-lv01-real 253:3 0 1G 0 lvm
vg01-lv01 253:2 0 1G 0 lvm /mnt
vg01-sn01 253:5 0 1G 0 lvm
sdc 8:32 0 1G 0 disk
vg01-lv01-real 253:3 0 1G 0 lvm
vg01-lv01 253:2 0 1G 0 lvm /mnt
vg01-sn01 253:5 0 1G 0 lvm
vg01-sn01-cow 253:4 0 500M 0 lvm
vg01-sn01 253:5 0 1G 0 lvm
sdd 8:48 0 1G 0 disk

* как видим, команда отображает корневое блочное устройство, какие разделы из него сделаны и в какие логические тома организованы из некоторых из разделов.

2. Получить информацию о проинициализированных для LVM дисков:

Источник

Оцените статью