imported>Vix |
imported>Vix |
Строка 1: |
Строка 1: |
| ==LVM==
| | ИСТОЧНИКИ: |
| В статье описаны основные моменты использования LVM для организации дисковой системы в Linux. <br>
| |
| Она поможет как чайникам разобраться с принципами ее работы, так и уже знающим LVM в качестве шпаргалки.
| |
| | |
| Используемые команды одинаково подойдут как для систем Red Hat / CentOS, так и Debian / Ubuntu.
| |
| | |
| Уровни абстракции
| |
| Установка LVM
| |
| Создание разделов
| |
| Инициализация (pvcreate)
| |
| Создание групп (vgcreate)
| |
| Создание логического тома (lvcreate)
| |
| Файловая система и монтирование
| |
| Создание файловой системы
| |
| Монтирование тома
| |
| Просмотр информации об LVM
| |
| Увеличение томов
| |
| Добавление диска к группе
| |
| Увеличение логического тома
| |
| Изменение размера файловой системы
| |
| Уменьшение томов
| |
| Удаление томов
| |
| Зеркалирование
| |
| Снапшоты
| |
| Работа с LVM в Windows
| |
| Уровни абстракции
| |
| | |
| Работа с томами с помощью LVM происходит на 3-х уровнях абстракции:
| |
| | |
| Физический уровень (PV). Сначала диск инициализируется командой pvcreate — в начале диска создается дескриптор группы томов. При этом важно заметить, что диск не обязательно должен быть физическим — мы можно отметить на использование обычный раздел диска.
| |
| Группа томов (VG). С помощью команды vgcreate создается группа томов из инициализированных на предыдущем этапе дисков.
| |
| Логический том (LV). Группы томов нарезаются на логические тома командой lvcreate.
| |
| | |
| Схематично, уровни можно представить так:
| |
| | |
| Схематичное представление уровней абстракции LVM
| |
| Установка
| |
| | |
| Для работы с 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
| |
| | |
| * где
| |
| | |
| PV Name — имя диска.
| |
| VG Name — группа томов, в которую входит данный диск (в нашем случае пусто, так как мы еще не добавили его в группу).
| |
| PV Size — размер диска.
| |
| Allocatable — распределение по группам. Если NO, то диск еще не задействован и его необходимо для использования включить в группу.
| |
| PE Size — размер физического фрагмента (экстента). Пока диск не добавлен в группу, значение будет 0.
| |
| Total PE — количество физических экстентов.
| |
| Free PE — количество свободных физических экстентов.
| |
| Allocated PE — распределенные экстенты.
| |
| PV UUID — идентификатор физического раздела.
| |
| | |
| 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
| |
| | |
| * где:
| |
| | |
| VG Name — имя группы.
| |
| Format — версия подсистемы, используемая для создания группы.
| |
| Metadata Areas — область размещения метаданных. Увеличивается на единицу с созданием каждой группы.
| |
| VG Access — уровень доступа к группе томов.
| |
| VG Size — суммарный объем всех дисков, которые входят в группу.
| |
| PE Size — размер физического фрагмента (экстента).
| |
| Total PE — количество физических экстентов.
| |
| Alloc PE / Size — распределенное пространство: колическтво экстентов / объем.
| |
| Free PE / Size — свободное пространство: колическтво экстентов / объем.
| |
| VG UUID — идентификатор группы.
| |
| | |
| 3. Создание логических томов
| |
| | |
| Последний этап — создание логического раздела их группы томов командой lvcreate. Ее синтаксис:
| |
| | |
| 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 vg01
| |
| | |
| * использовать все свободное пространство группы vg01 при создании логического тома.
| |
| * также можно использовать %PVS — процент места от физического тома (PV); %ORIGIN — размер оригинального тома (применяется для снапшотов).
| |
| | |
| Посмотрим информацию о созданном томе:
| |
| | |
| lvdisplay
| |
| | |
| --- 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 вводим:
| |
| | |
| mkfs.ext4 /dev/vg01/lv01
| |
| | |
| * vg01 — наша группа томов; lv01 — логический том.
| |
| | |
| Для создания, например, файловой системы xfs вводим:
| |
| | |
| mkfs.xfs /dev/vg01/lv01
| |
| Монтирование
| |
| | |
| Как и в случае с файловой системой, процесс монтирования не сильно отличается от разделов, созданных другими методами.
| |
| | |
| Для разового монтирования пользуемся командой:
| |
| | |
| mount /dev/vg01/lv01 /mnt
| |
| | |
| * где /dev/vg01/lv01 — созданный нами логический том, /mnt — раздел, в который мы хотим примонтировать раздел.
| |
| | |
| Для постоянного монтирования раздела добавляем строку в fstab:
| |
| | |
| vi /etc/fstab
| |
| | |
| /dev/vg01/lv01 /mnt ext4 defaults 1 2
| |
| | |
| * в данном примере мы монтируем при загрузке системы том /dev/vg01/lv01 в каталог /mnt; используется файловая система ext4.
| |
| | |
| Проверяем настройку 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
| |
| Увеличение томов
| |
| | |
| Увеличение размера тома может выполняться с помощью добавления еще одного диска или при увеличении имеющихся дисков (например, увеличение диска виртуальной машины). Итак, процедура выполняется в 3 этапа:
| |
| 1. Добавление нового диска к группе томов
| |
| | |
| Данный этап мы пропускаем, если расширение тома выполняется без добавления нового диска.
| |
| | |
| Инициализируем новый диск:
| |
| | |
| pvcreate /dev/sdd
| |
| | |
| * в данном примере мы инициализировали диск sdd.
| |
| | |
| Расширяем группу томов:
| |
| | |
| vgextend vg01 /dev/sdd
| |
| | |
| * данная команда расширит группу vg01 за счет добавления диска sdd.
| |
| 2. Увеличение логического раздела
| |
| | |
| Выполняется одной командой:
| |
| | |
| lvextend -l +100%FREE /dev/vg01/lv01
| |
| | |
| * данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.
| |
| | |
| Результат можно увидеть командой:
| |
| | |
| lvdisplay
| |
| | |
| Обратить внимание нужно на опцию LV Size:
| |
| | |
| ...
| |
| LV Status available
| |
| # open 1
| |
| LV Size <2,99 GiB
| |
| Current LE 765
| |
| ...
| |
| 3. Увеличение размера файловой системы
| |
| | |
| Чтобы сама система увидела больший объем дискового пространства, необходимо увеличить размер файловой системы.
| |
| | |
| Посмотреть используемую файловую систему:
| |
| | |
| 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
| |
| | |
| * где /mnt — точка монтирования для раздела.
| |
| | |
| Удаляем соответствующую запись из fstab (в противном случае наша система может не загрузиться после перезагрузки):
| |
| | |
| vi /etc/fstab
| |
| | |
| #/dev/vg01/lv01 /mnt ext4 defaults 1 2
| |
| | |
| * в данном примере мы не удалили, а закомментировали строку монтирования диска.
| |
| | |
| Теперь удаляем логический том:
| |
| | |
| lvremove /dev/vg01/lv01
| |
| | |
| На вопрос системы, действительно ли мы хотим удалить логических том, отвечаем да (y):
| |
| | |
| Do you really want to remove active logical volume vg01/lv01? [y/n]: y
| |
| | |
| * если система вернет ошибку Logical volume contains a filesystem in use, необходимо убедиться, что мы отмонтировали том.
| |
| | |
| Удаляем группу томов:
| |
| | |
| vgremove vg01
| |
| | |
| Убираем пометку с дисков на использование их для LVM:
| |
| | |
| pvremove /dev/sd{b,c,d}
| |
| | |
| * в данном примере мы деинициализируем диски /dev/sdb, /dev/sdc, /dev/sdd.
| |
| | |
| В итоге мы получим:
| |
| | |
| 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}
| |
| | |
| * в данном примере sdd и sde.
| |
| | |
| 2. Создаем группу:
| |
| | |
| vgcreate vg02 /dev/sd{d,e}
| |
| | |
| 3. Создаем зеркальный том:
| |
| | |
| lvcreate -L200 -m1 -n lv-mir vg02
| |
| | |
| * мы создали том lv-mir на 200 Мб из группы 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
| |
| | |
| * как видим, на двух дисках у нас появились разделы по 200 Мб.
| |
| Работа со снапшотами
| |
| | |
| Снимки диска позволят нам откатить состояние на определенный момент. Это может послужить быстрым вариантом резервного копирования. Однако нужно понимать, что данные хранятся на одном и том же физическом носителе, а значит, данный способ не является полноценным резервным копированием.
| |
| | |
| Создание снапшотов для тома, где уже используется файловая система XFS, имеет некоторые нюансы, поэтому разберем разные примеры.
| |
| | |
| Создание для не XFS:
| |
| | |
| lvcreate -L500 -s -n sn01 /dev/vg01/lv01
| |
| | |
| * данная команда помечает, что 500 Мб дискового пространства устройства /dev/vg01/lv01 (тома lv01 группы vg01) будет использоваться для snapshot (опция -s).
| |
| | |
| Создание для XFS:
| |
| | |
| xfs_freeze -f /mnt; lvcreate -L500 -s -n sn01 /dev/vg01/lv01; xfs_freeze -u /mnt
| |
| | |
| * команда xfs_freeze замораживает операции в файловой системе XFS.
| |
| | |
| Посмотрим список логических томов:
| |
| | |
| 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
| |
| | |
| * поле Origin показывает, к какому оригинальному логическому тому относится LV, например, в данной ситуации наш раздел для снапшотов относится к lv01.
| |
| | |
| Также можно посмотреть изменения в томах командой:
| |
| | |
| 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 volume is inactive after reboot
| |
| * Выполнить:
| |
| vgchange -a n my_volume_group
| |
| [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Cluster_Logical_Volume_Manager/VG_activate.html взято тут]
| |
| [https://unix.stackexchange.com/questions/213027/lvm-volume-is-inactive-after-reboot-of-centos/460835#460835 доп.инфо]
| |
| [https://stackoverflow.com/questions/18042216/how-to-deactivate-a-lvm2-physical-volume-to-remove-the-drive пример stackoverflow.com]
| |
| *[https://habr.com/ru/post/254011/ восстановление LVM]
| |
| | |
| '''ИСТОЧНИК:'''
| |
| <hr> | | <hr> |
| * [https://www.dmosk.ru/instruktions.php?object=lvm Как работать с LVM] | | * [https://ru.opensuse.org/Portal:Kiwi Portal:Kiwi] |
| | |
| =='''ПОЛЕЗНОЕ'''==
| |
| * [https://itproffi.ru/podklyuchenie-diska-lvm-k-drugomu-kompyuteru/ Подключение диска lvm к другому компьютеру]
| |