Рассмотрим два варианта добавления физических дисков в гипервизоре Proxmox.
После физического подключения диска к серверу необходимо получить информацию об аппаратной части в Proxmox, а точнее проверить наличие диска (рис.1). Чтобы узнать информацию о всех блочных устройствах воспользуемся командой «lsblk»
1. Создаем раздел на новом диске (В первый раз будет предложено создать файловую систему gpt):
cfdisk /dev/sdb
> New -> (Выбираем объем раздела)
> Primary — Выбираем тип раздела
> Write -> «yes» — Сохраняем настройки (рис.4)
> Quit
2. Форматируем новый раздел в формат «ext4»
mkfs.ext4 /dev/sdb1
3. Чтобы подключить диск, создадим новую папку (можно задать любое имя папки и точку монтирования, мы выбрали «SATA2»):
mkdir /var/lib/SATA2
4. Монтируем диск в новую папку:
mount -t ext4 /dev/sdb1 /var/lib/SATA2/
5. Добавляем новый диск в fstab, чтобы он автоматически монтировался после перезагрузки компьютера.
7. Подключаемся к гипервизору через web-интерфейс. Чтобы добавить новую директорию, проходим по пути: Datacenter> Storage> Add> Directory (рис.5). В открывшемся окне (рис.6), указываем следующие параметры: «ID» — имя хранилища, «Directory» — путь к новой папке, «Content» — что будет храниться на новом диске.
Рассмотрим второй вариант подключения диска в качестве LVM (LVM-thin) менеджер логических томов в области нового диска, который может хранить образы дисков виртуальных машин и контейнеров.
Повторяем действия «1.» и «2.» из начала этой статьи
3. Создаем том, следующей командой:
pvcreate /dev/sdb1
4. Создаем группу тома (мы выбрали название «newdrive»):
vgcreate newdrive /dev/sdb1
5. Теперь добавляем LVM в Proxmox. Проходим по пути: Datacenter> Storage> Add> LVM. В открывшемся окне указываем следующие параметры: «ID» — имя хранилища, «Volume Group» — выбираем «newdrive» (группа тома). В итоге получаем хранилище LVM .
В статье описаны основные моменты использования LVM для организации дисковой системы в Linux. Она поможет как чайникам разобраться с принципами ее работы, так и уже знающим LVM в качестве шпаргалки.
Используемые команды одинаково подойдут как для систем Red Hat / CentOS, так и Debian / Ubuntu.
Уровни абстракции
Работа с томами с помощью LVM происходит на 3-х уровнях абстракции:
Физический уровень (PV). Сначала диск инициализируется командой pvcreate — в начале диска создается дескриптор группы томов. При этом важно заметить, что диск не обязательно должен быть физическим — мы можно отметить на использование обычный раздел диска.
Группа томов (VG). С помощью команды vgcreate создается группа томов из инициализированных на предыдущем этапе дисков.
Логический том (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
* где
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 — размер физического фрагмента (экстента).
Последний этап — создание логического раздела их группы томов командой 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 -n lv01 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. Для общего представления дисков, разделов и томов вводим:
* как видим, команда отображает корневое блочное устройство, какие разделы из него сделаны и в какие логические тома организованы из некоторых из разделов.
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
* в данном примере мы инициализировали диск sdd.
Проверяем объем физического тома:
pvdisplay
б) Если увеличиваем дисковое пространство имеющегося диска.
Увеличиваем размер физического диска командой:
pvresize /dev/sda
* где /dev/sda — диск, который был увеличен.
Проверяем объем физического тома:
pvdisplay
2. Добавление нового диска к группе томов
Независимо от способа увеличения физического тома, расширяем группу томов командой:
vgextend vg01 /dev/sdd
* данная команда расширит группу vg01 за счет добавленого или расширенного диска sdd.
Результат можно увидеть командой:
vgdisplay
3. Увеличение логического раздела
Выполняется одной командой.
а) все свободное пространство:
lvextend -l +100%FREE /dev/vg01/lv01
* данной командой мы выделяем все свободное пространство группы томов vg01 разделу lv01.
б) определенный объем:
lvextend -L+30G /dev/vg01/lv01
* данной командой мы добавляем 30 Гб от группы томов vg01 разделу lv01.
в) до нужного объема:
lvextend -L500G /dev/vg01/lv01
* данной командой мы доводим наш раздел до объема в 500 Гб.
Результат можно увидеть командой:
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
* где /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
* если система вернет ошибку Logical volume contains a filesystem in use, необходимо убедиться, что мы отмонтировали том.
Смотрим информацию о группах томов:
vgdisplay
Удаляем группу томов:
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 диска.
* как видим, на двух дисках у нас появились разделы по 200 Мб.
Работа со снапшотами
Снимки диска позволят нам откатить состояние на определенный момент. Это может послужить быстрым вариантом резервного копирования. Однако нужно понимать, что данные хранятся на одном и том же физическом носителе, а значит, данный способ не является полноценным резервным копированием.
Создание снапшотов для тома, где уже используется файловая система XFS, имеет некоторые нюансы, поэтому разберем разные примеры.
Создание для не XFS:
lvcreate -L500 -s -n sn01 /dev/vg01/lv01
* данная команда помечает, что 500 Мб дискового пространства устройства /dev/vg01/lv01 (тома lv01 группы vg01) будет использоваться для snapshot (опция -s).
С этого момента все изменения пишутся в 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
* предположим, что диск примонтирован в /mnt.
Деактивируем группу томов:
vgchange -an vg_test
* в данном примере наша группа называется vg_test.
Делаем экспорт:
vgexport vg_test
После переносим диск на новый компьютер.
На новой системе сканируем группы LVM следующей командой:
pvscan
… система отобразит все LVM-тома (подключенные и нет), например:
Предположим, что у нас есть 2 подключенных к серверу диска без таблиц разделов на них. (/dev/sdb и /dev/sdc) Мы хотим создать RAID-1 зеркало с LVM на нем. Также, в качестве OS используется CentOS 7.
RAID
Для управления программным RAID массивом нам понадобится утилита mdadm, установим ее:
/dev/md0 — устройство, которое будет создано (массив).
Создадим таблицу разделов
# fdisk /dev/md0
n — позволит создать новую таблицу разделов.
После этого стоит не забыть про «change a partition’s system id» t, выбираем LVM (8e).
Также, не забудем записать внесенные изменения на диск: w.
LVM
Процесс разбит на несколько этапов описанных ниже: — Создать LVM physical volume — Создать LVM volume group — Cоздать логический раздел — Создать файловую систему на разделе
Создадим LVM physical volume
# pvcreate /dev/md0p1
Создадим LVM volume group
# vgcreate md0_vg /dev/md0p1
Создадим logical volume
# lvcreate -l 100%FREE -n md0_lv md0_vg
Вы можете воспользоваться командой lvs, чтобы получить информация о логическом разделе.
Cоздадим файловую систему на разделе
# mkfs.ext4 /dev/md0_vg/md0_lv
fstab
Чтобы не монтировать каждый раз руками наш раздел, добавим запись о нем в fstab.
Сначала получим UUID раздела следующим образом:
# lsblk -o NAME,UUID
Добавим строку следующего формата в /etc/fstab Вывод будет примерно такой
Где: — <device> — описывает устройство которое будет примонтировано — <dir> — директория в которую будет примонтировано устройство — <type> — файловая система — <options> — опции которые будут переданы в mount — <dump> — нужно ли делать dump файловой системы — <fsck> — определяет порядок в котором fsck будет проверять FS. 0 — отключает проверку
Проверим конфигурацию fstab и примонтируем все разделы указанные в нем:
# mount -a
Выполнив df -h мы должны увидеть, что наш раздел успешно примонирован и им можно пользоваться.