Введение
В этой лабораторной работе вы научитесь настраивать и управлять современными системами хранения данных в среде Linux. Вы освоите два мощных инструмента: менеджер логических томов (LVM) для гибкого управления дисковым пространством и mdadm для создания программных избыточных массивов независимых дисков (RAID). Данное занятие дает практический опыт построения отказоустойчивой и масштабируемой инфраструктуры через командную строку, используя петлевые устройства (loop devices) для имитации физических дисков.
Вы начнете с инициализации физических томов LVM и создания группы томов. Затем вы создадите, отформатируете, примонтируете и измените размер логического тома, чтобы понять принцип его динамической работы. После этого вы перейдете к сборке и монтированию массива RAID 1 (зеркалирование) для обеспечения избыточности данных. В завершение работы вы обеспечите сохранность этих конфигураций после перезагрузки системы, внеся изменения в файлы /etc/fstab и mdadm.conf.
Инициализация LVM с помощью pvcreate и vgcreate
На этом этапе вы начнете работу с менеджером логических томов (LVM). LVM — это мощный инструмент для управления устройствами хранения в Linux. Он добавляет уровень абстракции между физическими жесткими дисками и файловыми системами, что позволяет гибко изменять размеры томов «на лету».
Основные компоненты LVM:
- Физические тома (Physical Volumes, PV): Это ваши блочные устройства, такие как разделы жесткого диска или, в нашем случае, имитируемые диски.
- Группы томов (Volume Groups, VG): Это пулы хранения, созданные путем объединения одного или нескольких физических томов.
- Логические тома (Logical Volumes, LV): Это «виртуальные разделы», которые вы создаете из пространства, доступного в группе томов. Именно на них создаются файловые системы.
Для начала убедимся, что необходимые инструменты, lvm2 и mdadm, установлены в системе.
sudo apt-get update && sudo apt-get install -y lvm2 mdadm
Поскольку в данной среде у нас нет свободных физических дисков, мы имитируем их с помощью петлевых устройств (loop devices). Такое устройство позволяет работать с обычным файлом как с блочным устройством. Создадим в каталоге проекта два файла по 256 МБ, которые будут служить образами дисков.
truncate -s 256M disk1.img disk2.img
Теперь проверьте, что файлы созданы и имеют правильный размер.
ls -lh
Вы должны увидеть результат, похожий на этот:
total 0
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk1.img
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk2.img
Затем свяжите эти файлы образов с петлевыми устройствами. Мы будем использовать /dev/loop20 и /dev/loop21.
sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img
Теперь, когда у нас есть «диски» (/dev/loop20 и /dev/loop21), мы можем инициализировать их как физические тома LVM с помощью команды pvcreate.
sudo pvcreate /dev/loop20 /dev/loop21
Вывод подтверждает успешное создание PV:
Physical volume "/dev/loop20" successfully created.
Physical volume "/dev/loop21" successfully created.
Вы можете просмотреть сводку по физическим томам с помощью pvs или получить подробную информацию через pvdisplay.
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/loop20 lvm2 --- 256.00m 256.00m
/dev/loop21 lvm2 --- 256.00m 256.00m
Когда физические тома готовы, следующим шагом будет создание группы томов с именем labvg, которая объединит пространство обоих PV. Для этого используем команду vgcreate.
sudo vgcreate labvg /dev/loop20 /dev/loop21
В случае успеха вы увидите:
Volume group "labvg" successfully created
Наконец, проверим нашу новую группу томов с помощью vgs для краткого обзора или vgdisplay для деталей.
sudo vgs
Вывод покажет группу labvg общим размером около 512 МБ (по 256 МБ от каждого PV).
VG #PV #LV #SN Attr VSize VFree
labvg 2 0 0 wz--n- 512.00m 512.00m
Вы успешно инициализировали два устройства как физические тома и объединили их в одну группу томов, подготовив почву для создания гибких логических томов.
Создание и монтирование логического тома с помощью lvcreate и mkfs
На этом этапе вы воспользуетесь созданной ранее группой томов labvg для создания логического тома (LV). Логический том в LVM является аналогом обычного раздела диска. После создания его можно отформатировать и примонтировать, чтобы использовать для хранения данных.
Сначала создадим логический том размером 200 МБ с именем lablvm из пула ресурсов labvg. Используем команду lvcreate, указав размер флагом -L и имя флагом -n.
sudo lvcreate -L 200M -n lablvm labvg
Вы увидите подтверждение:
Logical volume "lablvm" created.
Теперь можно просмотреть новый LV с помощью команды lvs, которая выводит список всех логических томов.
sudo lvs
В выводе отобразится ваш новый том lablvm в составе группы labvg.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lablvm labvg -wi-a----- 200.00m
Новый логический том доступен как устройство по пути /dev/labvg/lablvm, но сейчас это «сырое» неразмеченное блочное устройство. Чтобы хранить на нем файлы, необходимо создать файловую систему. Мы воспользуемся командой mkfs.ext4, чтобы отформатировать его в популярную файловую систему ext4.
sudo mkfs.ext4 /dev/labvg/lablvm
Команда выведет подробности о созданной файловой системе:
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: 28796151-bd37-4cae-a17f-071db8795919
Superblock backups stored on blocks:
32768
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
Далее вам понадобится каталог, который будет служить «точкой монтирования». Это пустая папка, через которую файловая система логического тома будет подключена к общему дереву каталогов. Создадим каталог /lablvm в корневой директории.
sudo mkdir /lablvm
Наконец, используйте команду mount, чтобы подключить файловую систему вашего LV (/dev/labvg/lablvm) к точке монтирования (/lablvm).
sudo mount /dev/labvg/lablvm /lablvm
Чтобы убедиться, что том успешно примонтирован, и проверить доступное место, используйте команду df -h (disk free в удобном для чтения формате).
df -h /lablvm
Вывод покажет, что устройство примонтировано и имеет около 200 МБ свободного места.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 172M 24K 158M 1% /lablvm
Вы успешно создали, отформатировали и примонтировали логический том, сделав его готовым к работе.
Изменение размера логического тома LVM с помощью lvresize
На этом этапе вы познакомитесь с одной из самых мощных возможностей LVM: способностью изменять размер логического тома и его файловой системы прямо во время работы, без отключения устройства. Это огромное преимущество перед традиционными статическими разделами.
Сначала еще раз проверим текущий размер примонтированного логического тома с помощью df -h.
df -h /lablvm
Вы увидите, что размер тома составляет примерно 200 МБ.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 194M 2.6M 179M 2% /lablvm
Теперь представьте, что вашему приложению, работающему в /lablvm, не хватает места. Вам нужно увеличить емкость с 200 МБ до 300 МБ. Это можно сделать командой lvresize. Мы будем использовать флаг -r, который крайне важен: он указывает lvresize автоматически изменить размер файловой системы внутри тома. Без него файловая система осталась бы прежнего размера, и новое пространство было бы недоступно для использования.
sudo lvresize -r -L 300M /dev/labvg/lablvm
Вывод покажет, что и логический том, и файловая система меняют размер.
Size of logical volume labvg/lablvm changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume labvg/lablvm successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/labvg-lablvm is mounted on /lablvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/labvg-lablvm is now 76800 (4k) blocks long.
Снова проверьте дисковое пространство с помощью df -h, чтобы подтвердить изменения.
df -h /lablvm
Теперь объем тома составляет около 300 МБ.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 293M 2.6M 275M 1% /lablvm
Иногда требуется не устанавливать новый абсолютный размер, а просто добавить определенное количество места. Давайте добавим еще 100 МБ. Это можно сделать, поставив знак + перед числом. В данном примере мы продолжим использовать метод указания абсолютного размера для надежности.
sudo lvresize -r -L 400M /dev/labvg/lablvm
Если во время операций изменения размера возникнет ошибка файловой системы, не волнуйтесь — такое иногда случается при быстрых последовательных изменениях. В этом случае можно восстановить работу, отмонтировав систему, запустив проверку и примонтировав обратно:
## Если возникла ошибка файловой системы, выполните эти команды:
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm
Наконец, выполните df -h в последний раз, чтобы увидеть итоговый результат.
df -h /lablvm
Теперь объем тома составляет около 400 МБ, а свободное место в группе томов labvg соответственно уменьшилось.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
Вы успешно дважды изменили размер работающего тома LVM, продемонстрировав, как легко управлять распределением хранилища без простоя системы.
Сборка и монтирование массива RAID 1 с помощью mdadm
На этом этапе мы переключим внимание с LVM на другую важную технологию хранения: RAID (избыточный массив независимых дисков). Вы воспользуетесь утилитой mdadm для создания массива RAID 1, также известного как «зеркало». В конфигурации RAID 1 данные записываются идентично на два диска, обеспечивая избыточность. Если один диск выйдет из строя, данные останутся в сохранности на другом.
Сначала нам понадобятся еще два имитируемых диска. Создадим два новых файла образов по 256 МБ, disk3.img и disk4.img, в каталоге ~/project.
truncate -s 256M disk3.img disk4.img
Затем свяжите эти новые файлы с неиспользуемыми петлевыми устройствами /dev/loop22 и /dev/loop23.
sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img
Теперь вы готовы к сборке RAID 1. Мы используем команду mdadm для создания нового RAID-устройства с именем /dev/md0.
--create /dev/md0: Создает новое RAID-устройство.--level=1: Указывает уровень RAID, в данном случае RAID 1 (зеркалирование).--raid-disks=2: Указывает, что массив будет состоять из двух дисков./dev/loop22 /dev/loop23: Устройства-компоненты массива.
Выполните следующую команду:
sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/loop22 /dev/loop23
Система запросит подтверждение перед продолжением. Введите y и нажмите Enter.
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Вы можете проверить состояние вашего нового RAID-массива, просмотрев файл /proc/mdstat.
cat /proc/mdstat
Вывод покажет, что /dev/md0 активен и использует /dev/loop23 и /dev/loop22. Вы также можете увидеть процесс синхронизации массива (resync), что является нормальным. Массив можно использовать даже во время завершения этого процесса.
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 loop13[1] loop12[0]
261120 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.4% (1088/261120) finish=0.1min speed=21760K/sec
unused devices: <none>
Как и в случае с томом LVM, новому RAID-устройству /dev/md0 нужна файловая система. Отформатируем его в ext4.
sudo mkfs.ext4 /dev/md0
Затем создайте точку монтирования для RAID-массива.
sudo mkdir /labraid
Наконец, примонтируйте RAID-устройство к новому каталогу.
sudo mount /dev/md0 /labraid
Убедитесь, что RAID-массив примонтирован правильно, используя df -h.
df -h /labraid
Вывод подтвердит, что устройство /dev/md0 общим размером около 256 МБ (так как это зеркало) примонтировано и готово к работе.
Filesystem Size Used Avail Use% Mounted on
/dev/md0 249M 2.6M 234M 2% /labraid
Вы успешно создали и примонтировали массив RAID 1, обеспечив избыточность данных для точки монтирования /labraid.
Сохранение настроек монтирования и RAID в /etc/fstab и mdadm.conf
На этом заключительном этапе вы сделаете конфигурации LVM и RAID постоянными. В данный момент, если вы перезагрузите систему, RAID-массив не соберется автоматически, а ни том LVM, ни RAID-массив не будут примонтированы. Чтобы исправить это, нужно обновить два ключевых конфигурационных файла: /etc/mdadm/mdadm.conf для RAID-массива и /etc/fstab для точек монтирования.
Сначала разберемся с RAID-массивом. Системе нужно знать, как пересобрать /dev/md0 при загрузке. Утилита mdadm может сама сгенерировать необходимую строку конфигурации.
Выполните следующую команду, чтобы просканировать активный массив и вывести его параметры:
sudo mdadm --detail --scan
Вывод будет представлять собой одну строку с описанием вашего массива.
ARRAY /dev/md0 metadata=1.2 name=<hostname>:0 UUID=<some-uuid>
Теперь добавим эту конфигурацию в файл настроек mdadm, который находится по адресу /etc/mdadm/mdadm.conf. Мы перенаправим вывод команды сканирования прямо в файл с помощью tee.
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
Вы можете убедиться, что строка добавлена, просмотрев содержимое файла:
cat /etc/mdadm/mdadm.conf
Далее нужно указать системе автоматически монтировать файловые системы при загрузке. Это делается путем добавления записей в /etc/fstab (таблицу файловых систем). Каждая строка в этом файле определяет точку монтирования.
Сначала добавим запись для тома LVM. Мы используем echo для создания строки и tee -a для добавления ее в /etc/fstab от имени суперпользователя.
echo '/dev/labvg/lablvm /lablvm ext4 defaults 0 0' | sudo tee -a /etc/fstab
Теперь сделайте то же самое для точки монтирования RAID-массива.
echo '/dev/md0 /labraid ext4 defaults 0 0' | sudo tee -a /etc/fstab
Проверьте правильность добавления обеих строк, просмотрев последние две строки файла /etc/fstab.
tail -n 2 /etc/fstab
Вы должны увидеть две только что добавленные строки:
/dev/labvg/lablvm /lablvm ext4 defaults 0 0
/dev/md0 /labraid ext4 defaults 0 0
Чтобы проверить правильность записей в /etc/fstab без перезагрузки, можно отмонтировать файловые системы, а затем использовать команду mount -a, которая монтирует всё, что перечислено в /etc/fstab.
Сначала отмонтируйте оба тома:
sudo umount /lablvm
sudo umount /labraid
Теперь выполните mount -a, чтобы система прочитала /etc/fstab и примонтировала всё необходимое.
sudo mount -a
Наконец, убедитесь, что они снова примонтированы, используя df -h.
df -h /lablvm /labraid
Вывод должен показать обе файловые системы примонтированными, как и раньше.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
/dev/md0 249M 2.6M 234M 2% /labraid
Поздравляем! Вы успешно настроили систему на автоматическую сборку RAID-массива и монтирование файловых систем LVM и RAID при загрузке.
Резюме
В этой лабораторной работе вы изучили основы продвинутого управления хранилищем в Linux с использованием LVM и программного RAID. Вы начали с имитации физических дисков с помощью truncate и losetup, затем инициализировали их как физические тома LVM (PV) с помощью pvcreate. Эти PV были объединены в группу томов (VG) с помощью vgcreate. Из этого пула ресурсов вы создали гибкий логический том (LV) с помощью lvcreate, отформатировали его в файловую систему ext4 с помощью mkfs и примонтировали к системе. Ключевая особенность LVM была продемонстрирована путем динамического изменения размера LV с помощью lvresize и расширения файловой системы для использования нового пространства с помощью resize2fs.
Кроме того, вы настроили программный массив RAID 1 (зеркало) с помощью утилиты mdadm для обеспечения избыточности данных. После сборки массива из двух имитируемых дисков вы отформатировали и примонтировали его аналогично тому LVM. Лабораторная работа завершилась обеспечением сохранности этих конфигураций после перезагрузки. Это было достигнуто путем добавления точек монтирования для тома LVM и RAID-массива в /etc/fstab, а также сохранения параметров RAID-массива в /etc/mdadm/mdadm.conf.



