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 😀