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

Дата публикации: 2024-10-07T13:15:01

Теги: ["lvm"]

⏪ На главную
⏪ В Gemlog

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

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

Работа с томами с помощью 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 можно командой:

pvdisplay

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

  "/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

где

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

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

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

vgcreate vg01 /dev/sdb /dev/sdc

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

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

vgdisplay

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

  --- 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

где:

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

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

lvcreate [опции] <имя группы томов>

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

lvcreate -L 1G vg01
lvcreate -L50 -n lv01 vg01
lvcreate -l 40%VG vg01
lvcreate -l 100%FREE -n lv01 vg01

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

vdisplay

  --- 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

где:

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

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

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

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

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

mkfs.ext4 /dev/vg01/lv01

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

mkfs.xfs /dev/vg01/lv01

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

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

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

mount /dev/vg01/lv01 /mnt

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

vi /etc/fstab
/dev/vg01/lv01  /mnt    ext4    defaults        1 2

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

mount -a

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

df -hT

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

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

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

lsblk

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

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 дисков:

Кратко:

pvs

Подробно:

pvdisplay
pvdisplay /dev/sdb

3. Посмотреть информацию о группах LVM.

Кратко:

vgs

Подробно:

vgdisplay
vgdisplay vg01

4. Посмотреть информацию о логических томах можно также двумя способами — краткая информация:

lvs

Для более подробной информации о логических томах вводим:

lvdisplay
lvdisplay /dev/vg01/lv01

5. Для поиска всех устройств, имеющих отношение к LVM, вводим:

lvmdiskscan

Увеличение томов

Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 4 этапа:

1. Расширение физического тома

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

а) Если добавляем еще один диск.

Инициализируем новый диск:

pvcreate /dev/sdd

Проверяем объем физического тома:

pvdisplay

б) Если увеличиваем дисковое пространство имеющегося диска.

Увеличиваем размер физического диска командой:

pvresize /dev/sda

Проверяем объем физического тома:

pvdisplay

2. Добавление нового диска к группе томов

Независимо от способа увеличения физического тома, расширяем группу томов командой:

vgextend vg01 /dev/sdd

Результат можно увидеть командой:

vgdisplay

3. Увеличение логического раздела

Выполняется одной командой.

а) все свободное пространство:

lvextend -l +100%FREE /dev/vg01/lv01
Также можно использовать опцию -r, которая укажет программе сразу расширить файловую систему:
`lvextend -r -l +100%FREE /dev/vg01/lv01`

б) определенный объем:

lvextend -L+30G /dev/vg01/lv01

в) до нужного объема:

lvextend -L500G /dev/vg01/lv01

Результат можно увидеть командой:

lvdisplay

Обратить внимание нужно на опцию LV Size:

  ...
  LV Status              available
  # open                 1
  LV Size                <2,99 GiB
  Current LE             765
  ...

4. Увеличение размера файловой системы

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

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

df -T

Для каждой файловой системы существуют свои инструменты.

ext2/ext3/ext4:

resize2fs /dev/vg01/lv01

XFS:

xfs_growfs /dev/vg01/lv01

Reiserfs:

resize_reiserfs /dev/vg01/lv01

Уменьшение томов

Размер некоторый файловых систем, например, XFS уменьшить нельзя. Из положения можно выйти, создав новый уменьшенный том с переносом на него данных и последующим удалением.

LVM также позволяет уменьшить размер тома. Для этого необходимо выполнить его отмонтирование, поэтому для уменьшения системного раздела безопаснее всего загрузиться с Linux LiveCD. Далее выполняем инструкцию ниже.

Отмонтируем раздел, который нужно уменьшить:

umount /mnt

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

e2fsck -fy /dev/vg01/lv01

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

resize2fs /dev/vg01/lv01 500M

Уменьшаем размер тома:

lvreduce -L-500 /dev/vg01/lv01

На предупреждение системы отвечаем y:

  WARNING: Reducing active logical volume to 524,00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg01/lv01? [y/n]: y

Готово.

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

Удаление томов

Если необходимо полностью разобрать LVM тома, выполняем следующие действия.

Отмонтируем разделы:

umount /mnt

Удаляем соответствующую запись из fstab (в противном случае наша система может не загрузиться после перезагрузки):

vi /etc/fstab
#/dev/vg01/lv01  /mnt    ext4    defaults        1 2

Смотрим информацию о логичеких томах:

lvdisplay

Теперь удаляем логический том:

lvremove /dev/vg01/lv01

На вопрос системы, действительно ли мы хотим удалить логических том, отвечаем да (y):

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

Смотрим информацию о группах томов:

vgdisplay

Удаляем группу томов:

vgremove vg01

Убираем пометку с дисков на использование их для LVM:

pvremove /dev/sd{b,c,d}

В итоге мы получим:

  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.

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

С помощью LVM мы может создать зеркальный том — данные, которые мы будем на нем сохранять, будут отправляться на 2 диска. Таким образом, если один из дисков выходит из строя, мы не потеряем свои данные.

Зеркалирование томов выполняется из группы, где есть, минимум, 2 диска.

1. Сначала инициализируем диски:

pvcreate /dev/sd{d,e}

2. Создаем группу:

vgcreate vg02 /dev/sd{d,e}

3. Создаем зеркальный том:

lvcreate -L200 -m1 -n lv-mir vg02

В итоге:

lsblk

… мы увидим что-то на подобие:

sdd                       8:16   0    1G  0 disk
  vg02-lv--mir_rmeta_0  253:2    0    4M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
  vg02-lv--mir_rimage_0 253:3    0  200M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
sde                       8:32   0    1G  0 disk
  vg02-lv--mir_rmeta_1  253:4    0    4M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm
  vg02-lv--mir_rimage_1 253:5    0  200M  0 lvm
    vg02-lv--mir        253:6    0  200M  0 lvm

Работа со снапшотами

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

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

Создание для не XFS:

lvcreate -L500 -s -n sn01 /dev/vg01/lv01

Создание для XFS:

xfs_freeze -f /mnt; lvcreate -L500 -s -n sn01 /dev/vg01/lv01; xfs_freeze -u /mnt

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

lvs

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

LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lv01 vg01 owi-aos---   1,00g
sn01 vg01 swi-a-s--- 500,00m      lv01   2,07

Также можно посмотреть изменения в томах командой:

lsblk

Мы должны увидеть что-то подобное:

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 

С этого момента все изменения пишутся в vg01-sn01-cow, а vg01-lv01-real фиксируется только для чтения и мы может откатиться к данному состоянию диска в любой момент.

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

mkdir /tmp/snp

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

mount /dev/vg01/sn01 /tmp/snp

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

mount -o nouuid,ro /dev/vg01/sn01 /tmp/snp

Для выполнения отката до снапшота, выполняем команду:

lvconvert --merge /dev/vg01/sn01

Импорт диска из другой системы

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

Если есть возможность, сначала нужно на старом компьютере отмонтировать том и сделать его экспорт:

umount /mnt

Деактивируем группу томов:

vgchange -an vg_test

Делаем экспорт:

vgexport vg_test

После переносим диск на новый компьютер.

На новой системе сканируем группы LVM следующей командой:

pvscan

... система отобразит все LVM-тома (подключенные и нет), например:

  PV /dev/sdb    VG vg_test         lvm2 [1020,00 MiB / 0    free]
  PV /dev/sda5   VG ubuntu-vg       lvm2 [11,52 GiB / 0    free]
  Total: 2 [12,52 GiB] / in use: 2 [12,52 GiB] / in no VG: 0 [0   ]

В моем примере новый диск с группой vg_test — будум импортировать его. Вводим команду:

vgimport vg_test

Возможны два варианта ответа:

1) если мы экспортировали том:

Volume group "vg_test" successfully imported

2) если не экспортировали:

Volume group "vg_test" is not exported

Так или иначе, группа томов должна появиться в нашей системе — проверяем командой:

vgdisplay

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

  --- Volume group ---
  VG Name               vg_test
  System ID             
  Format                lvm2
  ...

Активируем его:

vgchange -ay vg_test

Готово. Для монтирования раздела, смотрим его командой:

lvdisplay

... и монтируем в нужный каталог, например:

mount /dev/vg_test/lvol0 /mnt

Завершение

Вот и всё. Вы узнали несколько основных и важных использования LVM в ОС Linux.

Если вам понравился этот пост о LVM, поделитесь им с друзьями или оставьте комментарий ниже.