25 avril 2024

Stockage avancé avec KVM, LVM et Raid

Vous avez  un serveur, du stockage et une furieuse envie de stocker des VMS en LVM ? Bienvenue alors !

Nous allons voir comment proposer du stockage LVM  pour servir de stockage à nos futures VMs KVM …

Cet article s’intègre dans la série New Box 2022. Vous y trouverez le pourquoi du comment, les prérequis, paquets à installer, etc…

 

I – Présentation

Le serveur que j’utilise (Dedibox) propose deux SSD de 250G chacun, le tout en RAID1. C’est bien, mais on perd quand même pas mal d’espace.

Par défaut, après l’installation du serveur, un espace en RAID 1 est monté dans /data :

/dev/sda1 -> 300M -> RAID1 /dev/md0 -> montage /boot
/dev/sda2 -> 512M -> SWAP
/dev/sda2 ->  15G -> RAID1 /dev/md1 -> montage /
/dev/sda4 -> 222G -> RAID1 /dev/md2 -> montage /data

/dev/sdb1 -> 300M -> RAID1 /dev/md0 -> montage /boot
/dev/sdb2 -> 512M -> SWAP
/dev/sdb2 ->  15G -> RAID1 /dev/md1 -> montage /
/dev/sdb4 -> 222G -> RAID1 /dev/md2 -> montage /data

L’idée est de ne pas utiliser le RAID 1 sur les 222G de /data, mais bien de garder deux espaces distincts, chacun hébergeant par la suite un Volume Group LVM.

 

II – Pétage de l’existant

L’espace du Raid 1 est monté dans /data. On le démonte :

# umount /data

Puis on pense à supprimer la référence dans le fichier /etc/fstab.

On va regarder les volumes concernés par le raid :

# mdadm --detail /dev/md2

Ce qui nous donne :

/dev/md2:
Version : 1.2
Creation Time : Thu Mar 10 12:34:59 2022
Raid Level : raid1
Array Size : 227906560 (217.35 GiB 233.38 GB)
Used Dev Size : 227906560 (217.35 GiB 233.38 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Thu Mar 10 13:02:29 2022
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : bitmap

Resync Status : 78% complete

Name : k:2 (local to host k)
UUID : 889b4197:103be046:7216a8c6:e59f41b1
Events : 315

Number Major Minor RaidDevice State
0 8 4 0 active sync /dev/sda4
1 8 20 1 active sync /dev/sdb4

On arrête le raid en question :

# mdadm --stop /dev/md2

Histoire d’éviter que ce raid soit détecté de nouveau automatiquement lors du prochain démarrage :

# mdadm --zero-superblock /dev/sda4 /dev/sdb4

On termine en modifiant le fichier /etc/mdadm/mdadm.conf pour supprimer la référence  au md2.

ARRAY /dev/md/2 metadata=1.2 UUID=889b4197:103be046:7216a8c6:e59f41b1 name=k:2

 

III – Partitionnement

On va re-partitionner les disques :

# cfdisk /dev/sda

On va sur /dev/sda4 : on delete
Ensuite, New, Taille au max, puis Primary
On descend sur FreeSpace, NEW
On write
On quitte

Et rebelote sur /dev/sdb, où l’on fait la même opération :

# cfdisk /dev/sdb

....

Ce qui, au final, donne ceci (exemple sur /dev/sdb) :

                    Disk: /dev/sdb
                 Size: 238.5 GiB, 256060514304 bytes, 500118192 sectors
             Label: dos, identifier: 0x81c8c3a2

    Device          Boot             Start          End      Sectors      Size    Id Type
    /dev/sdb1       *                 2048       614399       612352      299M    fd Linux raid autodetect
    /dev/sdb2                       614400      1662975      1048576      512M    82 Linux swap / Solaris
    /dev/sdb3                      1662976     33120255     31457280       15G    fd Linux raid autodetect
    /dev/sdb4                     33120256    500118191    466997936    222.7G    83 Linux

On reboot pour recharger tout ça :

# reboot

 

IV – LVM

Passons à la création des PVs (Physical Volume) et VGs (Volume Group) dans LVM.

Pour rappel, nous sommes dans le cadre du tuto complet et les paquets LVMs ont déjà été installés. Si vous ne savez pas de quoi je parle, retour en haut de l’article 😉

Et pour installer lvm au cas où :

# apt install lmv2

Si vous voulez en savoir plus sur LVM : LVM, le gestionnaire de volume logique

On créé les PVs :

# pvcreate /dev/sda4
# pvcreate /dev/sdb4
Puis les VGs :

# vgcreate vg0 /dev/sda4
# vgcreate vg1 /dev/sdb4

LVM, done !

 

V – Pool de stockage KVM

Il ne nous reste plus qu’à définir nos nouveaux pools dans KVM afin qu’ils puissent être utilisés.

# virsh pool-define-as lvm0 logical --source-name vg0 --target /dev/vg0
# virsh pool-define-as lvm1 logical --source-name vg1 --target /dev/vg1

Ensuite, on active :

# virsh pool-start lvm0
# virsh pool-start lvm1
# virsh pool-autostart lvm0
# virsh pool-autostart lvm1

On peut lister

# virsh pool-list

->

Name State Autostart
----------------------------
lvm0 active yes
lvm1 active yes

On est prêt a déployer nos premières VMs !

 

Je vous propose donc de revenir à l’article initial et de poursuivre la feuille de route 😉

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *