- Modifié
Partitionnement de mon dedié avec LVM
LVM kesako ?
LVM (logical volume manager), est un outils permettant la création et la gestion de volume logique (~= partition logique). LVM permets une gestion simplifié de ces volumes.
LVM agit sur plusieurs "couche", représenté sur ce schéma (merci ubuntu-fr ) :
Nous avons les volumes physique que l'on appelle PV (Physical Volume), ce sont des partitions ou des disques durs complets.
Ensuite nous avons les groupes de volumes, que l'on appelle VG (Volume Group), ce sont des groupes de PV.
Puis nous avons les volumes logique, que l'on appelle LV (Logical Volume), ce sont les "partitions".
Avantages
- Simplifie l’allocation d'espaces disques.
inconvénients
- Dans le cas de plusieurs PV dans un VG, si un disque crash, tous est perdu.
Pré-requis
On a pas besoin de beaucoup de choses :
- LVM installé (apt-get install lvm2)
- Un peu de temps
- De l'attention, une boulette est vite arrivé
- Un dédié fraichement installé
Le cas utilisé
Je prends l'exemple d'un kimsufi, si je ne me trompe pas, le panel de kimsufi ne permets pas de faire une installation avec lvm de base.
Il me semble que le problème est le même chez online.
Mon serveur est de base installé comme ceci :
Device Start End Sectors Size Type
/dev/sda1 40 2048 2009 1004,5K BIOS boot
/dev/sda2 4096 40962047 40957952 19,5G Linux filesystem
/dev/sda3 40962048 3905974271 3865012224 1,8T Linux filesystem
/dev/sda4 3905974272 3907020799 1046528 511M Linux swap
Le /dev/sda2 étant le root, et le sda3 le home. Si votre partitionnement n'est pas comme ceci, il va falloir passer par la case redimensionnement via le rescue.
Ce tutoriel est réalisé en live, donc tous devrait fonctionner, car ce sont des copiés collés de ce que j'ai réalisé sur mon kimsufi.
Bon, vous êtes prêt ?! on y va !!!
Préparation du système
On commence par vérifier la présence de lvm :
$ lvm version
LVM version: 2.02.111(2) (2014-09-01)
Library version: 1.02.90 (2014-09-01)
Driver version: 4.27.0
C'est cool, c'est installé.
Si ce n'est pas le cas, il faut l'installer :
$ apt-get install lvm2
Si vous avez des utilisateurs déjà créé, sauvegardé le contenu des homes, car tous sera supprimé.
Nous allons maintenant démonté le home :
$ umount /home
Et directement on va supprimer la ligne dans le fstab :
nano /etc/fstab
et on supprime la ligne du home, pour moi c'est :
/dev/sda3 /home ext4 defaults,relatime 1 2
Création du PV
Nous allons créé notre PV sur sda3, c'est plutôt simple :
$ pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
Et c'est tous.
Création du VG
C'est aussi simple de créé un VG :
$ vgcreate vghome /dev/sda3
Volume group "vghome" successfully created
Dans cet exemple, je l'ai nommé vghome, c'est un choix arbitraire, j'aurais pu tapé :
$ vgcreate monVG /dev/sda3
Obtenir des informations sur le VG créé
$ vgdisplay vghome
--- Volume group ---
VG Name vghome
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 1,80 TiB
PE Size 4,00 MiB
Total PE 471803
Alloc PE / Size 0 / 0
Free PE / Size 471803 / 1,80 TiB
VG UUID yBQGpE-2cMa-3g9B-msCS-BjAP-Cp6q-pESGIl
Création d'un LV
Je vais maintenant me créé un LV, c'est la que je défini la taille.
Puisque c'est pour moi, j'ai besoin de 500Go, voici comment je le crée :
$ lvcreate -L 500G -n xataz vghome
Logical volume "xataz" created
Pour les options :
- -L : Pour choisir la taille
- -n : Pour le nom du lv, choix arbitraire, mais logique, c'est pour mon home, je l'appelle donc xataz, question d'organisation.
- et on fini par vghome, car je veux qu'il sois sur ce vg (et parce que j'en ai qu'un )
Maintenant il faut formaté celui ci (en ext4) :
$ mkfs.ext4 /dev/mapper/vghome-xataz
mke2fs 1.42.12 (29-Aug-2014)
En train de créer un système de fichiers avec 131072000 4k blocs et 32768000 i-noeuds.
UUID de système de fichiers=95bd7e36-7524-4391-a044-b8eec060d92f
Superblocs de secours stockés sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocation des tables de groupe : complété
É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é
Les LVs ce trouvent à deux endroits dans le /dev, nous avons le choix entre :
/dev/mapper/vgname-lvname
ou
/dev/vgname/lvname
Pour le fameux 5% de réservé, nous pouvons le supprimer avec :
$ tune2fs -m 0 /dev/mapper/vghome-xataz
tune2fs 1.42.12 (29-Aug-2014)
Définition du pourcentage de blocs réservés à 0% (0 blocs)
Création d'un deuxième LV
Pendant que j'y suis, je vais créé un VG pour ma soeur (didine), elle n'a pas besoin de 500Go, mais 50go devrait lui suffire, mais avant ceci, je vais vérifier que j'ai assez de place :
$ vgdisplay vghome
--- Volume group ---
VG Name vghome
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1,80 TiB
PE Size 4,00 MiB
Total PE 471803
Alloc PE / Size 128000 / 500,00 GiB
Free PE / Size 343803 / 1,31 TiB
VG UUID yBQGpE-2cMa-3g9B-msCS-BjAP-Cp6q-pESGIl
On voit qu'il me reste 1,31 To :
Free PE / Size 343803 / 1,31 TiB
Je peux donc sans soucis créer la partition pour ma soeurette (en vrai c'est un chieuse) :
$ lvcreate -L 50G -n didine vghome
Logical volume "didine" created
et on formate :
$ mkfs.ext4 /dev/vghome/didine
Puis on supprime les 5% réservé :
$ tune2fs -m 0 /dev/mapper/vghome-didine
tune2fs 1.42.12 (29-Aug-2014)
Définition du pourcentage de blocs réservés à 0% (0 blocs)
D’ailleurs didine sera mon cobaye pour la suite de ce tutoriel.
Montage des partitions
Puisque nous créons des LV pour nos utilisateurs, nous allons d'abord créer le répertoire pour notre utilisateur :
$ mkdir -p /home/xataz
On monte sur le home de l'utilisateur :
$ mount /dev/mapper/vghome-xataz /home/xataz/
On crée l'utilisateur :
useradd -M -s /bin/bash xataz
Ou alors avec le script d'ex_rat, dans n'exécutez pas la commande suivante.
On change les droits du home :
$ chown -R xataz:xataz /home/xataz
Et voila, notre utilisateur à sa propre partition.
Il ne reste plus qu'à écrire tous ceci en dur dans le fstab :
nano /etc/fstab
et on rajoute ceci :
/dev/mapper/vghome-xataz /home/xataz ext4 defaults 0 2
Je fait de même pour didine en background.
Redimensionnement d'un LV
On commence ici le récit fabuleux de "didine la pissouse".
Augmentation de l'espace disque
Didine ayant fait trop de vidéo de son chat, n'a plus de place, elle me demande donc de lui ajouté 50Go.
Pour commencer, je vérifie que je peux le faire :
$ vgdisplay vghome
--- Volume group ---
VG Name vghome
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 1,80 TiB
PE Size 4,00 MiB
Total PE 471803
Alloc PE / Size 140800 / 550,00 GiB
Free PE / Size 331003 / 1,26 TiB
VG UUID yBQGpE-2cMa-3g9B-msCS-BjAP-Cp6q-pESGIl
Je peux donc lui ajouter l'espace qu'elle veux.
On va vérifier combien elle a pour le moment :
$ df -h /home/didine
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vghome-didine 50G 52M 47G 1% /home/didine
J'aurais pu vérifier avec lvdisplay :
$ lvdisplay /dev/mapper/vghome-didine
--- Logical volume ---
LV Path /dev/vghome/didine
LV Name didine
VG Name vghome
LV UUID HDaUgK-ccu0-m4MD-nUN6-0N1R-R0pW-t5Llkg
LV Write Access read/write
LV Creation host, time seedbox, 2015-09-12 21:36:42 -0400
LV Status available
# open 1
LV Size 50,00 GiB
Current LE 19200
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1
On commence par démonter le volume :
$ umount /home/didine/
Puis on peux en vérifier l'intégrité :
$ e2fsck -f /dev/mapper/vghome-didine
e2fsck 1.42.12 (29-Aug-2014)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/mapper/vghome-didine : 14/3276800 fichiers (0.0% non contigus), 251702/13107200 blocs
Tous est parfait, on peux donc attaqué le redimensionnement du LV :
$ lvresize -L +50G /dev/mapper/vghome-didine
Size of logical volume vghome/didine changed from 50,00 GiB (12800 extents) to 100,00 GiB (25600 extents).
Logical volume didine successfully resized
Par contre ce n'est pas fini, car dans ce cas, le fs fait toujours 50Go, seul le LV à été redimensionner, il faut redimensionner également le FS :
$ resize2fs /dev/mapper/vghome-didine
resize2fs 1.42.12 (29-Aug-2014)
En train de redimensionner le système de fichiers sur /dev/mapper/vghome-didine à 26214400 (4k) blocs.
Le système de fichiers sur /dev/mapper/vghome-didine a maintenant une taille de 26214400 blocs (4k).
On peux maintenant remonté la partition :
$ mount /dev/mapper/vghome-didine /home/didine/
et on vérifie l'espace :
$ df -h /home/didine/
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vghome-didine 99G 60M 94G 1% /home/didine
Et voila le travail.
Suppression de l'espace disque
Didine me dit qu'elle a supprimer quelques vidéos de son chat, et dit que en fait 75Go aurait largement suffit.
Puisque je n'aime pas avoir de l'espace non utilisé (c'est pas vrai, mais on va dire que si), je vais rétrécir sa partition.
Ceci est plus risqué que l'agrandissement, nous allons donc utilisé une méthode qui limite ces risques, mais il faut qu'il reste au moins 10% d'espaces par rapport a la taille voulu.
On démonte de nouveau sa partition :
$ umount /home/didine/
On revérifie l'intégrité des données :
$ e2fsck -f /dev/mapper/vghome-didine
e2fsck 1.42.12 (29-Aug-2014)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/mapper/vghome-didine : 14/6553600 fichiers (0.0% non contigus), 459352/26214400 blocs
Dans mon cas, didine veut 75Go, pour évité les risques je vais redimensionner le FS à 70Go dans un 1er temps :
$ resize2fs -p /dev/mapper/vghome-didine 70G
resize2fs 1.42.12 (29-Aug-2014)
En train de redimensionner le système de fichiers sur /dev/mapper/vghome-didine à 18350080 (4k) blocs.
Début de la passe 3 (max = 800)
Examen de la table d'i-noeuds XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Le système de fichiers sur /dev/mapper/vghome-didine a maintenant une taille de 18350080 blocs (4k).
Puis on peut enfin redimensionner le LV :
$ lvresize -L 75G /dev/mapper/vghome-didine
WARNING: Reducing active logical volume to 75,00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce didine? [y/n]: y
Size of logical volume vghome/didine changed from 100,00 GiB (25600 extents) to 75,00 GiB (19200 extents).
Logical volume didine successfully resized
Comme vous pouvez le voir, j'ai utilisé cette fois ci une taille absolu (-L 75G), mais j'aurais pu dans ce cas utilisé également -L -25G (Comme tous a l'heure avec +50G).
Puis je redimensionne le fs :
$ resize2fs /dev/mapper/vghome-didine
resize2fs 1.42.12 (29-Aug-2014)
En train de redimensionner le système de fichiers sur /dev/mapper/vghome-didine à 19660800 (4k) blocs.
Le système de fichiers sur /dev/mapper/vghome-didine a maintenant une taille de 19660800 blocs (4k).
Puis on remonte le volume :
$ mount /dev/mapper/vghome-didine /home/didine
On vérifie la taille :
$ df -h /home/didine/
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vghome-didine 74G 52M 70G 1% /home/didine
Maintenant que c'est fait, j'espère que didine va me foutre la paix .
Pourquoi devoir redimensionner deux fois le fs
C'est pour une raison plutôt simple, les outils resize2fs et lvresize peuvent avoir une différence de quelques octect, ou megaoctect au maximum, ce qui pourrait poser des problèmes.
C'est pourquoi il vaut mieux redimensionner le fs un peu en dessous que voulu, pour avoir la marge lors du redimensionnement du lv.
C'est d'ailleurs cet différence, qui fait que le fs fait 74G au lieu de 75G, il doit avoir quelques o voir Mo de différence.
J'espère être clair dans cet explication .
Suppression d'un LV
Maintenant didine me dit qu'elle ne veux plus d'espace sur mon serveur.
Je vais pas garder son espace, il pourrait servir à quelqu'un d'autre.
Je peux rapidement le supprimer en deux commande.
On commence par démonter le volume :
$ umount /home/didine/
Puis on le supprime :
$ lvremove /dev/vghome/didine
Do you really want to remove active logical volume didine? [y/n]: y
Logical volume "didine" successfully removed
Et voila, il est supprimé.
Il ne faut pas oublier de supprimer également la ligne dans le fstab :
/dev/mapper/vghome-didine /home/didine ext4 defaults 0 2
Conclusion
Comme vous pouvez le voir, il est plutôt simple de faire des modifications sur un volume logique, mais il faut toutefois respecter les règles de sécurités.
Nous aurions pu créé le swap sur le VG également, mais le principe reste le même.
Donc voila, a vous de jouer maintenant.
Contribution
Toute contribution est la bienvenue.
N'hésitez pas à contribuer au Tutoriel, ajout d'information, correction de fautes (et il y en a), amélioration etc ...
Ça se passe ici
Questions
Toute question sur la discussion ou sur github