LVM, часть 2 из 3. Практика

12.09.2023

Теги: CLILinuxБлочноеУстройствоКомандаПрактикаФайловаяСистема

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 • Практика • Файловая система • Блочное устройство

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.