Настройка и управление LVM разделами в Linux
LVM (Logical Volume Manager) – подсистема операционных систем Linux, позволяющая использовать разные области физического жесткого диска или разных жестких дисков как один логический том. LVM встроена в ядро Linux и реализуется на базе device mapper.
Главные преимущества LVM – высокий уровень абстракции от физических дисков, гибкость и масштабируемость. Вы можете на лету изменять размер логического тома, добавлять (и удалять) новые диски. Для LVM томов поддерживается зекалирование, снапшоты (persistent snapshot) и striping (расслоение данных между несколькими дисками с целью увеличения производительности).
В данной статье мы рассмотрим использование LVM разделов на примере Linux CentOS 8, покажем процесс объединения двух дисков в одну группу LVM, посмотрим как создавать группы, тома, монтировать, расширять и уменьшать размер LVM разделов.
Прежде всего нужно разобраться с уровнями дисковых абстракций LVM.
- Physical Volume (PV) – физический уровень. Физические диски инициализируются для использования в LVM.
- Volume Group (VG) – уровень группы томов. Инициализированные диски объединяются в логические группы с именем.
- Logical Volume (LV) — создается логический том на группе томов, на котором размещается файловая система и данные.
Установка утилиты lvm2
Чтобы начать работу с LVM, нужно установить утилиту lvm2. Выполним следующие команды:
apt-get install lvm2 — для Ubuntu, Mint, Debian
yum install lvm2 – для Centos, Red-Hat, Fedora
В разных версиях Linux отличается только способ установки утилиты lvm2 (установка через yum/dnf или apt-get), дальнейшие команды для работы с LVM, одинаковы.
Создание LVM разделов
Итак, у нас имеется виртуальная машина KVM, к которой подключены два дополнительных диска. Проверим, что они доступны в системе, используя команду:
Как вы видите, у меня доступны два диска /dev/vdb и /dev/vdc .
При настройке LVM на своем виртуальном или физическом сервере, используйте свою маркировку дисков.
Чтобы диски были доступны для LVM, их нужно пометить (инициализировать) утилитой pvcreate:
pvcreate /dev/vdb /dev/vdc
Теперь, чтобы убедиться, что данные диски можно использовать для LVM, введите команду pvdisplay:
Как видим, оба диска отображаются. Разберем информацию из вывода команды:
- PV Name – имя диска или раздела
- VG Name – группа томов, в которую данный диск входит (мы пока группу не создали)
- PV Size – размер диска или размера
- Allocatable – распределение по группам. В нашем случае распределения не было, поэтому указано NO
- PE Size – размер физического фрагмента. Если диск не добавлен ни в одну группу, значение всегда будет 0
- Total PE – количество физических фрагментов
- Free PE — количество свободных физических фрагментов
- Allocated PE – распределенные фрагменты
- PV UUID – идентификатор раздела
С помощью команды pvscan вы можете просканировать диски на предмет PV.
Следующий этап – создание группы томов. Для создания групп томов используется команда vgcreate. Чтобы объединить ранее помеченные диски, воспользуемся командой:
# vgcreate test /dev/vdb /dev/vdc
Чтобы проверить результат введите vgdisplay:
Как видим, диски объединены в группу test и VG Size показывает общий размер дисков.
Разберем информацию из листинга команды vgdisplay:
- VG Name – группа томов, в которую данный диск входит.
- Format – версия подсистемы lvm, которая используется для создание группы (в нашем случае версия 2)
- Metadata Areas – область метаданных
- VG Access – уровень доступа к группе логических томов
- VG Size – общий объем дисков, которые входят в группу
- PE Size — размер физического фрагмента
- Alloc PE / Size – распределенное пространство(количество и объем фрагментов)
- VG UUID – идентификатор группы
После того, как мы создали общую группу для дисков, мы можем создать логический том на этой группы. При создании тома, используется команда lvcreate.
Чтобы в вашей группе создать логический том определенного размера и именем, используйте команду:
# lvcreate -L 5G test
Как видим из листинга, в группе test был создан логический том с именем lvol0 и размером 5G.
Если вы хотите сами задать имя, используйте флаг -n:
# lvcreate -L 5G -n test1 test
Несколько примеров для создания логических томов с разными размерами:
lvcreate -l 40%VG test – 40% от дискового пространства группы test
lvcreate -l 100%FREE test – использовать все свободное пространство группы test
Чтобы вывести информацию о логическом томе, используйте lvdisplay:
Так же разберем листинг данной команды:
- LV Path – путь к устройству логического тома (к диску или разделу)
- LV Name – имя логического тома
- VG Name – имя группы томов
- LV UUID – идентификатор логического тома
- LV Write Access – уровень доступа к логическому тому
- LV Creation host, time — информация о хосте, дата когда был создан логический том
- LV Size – размер диска, доступный для использования логическому тому
- Current LE – количество логических фрагментов
LVM: создание файловой системы, монтирование логического тома
Чтобы создать файловую систему на логическом томе, воспользуйтесь утилитой mkfs:
Создадим файловую систему ext4 на LVM томе:
Файловая система была создана без ошибок.
Теперь создадим тестовую директорию и примонтируем логический том к данной директории:
# mkdir /var/www/home
# mount /dev/test/test1 /var/www/home/
Как видите, все прошло без ошибок и теперь директория /var/www/home существует как отдельный раздел.
Чтобы логический том монтировался при загрузке системы, нужно добавить его в fstab и назначить директорию для монтирования.
Откроем файл:
nano /etc/fstab
И добавим в него следующую информацию:
После чего примонтировать том можно будет через mount -a:
Чтобы проверить общую информацию по дискам, разделам и томам, введите команду lsblk:
Как видим, наш созданный том отображается, и указана директория к которой он примонтирован.
Команда lvmdiskscan позволяет просканировать доступные диски, показывает их размер и принадлежность к LVM.
Увеличение логического тома LVM
Чтобы добавить дополнительный диск к группе томов, нужно воспользоваться уже знакомой схемой:
pvcreate /dev/нашдиск — инициализация диска для lvm
vgextend test /dev/нашдиск — добавление диска в группу томов
Чтобы расширить логический том, воспользуйтесь следующей схемой:
lvextend -L10G /dev/test/test1
Данным способом вы расширите раздел на 10 Гб.
Еще несколько примеров расширения LVM раздела:
lvextend -L+10G /dev/test/test1 — добавите 10 Гб к вашему тому
lvextend -l +100%FREE /dev/test/test1 — выделите все нераспределенное пространство в группе test
Осталось увеличить раздел файловой системы:
resize2fs /dev/test/test1 – для ext4
xfs_growfs /dev/test/test1 – для xfs
Уменьшение LVM томов
LVM позволяют уменьшать размер тома. Но для безопасности умеьшения размера раздела его нужно отключить.
Отмонтируем том от директории:
Выполним проверку диска:
e2fsck -fy /dev/test/test1
Уменьшим раздел файловой системы на 4 Гб:
# resize2fs /dev/test/test1 4G
# lvreduce -L-4G /dev/test/test1
Теперь уменьшим размер самого LVM тома:
lvreduce -L-4G /dev/test/test1
После чего, нужно примонтировать том обратно и проверить текущий размер:
Как видим, размер уменьшился до 4 Гб.
Удаление LVM групп и томов
Для удаления LVM томов, используется команда lvremove:
Чтобы удалить группу логических томов, используйте:
Убрать метки с LVM дисков:
# pvremove /dev/vdb /dev/vdc
Создание зеркальных томов LVM
LVM позволяет создать зеркальные тома для повышения отказоустойчивости хранения данных. В LVM зеркале данные одновременно хранятся на двух (или более) физических дисках (подобие RAID-1). Процедура создания зеркального тома в LVM.
- Инициализация дисков: pvcreate /dev/sd
- Создаем LVM группу: vgcreate mirror1 /dev/sd
- Создадим зеркальный LVM том: lvcreate -L 5g -m1 -n lvMirr1 VGmirror1
Инструменты LVM очень удобны для работы, с помощью них можно легко управлять томами, нарезать их на нужные вам размеры и с легкостью использовать под свои нужды. В данной статье я постарался затронуть все основные моменты в работе с LVM.
Источник
LVM — это просто!
Собственно, хочется просто и доступно рассказать про такую замечательную вещь как 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)
# pvcreate /dev/sdb
Physical volume «/dev/sdb» successfully created
Создаём группу томов с говорящим названием, например по имени машины «ws», чтобы когда мы перетащим данный диск на другую машину небыло конфликтов с именами групп томов:
# vgcreate ws /dev/sdb
Volume group «vg0» successfully created
желательно внести с корневого раздела такие папки как /usr /var /tmp /home, чтобы не дефрагментировать лишний раз корневой раздел и ни в коем случае его не переполнить, поэтому создаём разделы:
# 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:
разделы что мы создали появятся в папке /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:
создаём папку и подключая по очереди новообразовавшиеся тома, копируем в них нужное содержимое:
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:
На вкусное, хочу предложить более продвинутую штуку:
допустим у нас есть система с разделом на LVM, а жёсткий диск начал сбоить, тогда мы можем без перезагрузки переместить всю систему на другой жёсткий диск/раздел:
# On-line добавление/удаление жёстких дисков с помощью LVM (пример)
# pvcreate /dev/sda1 # наш эмулятор сбойного диска
Physical volume «/dev/sda1» successfully created
# pvcreate /dev/sdb1 # наш эмулятор спасательного диска
Physical volume «/dev/sdb1» successfully created
# vgcreate vg0 /dev/sda1 # создаю группу томов vg0
Volume group «vg0» successfully created
# lvcreate -n test -L10G vg0 #создаю раздел для «важной» инфы
Logical volume «test» created
# mkfs.ext2 /dev/vg0/test # создаю файловую систему на разделе
root@ws:
# mount /dev/mapper/vg0-test /mnt/tmp/ #монтирую раздел
… # заполняю его информацией, открываю на нем несколько файлов и т.п.
# vgextend vg0 /dev/sdb1 # расширяю нашу групу томов на «спасательный» диск
Volume group «vg0» successfully extended
# 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%
# vgreduce vg0 /dev/sda1 # убираю «умирающий» диск из группы томов.
Removed «/dev/sda1» from volume group «vg0»
Итого:
Я создал логический раздел, отформатировал его, примонтировал и заполнил нужными данными, затем переместил его с одного устройства на другое, при этом раздел остался примонтирован и данные всё время оставались доступны!
Подобным образом мне удавалось без перезагрузки перенести всю систему с умирающего диска на рэид-массив. 🙂
Источник