LVM, часть 2 из 3. Практика
12.09.2023
Теги: CLI • Linux • БлочноеУстройство • Команда • Практика • ФайловаяСистема
LVM или Logical Volume Manager — уровень абстракции над разделами физических дисков, который позволяет создавать логические тома для хранения данных без переразметки этих физических дисков. Программы могут работать с логическими, виртуальными LVM разделами, точно так же как и с обычными.
LVM. Практика
Создание LVM при установке системы
У меня виртуальная машина с тремя жесткими дисками по 8 Гбайт каждый. Установим на нее Ubuntu Server и посмотрим, как в процессе установки системы настроить LVM.
Здесь выбираем второй пункт меню Custom storage layout
Вверху видим подсказку, что нужно сделать, чтобы можно было установить систему. Потом идут файловые системы, которые мы создали — пока пусто. Потом — физические диски, которые были обнаружены. Еще ниже видим предложение создать RAID и/или LVM. Наконец, список уже подготовленных к работе дисков — пока пусто.
По каждому диску можно запросить подробную информацию, например, что он будет представлен в системе как /dev/sda
На диске /dev/sda
создаем два раздела — загрузочный и корневой
Под загрузочный раздел выделяем 500 Мбайт, создаем файловую систему ext4
и монтируем в /boot
Под корневой раздел выделяем все оставшееся место, создаем файловую систему ext4
и монтируем в /
Диски /dev/sdb
и /dev/sdc
используем для создания группы томов — выбираем Create volume group (LVM)
Теперь у нас большой логический диск — создаем два раздела, файловые системы и монтируем в /var
и /home
Все готово, можно продолжать установку
После установки смотрим блочные устройства
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home sdc 8:32 0 8G 0 disk ├─vg--sdb--sdc-lv--var 253:0 0 6G 0 lvm /var └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home
Файловая система /var
физически целиком расположена на диске /dev/sdc
. А вот файловая система /home
— частично на диске /dev/sdb
и частично на диске /dev/sdc
.
_____________ _____________ _____________ | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |_____________| |_____________| |_____________| _ __ ____ _____________________________ | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | |_____________________________| grub, /boot, / _________________ _________ | | | | | /home, 10Гб | |/var, 6Гб| |_________________| |_________|
Просмотр информации о PV, VG, LV
Для просмотра информации о Physical volume (PV), Volume group (VG) и Logical volume (LV) — предназначены команды pvdisplay
, vgdisplay
и lvdisplay
.
$ sudo pvdisplay --- Physical volume --- PV Name /dev/sdc VG Name vg-sdb-sdc PV Size 8,00 GiB / not usable 4,00 MiB Allocatable yes (but full) PE Size 4,00 MiB Total PE 2047 Free PE 0 Allocated PE 2047 PV UUID osZk7P-CP9F-LuK1-7i3F-rP1P-Z5t3-eWKio8 --- Physical volume --- PV Name /dev/sdb VG Name vg-sdb-sdc PV Size 8,00 GiB / not usable 4,00 MiB Allocatable yes (but full) PE Size 4,00 MiB Total PE 2047 Free PE 0 Allocated PE 2047 PV UUID MS0NyP-jk3D-lxFT-lWJQ-O9Y9-D6wj-YWE9cj
Здесь мы видим, что на диске /dev/sdc
есть 2047 экстентов размером 4 Мебибайт каждый — и все они используются, то есть все физические экстенты связаны с логическими экстентами.
$ sudo vgdisplay --- Volume group --- VG Name vg-sdb-sdc System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 15,99 GiB PE Size 4,00 MiB Total PE 4094 Alloc PE / Size 4094 / 15,99 GiB Free PE / Size 0 / 0 VG UUID CEBsRN-KNpO-6uab-6UPl-db10-IpPP-Lie90R
Здесь мы видим, что размер группы томов 15,99 Гибибайт, есть 4094 экстентов размером 4 Мебибайт каждый — и все они используются, то есть все физические экстенты связаны с логическими экстентами.
$ sudo lvdisplay --- Logical volume --- LV Path /dev/vg-sdb-sdc/lv-var LV Name lv-var VG Name vg-sdb-sdc LV UUID Unu5eU-n0tv-yu4V-l7QH-H681-4kN2-9Mxejc LV Write Access read/write LV Creation host, time ubuntu-server, 2023-09-10 11:45:16 +0000 LV Status available # open 1 LV Size 6,00 GiB Current LE 1536 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/vg-sdb-sdc/lv-home LV Name lv-home VG Name vg-sdb-sdc LV UUID AtyQyb-1RTA-dms9-3x0J-PT50-vOZx-pCniTr LV Write Access read/write LV Creation host, time ubuntu-server, 2023-09-10 11:45:17 +0000 LV Status available # open 1 LV Size 9,99 GiB Current LE 2558 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1
Здесь мы видим, что размер логического раздела /dev/vg-sdb-sdc/lv-var
— 6 Гибибайт, есть 1536 логический экстентов (размер логического экстента равен размеру физического экстента).
Создание LVM после установки системы
Для этого добавил еще два диска (4Гб и 2Гб) к виртуальной машине с установленной Ubuntu Server — так что теперь их пять.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home sdc 8:32 0 8G 0 disk ├─vg--sdb--sdc-lv--var 253:0 0 6G 0 lvm /var └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home sdd 8:48 0 4G 0 disk sde 8:64 0 2G 0 disk
Создаем физические тома
$ sudo pvcreate /dev/sdd /dev/sde Physical volume "/dev/sdd" successfully created. Physical volume "/dev/sde" successfully created.
Создаем группу томов
$ sudo vgcreate vg-sdd-sde /dev/sdd /dev/sde Volume group "vg-sdd-sde" successfully created
Теперь можно создавать логические тома. Начнем с самого простого — том с линейным отображением.
$ sudo lvcreate --name lv-backup --size 3G vg-sdd-sde Logical volume "lv-backup" created.
Размер по умолчанию задается в мегабайтах. Необязательный суффикс размера — K
для килобайт, M
для мегабайт, G
для гигабайт, T
для терабайт, P
для петабайт или E
для экзабайт.
Кроме того, размер можно задать с помощью опции --extents
— это число логических экстентов, выделяемых под логический раздел. Число также может быть выражено в процентах от общего размера группы томов с суффиксом %VG
и в процентах от оставшегося свободного места группы томов с суффиксом %FREE
.
$ sudo lvcreate --name lv-backup --extents 50%VG vg-sdd-sde # 50% от общего размера VG
$ sudo lvcreate --name lv-backup --extents 50%FREE vg-sdd-sde # 50% от свободного места VG
Хорошо, один том уже есть, давайте создадим второй — с чередующимся отображением
$ sudo lvcreate --name lv-cache --extents 100%FREE --stripes 2 vg-sdd-sde Using default stripesize 64,00 KiB. Logical volume "lv-cache" created.
Посмотрим, что получилось в итоге
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home sdc 8:32 0 8G 0 disk ├─vg--sdb--sdc-lv--var 253:0 0 6G 0 lvm /var └─vg--sdb--sdc-lv--home 253:1 0 10G 0 lvm /home sdd 8:48 0 4G 0 disk ├─vg--sdd--sde-lv--backup 253:2 0 3G 0 lvm └─vg--sdd--sde-lv--cache 253:3 0 2G 0 lvm sde 8:64 0 2G 0 disk └─vg--sdd--sde-lv--cache 253:3 0 2G 0 lvm
И тут видим любопытную деталь — размер логического тома lv-cache
равен 2Гб, хотя мы задали размер 100%VG
. Наша группа томов состоит из двух дисков размером 4Гб и 2Гб. Под логический том lv-backup
занято 3Гб, значит lv-cache
должен был занять 3Гб.
Это не ошибка — мы ведь создавали логический том с чередующимся отображением, а для чередования нужно место на двух дисках. На диске /dev/sdd
остался только 1Гб — соответственно, на диске /dev/sde
тоже был использован 1Гб. Так что размер логического тома lv-cache
получился 2Гб.
Можем посмотреть более подробно с помощью команды
$ sudo lvdisplay --maps .......... --- Logical volume --- LV Path /dev/vg-sdd-sde/lv-cache LV Name lv-cache VG Name vg-sdd-sde LV UUID QOQoW9-p7Kj-A2B5-HnFv-YHqT-7iG5-tYMW9V LV Write Access read/write LV Creation host, time ubuntu-server-lvm, 2023-09-11 10:54:02 +0000 LV Status available # open 0 LV Size 1,99 GiB Current LE 510 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 512 Block device 253:3 --- Segments --- Logical extents 0 to 509: Type striped Stripes 2 Stripe size 64,00 KiB Stripe 0: Physical volume /dev/sde Physical extents 0 to 254 Stripe 1: Physical volume /dev/sdd Physical extents 768 to 1022 ..........
Хорошо, создадим еще один раздел — не пропадать же месту
$ sudo lvcreate --name lv-config --extents 100%FREE vg-sdd-sde Logical volume "lv-config" created.
Создание файловой системы и монтирование
Чтобы начать использовать созданный том, необходимо создать файловую систему и примонтировать его в какой-нибудь каталог.
Создание файловой системы
Процесс создания файловой системы для LVM-раздела ничем не отличается от работы с любыми другими разделами. Надо только знать, как найти блочное устройство, соответствующее логическому разделу.
$ ls -la /dev/mapper/ total 0 drwxr-xr-x 2 root root 160 сен 11 11:34 . drwxr-xr-x 21 root root 4340 сен 11 11:34 .. lrwxrwxrwx 1 root root 7 сен 11 09:51 vg--sdb--sdc-lv--home -> ../dm-1 lrwxrwxrwx 1 root root 7 сен 11 09:51 vg--sdb--sdc-lv--var -> ../dm-0 lrwxrwxrwx 1 root root 7 сен 11 10:33 vg--sdd--sde-lv--backup -> ../dm-2 lrwxrwxrwx 1 root root 7 сен 11 10:54 vg--sdd--sde-lv--cache -> ../dm-3 lrwxrwxrwx 1 root root 7 сен 11 11:34 vg--sdd--sde-lv--config -> ../dm-4
$ ls -la /dev/vg-sdb-sdc/ total 0 drwxr-xr-x 2 root root 80 сен 11 09:51 . drwxr-xr-x 21 root root 4340 сен 11 11:34 .. lrwxrwxrwx 1 root root 7 сен 11 09:51 lv-home -> ../dm-1 lrwxrwxrwx 1 root root 7 сен 11 09:51 lv-var -> ../dm-0
$ ls -la /dev/vg-sdd-sde/ total 0 drwxr-xr-x 2 root root 100 сен 11 11:34 . drwxr-xr-x 21 root root 4340 сен 11 11:34 .. lrwxrwxrwx 1 root root 7 сен 11 10:33 lv-backup -> ../dm-2 lrwxrwxrwx 1 root root 7 сен 11 10:54 lv-cache -> ../dm-3 lrwxrwxrwx 1 root root 7 сен 11 11:34 lv-config -> ../dm-4
Создаем файловые системы
$ sudo mkfs.ext4 /dev/mapper/vg--sdd--sde-lv--backup mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 786432 4k blocks and 196608 inodes Filesystem UUID: 427a663d-94ee-4403-a560-6226ee64df54 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
$ sudo mkfs.ext4 /dev/mapper/vg--sdd--sde-lv--cache mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 522240 4k blocks and 130560 inodes Filesystem UUID: 23166b9f-e9aa-4eb1-9c3e-6f467fac3bbb Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
$ sudo mkfs.ext4 /dev/mapper/vg--sdd--sde-lv--config mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 262144 4k blocks and 65536 inodes Filesystem UUID: 8e64913a-229b-4516-8b3c-11e2a94c05d3 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done
Автомонтирование раздела
Создаем три директории для монтирования разделов
$ sudo mkdir /mnt/{backup,cache,config}
Редактируем файл /etc/fstab
для монтирования при загрузке
$ sudo nano /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda3 during curtin installation /dev/disk/by-uuid/0f4918c8-c354-411a-8726-18d86bb7c9cc / ext4 defaults 0 1 # /var was on /dev/vg-sdb-sdc/lv-var during curtin installation /dev/disk/by-id/dm-uuid-LVM-CEBsRNKNpO6uab6UPldb10IpPPLie90RUnu5eUn0tvyu4Vl7QHH6814kN29Mxejc /var ext4 defaults 0 1 # /home was on /dev/vg-sdb-sdc/lv-home during curtin installation /dev/disk/by-id/dm-uuid-LVM-CEBsRNKNpO6uab6UPldb10IpPPLie90RAtyQyb1RTAdms93x0JPT50vOZxpCniTr /home ext4 defaults 0 1 # /boot was on /dev/sda2 during curtin installation /dev/disk/by-uuid/35af16c6-4576-45b0-a562-9693ecec5127 /boot ext4 defaults 0 1 /swap.img none swap sw 0 0 /dev/mapper/vg--sdd--sde-lv--backup /mnt/backup ext4 defaults 0 2 /dev/mapper/vg--sdd--sde-lv--cache /mnt/cache ext4 defaults 0 2 /dev/mapper/vg--sdd--sde-lv--config /mnt/config ext4 defaults 0 2
Сейчас рекомендуется в /etc/fstab
использовать UUID блочного устройства
$ blkid /dev/sda2: UUID="35af16c6-4576-45b0-a562-9693ecec5127" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f9639b90-..." /dev/sda3: UUID="0f4918c8-c354-411a-8726-18d86bb7c9cc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="1af84912-..." /dev/sdb: UUID="MS0NyP-jk3D-lxFT-lWJQ-O9Y9-D6wj-YWE9cj" TYPE="LVM2_member" /dev/sdc: UUID="osZk7P-CP9F-LuK1-7i3F-rP1P-Z5t3-eWKio8" TYPE="LVM2_member" /dev/sdd: UUID="g4kpBT-1iAd-oXmk-eDhw-K84b-olhe-glECA0" TYPE="LVM2_member" /dev/sde: UUID="oy6lcT-IrAe-ndfA-eYJg-4OYi-f1Rx-Xf62XC" TYPE="LVM2_member" /dev/mapper/vg--sdb--sdc-lv--home: UUID="e8eeaa34-3ca1-4a46-9827-849c71efa8d1" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/vg--sdb--sdc-lv--var: UUID="48a442f6-8674-4a87-9c34-ca040d9263ec" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/vg--sdd--sde-lv--backup: UUID="427a663d-94ee-4403-a560-6226ee64df54" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/vg--sdd--sde-lv--cache: UUID="23166b9f-e9aa-4eb1-9c3e-6f467fac3bbb" BLOCK_SIZE="4096" TYPE="ext4" /dev/mapper/vg--sdd--sde-lv--config: UUID="8e64913a-229b-4516-8b3c-11e2a94c05d3" BLOCK_SIZE="4096" TYPE="ext4"
# файл /etc/fstab
UUID=427a663d-94ee-4403-a560-6226ee64df54 /mnt/backup ext4 defaults 0 2
UUID=23166b9f-e9aa-4eb1-9c3e-6f467fac3bbb /mnt/cache ext4 defaults 0 2
UUID=8e64913a-229b-4516-8b3c-11e2a94c05d3 /mnt/config ext4 defaults 0 2
Перезагружаемся и смотрим, что получилось в итоге
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 500M 0 part /boot └─sda3 8:3 0 7,5G 0 part / sdb 8:16 0 8G 0 disk └─vg--sdb--sdc-lv--home 253:4 0 10G 0 lvm /home sdc 8:32 0 8G 0 disk ├─vg--sdb--sdc-lv--var 253:2 0 6G 0 lvm /var └─vg--sdb--sdc-lv--home 253:4 0 10G 0 lvm /home sdd 8:48 0 4G 0 disk ├─vg--sdd--sde-lv--backup 253:0 0 3G 0 lvm /mnt/backup └─vg--sdd--sde-lv--cache 253:1 0 2G 0 lvm /mnt/cache sde 8:64 0 2G 0 disk ├─vg--sdd--sde-lv--cache 253:1 0 2G 0 lvm /mnt/cache └─vg--sdd--sde-lv--config 253:3 0 1G 0 lvm /mnt/config
_____________ _____________ _____________ _____________ _____________ | | | | | | | | | | |/dev/sda, 8Гб| |/dev/sdb, 8Гб| |/dev/sdc, 8Гб| |/dev/sdd, 4Гб| |/dev/sde, 2Гб| |_____________| |_____________| |_____________| |_____________| |_____________| _ __ ____ _____________________________ _____________________________ | | | | | | | | | | |_| |__| |____| | VG vg-sdb-sdc | | VG vg-sdd-sde | |_____________________________| |_____________________________| grub, /boot, / _________________ _________ ________ _______ ________ | | | | | | | | | | | /home, 10Гб | |/var, 6Гб| | backup | | cache | | config | |_________________| |_________| |________| |_______| |________|
Поиск: CLI • Linux • Команда • LVM • Volume • Практика • Файловая система • Блочное устройство