Задача - создать на новых дисках 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 прямо на дисках, не создавая разделы. Как удалять разделы,
если они есть, понятно.
То есть заводим 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
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