24 нояб. 2022 г.

Создание LVM массивов RAID5, thin provision, кэширование на SSD. Create LVM RAID5, thin provision, SSD cache.

 Задача - создать на новых дисках RAID5 массивы для хранения виртуальных машин в Proxmox, ISO и Backup.

Один массив - thin provision lvm, такие массивы позволяют легко создавать снапшоты, что делает резервное копирование легким и удобным. Но такие массивы не позволяют хранить ISO и бэкапы, то есть обычные файлы. 

Поэтому второй массив создадим обычным смонтированным каталогом, в терминах Proxmox - Directory. Так как LVM позволяет создавать кэшируемые массивы, настроим на нем кэш на NVME носителе, со скоростью около 2000 Mb/s, что примерно в 4 раза быстрее SATA.

1.Ставим систему Debian Linux на системный диск. Обновляем.

2. Ставим необходимые для работы средства.

        apt install nvme-cli lvm2 mc smartmontools fio
3.Создаем LVM тома.
3.1. Смотрим, что диски свободны, если на них есть какие-то разделы, то удаляем их.
То есть заводим pv - physical volumes прямо на дисках, не создавая разделы. Как удалять разделы,
если они есть, понятно.

       fdisk -l 
       pvcreate /dev/sda 
       pvcreate /dev/sdb
       pvcreate /dev/sdc
3.2 Создаем volume group из дисков, которые мы отдали под LVM
       vgcreate  pve-vg /dev/sda /dev/sdb /dev/sdc

3.3 Создаем логические тома.

        lvcreate -n pve-files --type raid5 -i 2 -L 4Tb pve-vg
        lvcreate -n pve-thin --type raid5 --stripes 2  -L 3Tb pve-vg
        lvcreate -n pve-thin-meta --type raid5 --stripes 2  -L 16Gb pve-vg

       pve-files, pve-thin, pve-thin-meta  - это имена создаваемых томов. На pve-files будем хранить ISO, бэкапы и, при необходимости, диски виртуальных машин. На pve-thin будут тома виртуалок. На thin хорошо создаются снапшоты при бэкапах, но он медленнее. Третий том, pve-thin-metadata, нужен для хранения метаданных тома thin provision.
        Создаем два больших тома типа RAID-5, при этом делим пространство под них примерно пополам (по необходимости, я сделал так). Диски у меня по 4Т, следовательно, общий объем 4х3=12 минус один диск под четность, итого 8. Каждый том по 3-4 Т. Третий том - небольшого объема, не больше 16G, но так, чтобы при конвертации в thin том потом не было ошибок.
Важно: каждый RAID5 состоит из 3 частей, но для lvcreate надо указывать 2 страйпа, видимо, это 1+2 дополнительно.

4. Конвертируем том в thin provision, указывая для метаданных маленький том.

       lvconvert --thinpool pve-vg/pve-thin --poolmetadata pve-vg/pve-thin-meta

Занимает достаточно много времени.

5. На обычном томе просто создаем файловую систему ext4

           mkfs.ext4 /dev/mapper/pve--vg-pve--files
        mkdir /pve-files
        mount /dev/mapper/pve--vg-pve--files /pve-files

Не забываем сделать так, чтобы он монтировался при загрузке системы.

6. Работа с NVME. Вставляем nvme накопитель в адаптерную карту, а карту - в pci-e  слот.
Нужные нам команды:

        lspci -nn | grep NVMe
ищем
        ls -l /dev/nvme*
ищем
        lsblk | grep nvme 
ищем, где nvme0n1 -  это диск, остальное разделы
        nvme list
смотрим информацию       
        nvme id-ctrl -H /dev/nvme0
смотрим namespaces       
       nvme id-ns /dev/nvme0 --namespace-id=0x1
смотрим информацию по namespace
        nvme error-log /dev/nvme0
смотрим журнал
        nvme delete-ns /dev/nvme0n1
удаляем namespace
        nvme create-ns /dev/nvme0
создаем новый namespace
        nvme smart-log /dev/nvme0
смотрим журнал SMART - вот это как раз самое нужное

Еще есть утилита smartctl и демон smartd

Basic information about controller name, firmware, capacity (smartctl -i)
Controller and namespace capabilities (smartctl -c)
SMART overall-health self-assessment test result and warnings (smartctl -H)
NVMe SMART attributes (smartctl -A)
NVMe error log (smartctl -l error[,NUM])
Ability to fetch any nvme log (smartctl -l nvmelog,N,SIZE)
The smartd daemon tracks health (-H), error count (-l error) and temperature (-W DIFF,INFO,CRIT)

7.Кэширование созданных LVM массивов на SSD
Создаем физический том на nvme
      pvcreate /dev/nvme0

Прицепляем его к имеющейся Volume Group c HDD
      vgextend pve /dev/nvme0

Создаем на нем два логических тома, один под данные, другой, маленький, под метаданные.
      lvcreate -L 360G -n CacheDataLV pve-vg /dev/nvme0
      lvcreate -L 5G -n CacheMetaLV pve-vg /dev/nvme0

Конвертируем тома в кэш и метаданные для кэша.
      lvconvert --type cache-pool --poolmetadata pve-vg/CacheMetaLV pve-vg/CacheDataLV

И прицепляем его к тому на HDD 
      lvconvert --type cache --cachepool pve-vg/CacheDataLV --cachemode writeback pve-vg/pve-files

Потом можно посмотреть, кэшируется ли и насколько хорошо
lvdisplay pve-vg/pve-files
  --- Logical volume ---
  LV Path                /dev/pve-vg/pve-files
  LV Name                pve-files
  VG Name                pve-vg
  LV UUID                ffxcwj-2G4S-Rfvm-Svjj-qq84-L1HY-yphk4F
  LV Write Access        read/write
  LV Creation host, time mit-pve0, 2021-12-09 00:48:04 +0300
  LV Cache pool name     CacheDataLV_cpool
  LV Cache origin name   pve-files_corig
  LV Status              available
  # open                 1
  LV Size                4.00 TiB
  Cache used blocks      100.00%
  Cache metadata blocks  0.10%
  Cache dirty blocks     0.00%
  Cache read hits/misses 22712678 / 822617
  Cache wrt hits/misses  128728483 / 507643
  Cache demotions        141158
  Cache promotions       141159
  Current LE             1048576
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     512
  Block device           253:14

Теперь важно мониторить, когда nvme начнет умирать.

        smartctl -a /dev/nvme0n1
        nvme smart-log /dev/nvme0


Убрать кэш

lvremove pve-vg/CacheDataLV

или

lvconvert --uncache pve-vg/pve-files

источники здесь и здесь