LVM

La gestion des disques avec LVM

Présentation

Linux permet de  gérer les disques via LVM qui est l’acronyme de Logical Volume Manager.

Cet outil fut développé par IBM pour l’AIX3 et fut porté par la firme sous linux.

Il n’y a pas de standard pour la structure des différents éléments qu’utilise LVM et donc chaque constructeur a développé ses propres spécifications.

Ce qui rend le portage et la compatibilité entre constructeurs difficile voir impossible.

Le schéma ci-dessous représente un exemple simple, pour un serveur mysql, sur le mode de fonctionnement de LVM

Dans le schéma ci dessus on voit que tous les PV (Volumes Physiques) sont rattachés à un  » Volume Group » qui du point de vu serveur représente un seul disque.

L’étape suivante consistera à créer les volumes logiques afin de les rattachés aux points de montage pour chaque FS (File System);

Périmètre de l’article

Cet article ne prend pas en compte :

  • L’utilisation d’une baie de disque
  • La configuration de MySql
  • La gestion des partitions des disques sous linux

Création des volumes physiques

Premier contrôle : combien j’ai de place sur mon serveur ?

  • Avant de pouvoir créer un Volume physique il faut d’abord connaitre les disques physiques présents sur le serveur.
  • Pour cela la commande fdisk –l nous donnera toutes les informations nécessaires :
# fdisk -l

Disque /dev/sda: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0×00061088

Périphérique Amorce  Début    Fin   Blocs   Id  Système
/dev/sda1   *          1       64    512000   83  Linux
La partition 1 ne se termine pas sur une frontière de cylindre.
/dev/sda2             64     1045   7875584   8e  Linux LVM

Disque /dev/sdb: 8589 Mo, 8589934592 octets
255 têtes, 63 secteurs/piste, 1044 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0×00000000

Disque /dev/mapper/vg_cesdbmaster-lv_root: 7205 Mo, 7205814272 octets
255 têtes, 63 secteurs/piste, 876 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0×00000000

Disque /dev/mapper/vg_cesdbmaster-lv_swap: 855 Mo, 855638016 octets
255 têtes, 63 secteurs/piste, 104 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Identifiant de disque : 0×00000000

La capture ci dessus nous montre que nous avons

  • Un disque appelé sda contenant 2 partitions :
    • /dev/sda1 qui contient notre système d’amorçage de notre OS
    • /dev/sda2 qui contient une partition de type LVM qui est en fait notre volume physique.
  • Un disque appelé sdbqui pour l’instant n’est pas affecté.

Nous pouvons maintenant contrôler où est affecté notre volume physique :

# pvdisplay /dev/sda2
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg_cesdbmaster
  PV Size               7,51 GiB / not usable 3,00 MiB
  Allocatable           yes (but full)
  PE Size               4,00 MiB
  Total PE              1922
  Free PE               0
  Allocated PE          1922
  PV UUID               8xiikU-wmHK-hvFl-J1w7-sbc4-cvE1-vXPlev

La capture ci-dessus nous montre :

  • Ligne 3 : Notre volume physique est bien rattaché à /dev/sda2
  • Ligne 4 : Le volume Physique est rattaché au volume groupe vg_cesdbmaster

Création du volume physique

La création d’un PV se fait via la commande pvcreate « Nom du disque » comme le montre la commande ci-dessous.

# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created

Le PV a était créé nous pouvons contrôler que tout va bien avec la commande pvdisplay

# pvdisplay /dev/sdb
  "/dev/sdb" is a new physical volume of "8,00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               8,00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               5szPZx-S7pn-hAFQ-jotd-x83v-kfcD-2i5u5P

Nous aurrons pu découper le disque en plusieurs partitions comme dans le disque /dev/sda.

Création des volumes groups

Présentation du volume groupe

  • Du point de vu système, un groupe de volumes correspond à un disque.
  • Un ou plusieurs volumes physiques peuvent lui être attachés
  • Il apparaît comme un disque dont la capacité est la somme des capacité de ces volumes physiques.
  • Un groupe de volume peut être considéré comme un disque virtuel.

Création du volume groupe (VG) pour Mysql

# vgcreate vg_data_mysql /dev/sdb
  Volume group "vg_data_mysql" successfully created

La commande de création de volume groupe créé le nom du VG et affecte à la volée le PV

Comme le montre la capture ci-dessous, le PV /dev/sdb est bien affecté au VG  vg_data_mysql.

# vgdisplay vg_data_mysql
  --- Volume group ---
  VG Name               vg_data_mysql
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               8,00 GiB
  PE Size               4,00 MiB
  Total PE              2047
  Alloc PE / Size       0 / 0
  Free  PE / Size       2047 / 8,00 GiB
  VG UUID               e1Idtc-1zji-OXkI-5IaY-1DCD-OdCn-KVHfna

Création des volumes logiques

Présentation du volume logique (LV)

  • Un volume logique correspond à une partition d’un VG.
  • Le LV est composé de blocs physiques qui ne sont pas forcément sur le même disque ( Nous verrons pourquoi un peu plus loin ).
  • Les LV peuvent aussi augmentés par des blocs de tailles fixes, les blocs logiques ( On y vient ).
  • Un volume logique peut être considéré comme une partition virtuelle qui sera formatée avec un système de fichier.
  • Les blocs logiques sont les constituantes des LV.

 LV pour les données MySql

On créé le LV Data MySql

# lvcreate -L 5G -n lv_data_mysql vg_data_mysql
  Logical volume "lv_data_mysql" created.

On contrôle de la taille du LV Data MySql

lvdisplay /dev/vg_data_mysql/lv_data_mysql
  --- Logical volume ---
  LV Path                /dev/vg_data_mysql/lv_data_mysql
  LV Name                lv_data_mysql
  VG Name                vg_data_mysql
  LV UUID                iaO1u5-Dirc-1JDp-49W2-Tx5n-MtnX-CGF2Pe
  LV Write Access        read/write
  LV Creation host, time CESDBMaster, 2017-06-20 03:58:27 +0200
  LV Status              available
  # open                 0
  LV Size                5,00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

Création du LV pour les logs MySql

On créé le LV logs MySql

lvcreate -L 2G -n lv_logs_mysql vg_data_mysql
  Logical volume "lv_logs_mysql" created.

On contrôle de la taille du LV logs MySql

lvdisplay /dev/vg_data_mysql/lv_logs_mysql
  --- Logical volume ---
  LV Path                /dev/vg_data_mysql/lv_logs_mysql
  LV Name                lv_logs_mysql
  VG Name                vg_data_mysql
  LV UUID                LdKhCP-alck-cmuO-geQM-GZE9-0I5t-whI4W7
  LV Write Access        read/write
  LV Creation host, time CESDBMaster, 2017-06-20 06:33:59 +0200
  LV Status              available
  # open                 0
  LV Size                2,00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3

Création des points de montage

Data Mysql

Stopper le service mysql

systemctl stop mariadb
Shutting down MySQL. SUCCESS!

Sauvegarde des données MySql

mv /var/lib/mysql/ /var/lib/mysql.old

Création du nouveau point de montage

mkdir /var/lib/mysql/

Positionnement des droits

chown mysql: /var/lib/mysql/

Préparation du FS pour les données MySql

Formatage du FS

# mkfs.ext4 /dev/vg_data_mysql/lv_data_mysql
mke2fs 1.41.12 (17-May-2010)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
327680 i-noeuds, 1310720 blocs
65536 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=1342177280
40 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
       32768, 98304, 163840, 229376, 294912, 819200, 884736

Écriture des tables d'i-noeuds : complété
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

#Le système de fichiers sera automatiquement vérifié tous les 29 montages ou
#après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
#pour écraser la valeur.

Montage manuel du FS

mount /dev/vg_data_mysql/lv_data_mysql /var/lib/mysql/

Contrôle du FS

# df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/mapper/vg_cesdbmaster-lv_root       6,5G  1,3G  5,0G  21% /
tmpfs                                    499M     0  499M   0% /dev/shm
/dev/sda1                                477M   60M  392M  14% /boot
/dev/mapper/vg_data_mysql-lv_data_mysql  4,8G   10M  4,6G   1% /var/lib/mysql

Restauration des données Myql

cp -Rp /var/lib/mysql.old/* /var/lib/mysql/

Application des droits MySql sur le répertoire de données

chown -R mysql: /var/lib/mysql

Contrôle des données

ls -rtl /var/lib/mysql/
total 28732
drwxr-xr-x 2 mysql mysql    4096 29 mai   16:56 test
drwx--x--x 2 mysql mysql    4096 29 mai   16:56 mysql
drwx------ 2 mysql mysql    4096 29 mai   16:56 performance_schema
-rw-rw---- 1 mysql mysql 5242880 29 mai   16:58 ib_logfile1
drwx------ 2 mysql mysql    4096 29 mai   17:46 wordpress
drwx------ 2 root  root    16384 20 juin  06:45 lost+found
-rw-rw---- 1 mysql mysql      52 20 juin  06:46 aria_log_control
-rw-rw---- 1 mysql mysql   16384 20 juin  06:46 aria_log.00000001
-rw-rw---- 1 mysql mysql 5242880 20 juin  06:46 ib_logfile0
-rw-rw---- 1 mysql mysql 18874368 20 juin  06:46 ibdata1
-rw-r----- 1 mysql root      7021 20 juin  06:46 CESDBMaster.err

redémarrage du service mysql

service mysql start
Starting MySQL.. SUCCESS!

Test de connexion à MySql

mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.47-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Montage automatique du FS des données MySql

Modifier le fichier /etc/fstab en ajoutant la ligne suivante

/dev/mapper/vg_data_mysql-lv_data_mysql /var/lib/mysql ext4 defaults 1 1

Redémarrage du serveur pour tester le montage automatique et le redémarrage automatique de MySql

reboot
Broadcast message from root@CESDBMaster
    (/dev/pts/0) at 13:43 ...

The system is going down for reboot NOW!

Après redémarrage on contrôle le bon fonctionnement de mysql

service mysql status
SUCCESS! MySQL running (2173)

Logs Mysql

Nous allons mettre en place un FS dédié aux logs MySql afin de ne pas pénaliser le système. Cette démarche permet de démarrer notre serveur dans tous les cas. Si le service MySql génère trop de logs, le service ne démarrera pas mais notre système sera toujours accessible. Cette démarche est valable pour tous les services dont le système ne dépend pas.

Pour exécuter cette partie de l’article vous devais avoir configurer MySql pour ecrire ces logs dans un fichier dédié (L’article par du principe que les logs MySql sont dans le répertoire /var/log/mysqld) .

Stopper le service mysql

cette commande n’est pas nécessaire mais cela permet de travail sereinement 😀

service mysql stop
Shutting down MySQL. SUCCESS!

Création d’un répertoire dédié aux logs MySql

mkdir /var/log/mysqld

Positionnement des droits

chown mysql: /var/log/mysqld

Préparation du FS pour les données MySql

Formatage du FS

mkfs.ext4 /dev/vg_data_mysql/lv_logs_mysql
mke2fs 1.41.12 (17-May-2010)
Étiquette de système de fichiers=
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
« Stride » = 0 blocs, « Stripe width » = 0 blocs
131072 i-noeuds, 524288 blocs
26214 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=536870912
16 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8192 i-noeuds par groupe
Superblocs de secours stockés sur les blocs : 
       32768, 98304, 163840, 229376, 294912

Écriture des tables d'i-noeuds : complété
Création du journal (16384 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Le système de fichiers sera automatiquement vérifié tous les 35 montages ou
après 180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i
pour écraser la valeur.

Création du point de montage pour les logs mysql

mkdir /var/log/mysqld/
chown mysql: /var/log/mysqld/

Contrôle du point de montage

ls -ld /var/log/mysqld/
drwxr-xr-x 2 mysql mysql 4096 20 juin 14:08 /var/log/mysqld/

Montage manuel du FS

mount /dev/vg_data_mysql/lv_logs_mysql /var/log/mysqld/

Contrôle du FS

df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/mapper/vg_cesdbmaster-lv_root       6,5G  1,3G  4,9G  21% /
tmpfs                                    499M     0  499M   0% /dev/shm
/dev/sda1                                477M   60M  392M  14% /boot
/dev/mapper/vg_data_mysql-lv_data_mysql  4,8G   40M  4,6G   1% /var/lib/mysql
/dev/mapper/vg_data_mysql-lv_logs_mysql  2,0G  3,0M  1,9G   1% /var/log/mysqld

Application des droits MySql sur le répertoire de données

chown -R mysql: /var/log/mysqld

redémarrage du service mysql

service mysql restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!

Test de connexion à MySql

mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.47-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Montage automatique du FS des données MySql

Modifier le fichier /etc/fstab en ajoutant la ligne suivante

/dev/vg_data_mysql/lv_logs_mysql /var/log/mysqld ext4 defaults 1 1

Redémarrage du serveur pour tester le montage automatique et le redémarrage automatique de MySql

reboot
Broadcast message from root@CESDBMaster
    (/dev/pts/0) at 13:43 ...

The system is going down for reboot NOW!

Après redémarrage on contrôle le bon fonctionnement de mysql

service mysql status
 SUCCESS! MySQL running (2173)

Controle du bon montage du FS au redémarrage

# df -h
Filesystem                               Size  Used Avail Use% Mounted on
/dev/mapper/vg_cesdbmaster-lv_root       6,5G  1,3G  4,9G  21% /
tmpfs                                    499M     0  499M   0% /dev/shm
/dev/sda1                                477M   60M  392M  14% /boot
/dev/mapper/vg_data_mysql-lv_data_mysql  4,8G   40M  4,6G   1% /var/lib/mysql
/dev/mapper/vg_data_mysql-lv_logs_mysql  2,0G  3,0M  1,9G   1% /var/log/mysqld

Conclusion

A compléter 😀

Table des matières
WordPress Appliance - Powered by TurnKey Linux