sonyps4.ru

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

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

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

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

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

# lvscan
ACTIVE "/dev/VolGroup/LogVol01" inherit
ACTIVE "/dev/VolGroup/LogVol00" inherit
ACTIVE "/dev/VolGroup/LogVol02" inherit

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

# lvdisplay /dev/VolGroup/LogVol01

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

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

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

# umount /dev/VolGroup/LogVol01

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

# fsck.ext4 /dev/VolGroup/LogVol01

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

Выполняем проверку на наличие ошибок (-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).

На всякий случай, чтобы не перепутать, какому тому вы хотите отдать свободное место, выполните 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 все команды такие же.

21.08.2017 10:48 bzzz

Менеджер логических томов (LVM англ . Logical Volume Manager ) - предоставляет собой дополнительный уровень абстракции между физическими/логическими дисками (привычными разделами, с которыми работает fdisk и аналогичные программы) и файловой системой. Это достигается путём разбивки изначальных разделов на небольшие блоки (экстенты , обычно 4-32 МБайт ) и объединения их в единый виртуальный том, точнее группу томов (volume group ), которая далее разбивается на логические тома (logical volume ). Для файловой системы логический том представлен как обычное блочное устройство, хотя отдельные экстенты тома могут находиться на разных физических устройствах (и даже сам экстент может быть распределён подобно RAID). LVM увеличивает гибкость файловой системы, однако, являясь просто промежуточным слоем, не отменяет ограничения и использование других слоёв. То есть, по-прежнему нужно создавать и изменять разделы, форматировать их.

Создание.

# pvcreate /dev/sdb1 /dev/sdb2 //создание физического тома (physical volume) # vgcreate volgroup00 /dev/sdb1 //создание группы томов (volume group) # vgextend volgroup00 /dev/sdb2 //добавление нового раздела в группу томов # pvdisplay /dev/sdb2 //отображение атрибутов физического тома # lvcreate -L20G -ntest01 volgroup00 //создание логического тома с именем test размером 20Гб

Размер тома можно создавать по количеству экстентов, их число в группе томов определяется через vgdsplay :

# lvcreate -l 10000 volgroup00 -n test02

Теперь когда логический том создан над ним можно выполнять теже действия как и с обычным разделом, т.е. его можно форматировать, монтировать, переносить информацию и проч.

# mkreiserfs /dev/volgroup00/test01 //форматирование логического тома под ReiserFS # mount /dev/volgroup00/test01 /mnt/lvmtest //монтирование логического тома # cp -a /etc/ /mnt/lvmtest //копирование

Сопровождение LVM.

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

После увеличения логического тома, необходимо увеличить размер файловой системы. Для каждой ФС свой метод. Причем в каждом случае есть свои нюансы:
Перед изменением размера ФС Ext2 необходимо отмонтировать раздел (размер Ext3/Ext4 изменяется на лету).
Ext4 увеличивается только средством resize2fs . В fsadm свои методы.
Увеличивать размер файловых систем Reiserfs можно как в смонтированном , так и в размонтированном состоянии.
Размер файловой системы XFS можно увеличить только в смонтированном состоянии. Кроме того, утилите в качестве параметра нужно передать точку монтирования, а не имя устройства.

# lvextend - L+ 4G / dev/ volgroup00/ test01 //увеличение логического тома на 4Гб # resize2fs / dev/ volgroup00/ ext //расширение Ext2/Ext3/Ext4 или второй вариант через fsadm (в некоторых источниках пишут про e2fsadm, у себя ее не нашел). # fsadm - l resize / dev/ volgroup00/ ext 2G //увеличение логического тома Ext2/Ext3, с расширением ФС. На сенятбрь 2009 Ext4 пока не поддерживается # resize_reiserfs - f / dev/ volgroup00/ reiser //расширение ReiserFS # xfs_growfs / mnt/ lvm/ xfs //расширение XFS # btrfsctl - r + 2g / mnt/ lvm/ btrfs/ //расширение Btrfs или # btrfsctl - r + 2g - A / dev/ volgroup00/ btrfs //расширение Btrfs

# lvextend -L+4G /dev/volgroup00/test01 //увеличение логического тома на 4Гб # resize2fs /dev/volgroup00/ext //расширение Ext2/Ext3/Ext4 или второй вариант через fsadm (в некоторых источниках пишут про e2fsadm, у себя ее не нашел). # fsadm -l resize /dev/volgroup00/ext 2G //увеличение логического тома Ext2/Ext3, с расширением ФС. На сенятбрь 2009 Ext4 пока не поддерживается # resize_reiserfs -f /dev/volgroup00/reiser //расширение ReiserFS # xfs_growfs /mnt/lvm/xfs //расширение XFS # btrfsctl -r +2g /mnt/lvm/btrfs/ //расширение Btrfs или # btrfsctl -r +2g -A /dev/volgroup00/btrfs //расширение Btrfs

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

Логические тома также могут быть уменьшены в размере. В первую очередь необходимо уменьшить размер файловой системы, и только после этого уменьшать размер логического тома. В обратной последовательности можно потерять данные. Также есть некоторые нюансы:
Перед изменением размера файловую систему необходимо отмонтировать.
При изменении размера Ext2/Ext3 resize2fs ’у указывается ее новый размер.
Уменьшить XFS и JFS невозможно.
Уменьшить Btrfs можно на лету, но лучше не рисковать.

# resize2fs /dev/volgroup00/ext2 500m //указание нового размера для ФС Ext2/Ext3 # fsadm -l resize /dev/volgroup00/ext3 200M //указание нового размера для ФС Ext2/Ext3 # resize_reiserfs -s-1G /dev/volgroup00/reiserfs //уменьшение ФС Reiserfs # btrfsctl -r -2g -A /dev/volgroup00/btrfs //уменьшение ФС Btrfs # lvreduce -L-1G /dev/volgroup00/test01 //уменьшение логического тома

Переименование логического тома

# vgchange -a n /dev/volgroup02 //отключение логических томов в группе-жертве # vgmerge volgroup01 volgroup02 //поглощение группы volgroup02 группой volgroup01

Разделение группы томов

# vgsplit volgroup01 volgroup02 /dev/sdb1 //выделение новой группы томов volgroup02 которая разместится на физическом томе /dev/sdb1

Изменение размера физического тома. Есть несколько нюансов:
Увеличение размера физического тома LVM, производится после увеличения раздела программами типа cfdisk/fdisk
Уменьшение тома следует проводить после уменьшения файловых систем и логических томов, иначе возможна порча данных

# [b]pvresize /dev/sda1 //увеличение физического тома # [b]pvresize –setphysicalvolumesize 40G /dev/sda1 //уменьшение физического тома

Создание снимков (Snapshots)

Снимок это доступная только для чтения копия другого тома. При создании снимков необходимо убедиться что запущен dmeventd . При создании снимков с XFS ее предвариетльно надо заморозить – xfs_freeze .

# lvcreate -L600M -s -n var-backups /dev/volgroup00/var //создание тома var-backup, как копии тома var # mount /dev/volgroup00/var-backup /mnt/backup //последующее монтирование снимка

Создание зеркала (Mirrors)

Зеркала используются для повышения отказоустойчивости и повышения уровня сохранности информации. Для создания зеркала необходимо 3 физических тома, 2 для зеркала и 1 для журнала. Рекомендуется использовать физические тома размещенные на разных носителях. Использование физических томов с одного носителя сводит на ноль целесообразность использования зеркала, т.к. в случае аппаратного сбоя зеркало оказывается бесполезным. При создании зеркал необходимо убедиться что запущен dmeventd

# pvcreate /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем физический том # vgcreate mirror00 /dev/sda5 /dev/sdb1 /dev/sdc1 //создаем группу mirror00 # lvcreate -L 5G -n volume00 -m 1 mirror00 //создаем зеркальный том volume00

просмотр информации о логических томах, процент Copy должен достигнуть 100%

# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert volume00 mirror00 mwi- a- 5.00G volume00_mlog 6.17

# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert volume00 mirror00 mwi-a- 5.00G volume00_mlog 6.17

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

# lvs - a - o + devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices volume00 mirror00 mwi- a- 5.00G volume00_mlog 100.00 volume00_mimage_0(0 ) , volume00_mimage_1(0 ) [ volume00_mimage_0] mirror00 iwi- ao 5.00G / dev/ sda5(0 ) [ volume00_mimage_1] mirror00 iwi- ao 5.00G / dev/ sdb1(0 ) [ volume00_mlog] mirror00 lwi- ao 4.00M

# lvs -a -o +devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices volume00 mirror00 mwi-a- 5.00G volume00_mlog 100.00 volume00_mimage_0(0),volume00_mimage_1(0) mirror00 iwi-ao 5.00G /dev/sda5(0) mirror00 iwi-ao 5.00G /dev/sdb1(0) mirror00 lwi-ao 4.00M

# vgextend volgroup01 /dev/sdc1 /dev/sdd1 //добавление новых физических томов в группу # lvconvert -m 1 /dev/volgroup01/volume-new //преобразование обычного тома в зеркальный

Удаление томов и групп

Логические тома перед удалением должны быть отмонтированы.

# vgreduce volgroup00 /dev/sdb1 //удаление физического тома из группы # lvremove /dev/volgroup00/test01 //удаление логического тома # vgremove volgroup00 //удаление группы томов # pvremove /dev/sdc1 //удаление физического тома

Собственно, хочется просто и доступно рассказать про такую замечательную вещь как Logical Volume Management или Управление Логическими Томами.
Поскольку уже давно пользуюсь LVM-ом, расскажу что он значит именно для меня, не подглядывая в мануалы и не выдёргивая цитаты из wiki, своими словами, чтобы было понятно именно тем кто ничего о нем не знает. Постараюсь сразу не рассказывать о всяческих «продвинутых» функциях типа страйпов, снапшотов и т.п.

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

Есть 3 уровня абстракции:
1. PV (Physical Volume) - физические тома (это могут быть разделы или целые «неразбитые» диски)
2. VG (Volume Group) - группа томов (объединяем физические тома (PV) в группу, создаём единый диск, который будем дальше разбивать так, как нам хочется)
3. LV (Logical Volume) - логические разделы, собственно раздел нашего нового «единого диска» ака Группы Томов, который мы потом форматируем и используем как обычный раздел, обычного жёсткого диска.
это пожалуй вся теория. :) теперь практика:
для работы нужны пакеты lvm2 и возможность работать с привелегиями root поэтому:
$ sudo bash
# apt-get install lvm2

Допустим у нас в компе есть жёсткий диск на 40Гб и нам удалось наскрести немного денег и наконец-то купить себе ТЕРАБАЙТНИК! :))) Система уже стоит и работает, и первый диск разбит одним разделом (/dev/sda1 как /), второй - самый большой, который мы только подключили - вообще не разбит /dev/sdb…
Предлагаю немножко разгрузить корневой диск, а заодно ускорить (новый диск работает быстрее старого) и «обезопасить» систему с помощью lvm.
Можно делать на втором диске разделы и добавлять их в группы томов (если нам нужно несколько групп томов),
а можно вообще не делать на диске разделы и всё устройство сделать физическим разделом (PV)

Root@ws:~# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

Создаём группу томов с говорящим названием, например по имени машины «ws», чтобы когда мы перетащим данный диск на другую машину небыло конфликтов с именами групп томов:

Root@ws:~# vgcreate ws /dev/sdb

Желательно внести с корневого раздела такие папки как /usr /var /tmp /home, чтобы не дефрагментировать лишний раз корневой раздел и ни в коем случае его не переполнить, поэтому создаём разделы:

Root@ws:~# lvcreate -n usr -L10G ws # здесь мы создаём раздел с именем «usr», размером 10Gb
Logical volume «usr» created
по аналогии делаем то же для /var, /tmp, /home:
root@ws:~# lvcreate -n var -L10G ws
root@ws:~# lvcreate -n tmp -L2G ws
root@ws:~# lvcreate -n home -L500G ws
у нас ещё осталось немного свободного места в группе томов (например для будущего раздела под бэкап)
посмотреть сколько именно можно командой:
root@ws:~# vgdisplay
информацию по созданным логическим томам
root@ws:~# lvdisplay
информацию по физическим томам
root@ws:~# pvdisplay

Разделы что мы создали появятся в папке /dev/[имя_vg]/, точнее там будут ссылки на файлы,
lrwxrwxrwx 1 root root 22 2009-08-10 18:35 swap -> /dev/mapper/ws-swap
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 tmp -> /dev/mapper/ws-tmp
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 usr -> /dev/mapper/ws-usr
lrwxrwxrwx 1 root root 21 2009-08-10 18:35 var -> /dev/mapper/ws-var
и т.д…

Дальше lvm уже почти кончается… форматируем наши разделы в любимые файловые системы:
root@ws:~# mkfs.ext2 -L tmp /dev/ws/tmp
root@ws:~# mkfs.ext4 -L usr /dev/ws/usr
root@ws:~# mkfs.ext4 -L var /dev/ws/var
root@ws:~# mkfs.ext4 -L home /dev/ws/home

Кстати, не плохо было бы сделать раздел подкачки:
root@ws:~# lvcreate -n swap -L2G ws
root@ws:~# mkswap -L swap /dev/ws/swap
root@ws:~# swapon /dev/ws/swap

Создаём папку и подключая по очереди новообразовавшиеся тома, копируем в них нужное содержимое:
root@ws:~# mkdir /mnt/target
root@ws:~# mount /dev/ws/home /mnt/target
копируем туда всё из папки /home своим любимым файловым менеджером (с сохранением прав доступа), например так;):
root@ws:~# cp -a /home/* /mnt/target/
root@ws:~# umount /mnt/target/
кстати, для папки temp необходимо только поправить права, копировать туда что-либо необязательно:
root@ws:~# mount /dev/ws/tmp /mnt/target && chmod -R a+rwx /mnt/target && umount /mnt/target/
добавляем нужные строчки в /etc/fstab, например такие:
/dev/mapper/ws-home /home ext4 relatime 0 2
/dev/mapper/ws-tmp /tmp ext2 noatime 0 2
/dev/mapper/ws-swap none swap sw 0 0
и перезагружаемся… (продвинутые господа могут обойтись без перезагрузки;))

На вкусное, хочу предложить более продвинутую штуку:
допустим у нас есть система с разделом на LVM, а жёсткий диск начал сбоить, тогда мы можем без перезагрузки переместить всю систему на другой жёсткий диск/раздел:

# On-line добавление/удаление жёстких дисков с помощью LVM (пример)

Root@ws:~# pvcreate /dev/sda1 # наш эмулятор сбойного диска
Physical volume "/dev/sda1" successfully created

Root@ws:~# pvcreate /dev/sdb1 # наш эмулятор спасательного диска
Physical volume "/dev/sdb1" successfully created

Root@ws:~# vgcreate vg0 /dev/sda1 # создаю группу томов vg0
Volume group «vg0» successfully created

Root@ws:~# lvcreate -n test -L10G vg0 #создаю раздел для «важной» инфы
Logical volume «test» created

Root@ws:~# mkfs.ext2 /dev/vg0/test # создаю файловую систему на разделе
root@ws:~# mount /dev/mapper/vg0-test /mnt/tmp/ #монтирую раздел
… # заполняю его информацией, открываю на нем несколько файлов и т.п.

Root@ws:~# vgextend vg0 /dev/sdb1 # расширяю нашу групу томов на «спасательный» диск
Volume group «vg0» successfully extended

Root@work:~# pvmove /dev/sda1 /dev/sdb1 #передвигаю содержимое с «умирающего» диска на «спасательный»
/dev/sda1: Moved: 0.9%
/dev/sda1: Moved: 1.8%

/dev/sda1: Moved: 99.7%
/dev/sda1: Moved: 100.0%

Root@work:~# vgreduce vg0 /dev/sda1 # убираю «умирающий» диск из группы томов.
Removed "/dev/sda1" from volume group «vg0»

Итого:
Я создал логический раздел, отформатировал его, примонтировал и заполнил нужными данными, затем переместил его с одного устройства на другое, при этом раздел остался примонтирован и данные всё время оставались доступны!
Подобным образом мне удавалось без перезагрузки перенести всю систему с умирающего диска на рэид-массив. :)

P.S. Прошу простить за опечатки, меня постоянно отвлекали =))

P.P.S. Ах, да!!! Самое главное и самый большой минус LVM - он не читается grub"ом
поэтому раздел /boot должен находиться вне LVM на отдельном разделе жёсткого диска,
иначе система не загрузится.



Загрузка...