Перейти к содержанию

LVM

Что это?

LVM - это дополнительный слой абстракции от железа, позволяющий собрать физически диски в один и уже этот один логический разбивать так, как нам захочется.

У LVM есть три уровня абстракции: 1. Physical Volume (PV) - физические тома 2. Volume Group - группа из PV 3. Logical Volume - логический раздел нашего LVM диска.

Кейсы

Важно

Не забывайте бекапить данные! Описанные ниже операции вносят изменения.

Создаем новый LVM диск

Задача:

  1. Есть полностью пустой и инициализированный диск /dev/sdc
  2. Хотим файловую систему XFS

Делаем:

  1. Создаем PV:

    pvcreate /dev/sdc
    

  2. Создаем VG

    vgcreate vg_data_01 /dev/sdc
    

  3. Создаем LV

    lvcreate -n lv_data_01 -l 100%FREE vg_data_01
    

  4. Создаем ФС XFS:

    mkfs.xfs /dev/mapper/vg_data_01-lv_data_01
    

  5. Создаем каталог, куда будет монтироваться наш диск:

    mkdir /data
    

  6. Добавляем запись в /etc/fstab для монтирования диска:

    /dev/mapper/vg_data_01-lv_data_01 /data xfs defaults 0
    

  7. Монтируем:

    mount -a
    

Расширяем LVM диск с использованием parted

Важно

Если есть возможность установить пакеты - используйте growpart. Он позволяет в 1 команду проделать все эти операции.

Задача:

  1. Входные данные: есть следующая структура разделов
    > lsblk
    NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda                         8:0    0    70G  0 disk
    ├─sda1                      8:1    0     1M  0 part
    ├─sda2                      8:2    0     1G  0 part /boot
    └─sda3                      8:3    0    69G  0 part
      └─ubuntu--vg-ubuntu--lv 253:0    0    69G  0 lvm  /
    
    
    > pvs
      PV         VG        Fmt  Attr PSize   PFree
      /dev/sda3  ubuntu-vg lvm2 a--  <69.00g    0
    > lvs
      LV        VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      ubuntu-lv ubuntu-vg -wi-ao---- <69.00g
    > vgs
      VG        #PV #LV #SN Attr   VSize   VFree
      ubuntu-vg   1   1   0 wz--n- <69.00g    0
    
  2. Хотим расширить диск. Сам диск расширяется на виртуализации.

Решение:

  1. Расширяем диск на виртуализации на сколько нам надо
  2. Перечитываем диски:
echo 1 > /sys/block/sda/device/rescan
  1. Расширяем через fdisk:
> fdisk /dev/sda

Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

GPT PMBR size mismatch (146800639 != 314580991) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.

Command (m for help): p

Disk /dev/sda: 150 GiB, 161065467904 bytes, 314580992 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0BAA2E06-9745-4BB0-9687-CABC8EF827A5

Device       Start       End   Sectors Size Type
/dev/sda1     2048      4095      2048   1M BIOS boot
/dev/sda2     4096   2101247   2097152   1G Linux filesystem
/dev/sda3  2101248 146800606 144699359  69G Linux filesystem

Нам нужно удалять раздел /dev/sda3 и создать его заново с новым размером. Данные останутся нетронотыми, если руки прямые. Выполняем следующее:

Command (m for help): d
Partition number (1-3, default 3): 3

Partition 3 has been deleted.

Command (m for help): n
Partition number (3-128, default 3): 3
First sector (2101248-314580958, default 2101248): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2101248-314580958, default 314580958):

Created a new partition 3 of type 'Linux filesystem' and of size 149 GiB.
Partition #3 contains a LVM2_member signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): w

The partition table has been altered.
Syncing disks.

Важно

Внимательно смотрите, чтобы размер который был совпадал с началом нового раздела (2101248).

Часто бывает, что пытаются расширять раздел который находится не в конце, как у меня в примере, а посередине. Такой раздел расширить таким образом не получится без удаления разделов после него. В этом случае создают новый раздел и добавляют его в VG.

  1. Расширяем PV:
pvresize /dev/sda3
  1. Расширяем LV на 100%:
> lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from <69.00 GiB (17663 extents) to 149.00 GiB (38144 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
  1. Ресайзим раздел:
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv