Il s'agit d'un guide complet pour débutants sur LVM (Logical Volume Management) sous Linux.
Dans ce tutoriel, vous apprendrez le concept de LVM, ses composants et pourquoi vous devriez l'utiliser.
Je ne me limiterai pas à l'explication théorique. Je montrerai également des exemples pratiques de création et de gestion de LVM sous Linux.
En bref, je vais vous donner toutes les informations nécessaires dont vous auriez besoin pour commencer à travailler avec LVM dans le monde réel.
Qu'est-ce que LVM sous Linux ?
LVM signifie gestion de volume logique. Il s'agit d'une méthode alternative de gestion des systèmes de stockage par rapport à la méthode traditionnelle basée sur les partitions. Dans LVM, au lieu de créer des partitions, vous créez des volumes logiques, puis vous pouvez monter ces volumes aussi facilement dans votre système de fichiers que vous le feriez pour une partition de disque.
Une exception à la déclaration précédente est que vous ne pouvez pas utiliser de volumes logiques pour/boot
. En effet, GRUB (le chargeur de démarrage le plus courant pour Linux) ne peut pas lire à partir de volumes logiques. L'alternative bien connue à GRUB, systemd-boot, ne lit que les systèmes de fichiers vfat, donc cela ne fonctionnera pas non plus. Composants de LVM
Il y a trois composants principaux dans LVM :
- Volumes physiques
- Groupes de volumes
- Volumes logiques
Bien que la liste se compose de trois composants, seuls deux d'entre eux sont des homologues directs du système de partitionnement. Le tableau suivant enregistre cela.
Système de partitionnement de disque | LVM |
---|---|
Partitions | Volumes logiques |
Disques | Groupes de volumes |
Les volumes physiques n'ont pas d'équivalent direct, mais j'en reparlerai bientôt.
Pourquoi utiliser LVM ?
Le principal avantage de LVM est la facilité avec laquelle il est possible de redimensionner un volume ou un groupe de volumes. Il élimine toutes les parties laides (partitions, disques bruts) et nous laisse avec un pool de stockage central avec lequel travailler.
Si vous avez déjà vécu l'horreur du redimensionnement de partition, vous devriez utiliser LVM.
Préparation en laboratoire pour les travaux pratiques
Cet article n'est pas juste la théorie. Je montrerai des exemples de commandes réels en cours de route et la meilleure façon d'apprendre quelque chose est de travailler avec, de manière pratique. Pour cela, je vous recommande d'utiliser une machine virtuelle.
Pour vous aider, j'ai déjà préparé un simple Vagrantfile que vous pouvez utiliser pour faire tourner une machine virtuelle très légère avec VirtualBox. Cette machine virtuelle dispose de trois disques supplémentaires que vous et moi pouvons utiliser pour les exemples de commandes ci-dessous.
Créez un répertoire quelque part dans votre système de fichiers et enregistrez ce qui suit dans un fichier là-bas, nommé Vagrantfile
.
Vagrant.configure "2" do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "lvm"
3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
config.vm.provider :virtualbox do |machine|
machine.memory = 1024
machine.cpus = 1
machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
# vi: set ft=ruby
Ou si vous le souhaitez, vous pouvez utiliser wget
ou curl
pour télécharger le fichier depuis mon gist.
wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile
Assurez-vous que Vagrant et VirtualBox sont installés.
Une fois le Vagrantfile en place, définissez la variable d'environnement VAGRANT_EXPERIMENTAL
vers disks
.
export VAGRANT_EXPERIMENTAL=disks
Enfin, démarrez la machine virtuelle à l'aide de la commande suivante (assurez-vous d'être dans le même répertoire que le Vagrantfile) :
vagrant up
Une fois la machine en marche, vous pouvez utiliser vagrant ssh
connectez-vous en SSH et exécutez les exemples de commandes de cet article.
N'oubliez pas d'exécuter vagrant destroy
dans le même répertoire que le Vagrantfile une fois que vous avez terminé.
Installer LVM
Avant de pouvoir utiliser l'une des commandes, vous devez installer le lvm2
emballer. Cela devrait être préinstallé dans la plupart des distributions modernes, en particulier celles basées sur Ubuntu. Mais encore, je devais le mentionner avant d'aller de l'avant. Pour installer lvm2
, consultez la documentation de votre distribution.
Travailler avec LVM
Pour cette procédure pas à pas, j'ai construit une machine virtuelle avec un stockage racine de 40G (sans importance) et trois disques externes de taille 5G. La taille de ces disques est arbitraire.
[email protected]:~$ lsblk -o name,size,fstype
NAME SIZE FSTYPE
loop0 55.5M squashfs
loop1 32.3M squashfs
loop2 70.4M squashfs
sda 40G
└─sda1 40G ext4
sdb 10M iso9660
sdc 5G
sdd 5G
sde 5G
Comme vous pouvez le voir, les appareils que je vais utiliser sont sdc
, sdd
et sde
.
Rappelez-vous que je vous ai dit qu'il y a trois composants principaux dans LVM ?
- Volumes physiques
- Groupes de volumes
- Volumes logiques
Il est temps de les voir un par un.
1. Volumes physiques
La toute première chose que vous devez savoir sur LVM, ce sont les volumes physiques. Les volumes physiques sont les matières premières ou les blocs de construction utilisés pour réaliser l'abstraction que sont les volumes logiques. En termes plus simples, les volumes physiques sont l'unité logique d'un système LVM.
Un volume physique peut être n'importe quoi, un disque brut ou une partition de disque. La création et l'initialisation d'un volume physique sont la même chose. Les deux signifient que vous ne faites que préparer les blocs de construction (c'est-à-dire les partitions, les disques) pour d'autres opérations. Cela deviendra plus clair dans le moment.
Utilitaires : Tous les utilitaires qui gèrent des volumes physiques commencent par les lettres pv
pour P V physique olume. Par exemple. pvcreate
, pvchange
, pvs
, pvdisplay
etc.
Création de volumes physiques
Vous pouvez créer un volume physique à l'aide d'un disque brut non partitionné ou des partitions elles-mêmes.
Comme je l'ai mentionné précédemment, j'ai trois disques externes connectés à ma machine virtuelle, commençons par /dev/sdc
.
Nous utilisons le pvcreate
commande pour créer un volume physique. Transmettez-lui simplement le nom de l'appareil et rien d'autre.
sudo pvcreate /dev/sdc
Vous devriez voir quelque chose comme ceci :-
[email protected]:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
Ensuite, je vais partitionner /dev/sdd
en parties égales. Utilisez n'importe quel outil, cfdisk
, parted
, fdisk
etc, il existe de nombreux outils pour réaliser ce travail.
[email protected]:~$ lsblk -o name,size,fstype | grep sdd
sdd 5G
├─sdd1 2.5G
└─sdd2 2.5G
Vous pouvez maintenant créer rapidement deux volumes physiques supplémentaires à partir de ces deux partitions en une seule étape, passer ces deux périphériques à pvcreate
à la fois.
sudo pvcreate /dev/sdd1 /dev/sdd2
Jetez un oeil :-
[email protected]:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Liste des volumes physiques disponibles
Il existe trois commandes que vous pouvez utiliser pour obtenir la liste des volumes physiques disponibles, pvscan
, pvs
et pvdisplay
. Vous n'avez généralement pas besoin de transmettre quoi que ce soit à ces commandes.
pvscan
:-
[email protected]:~$ sudo pvscan
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdd1 lvm2 [2.50 GiB]
PV /dev/sdd2 lvm2 [<2.50 GiB]
Total: 3 [<10.00 GiB] / in use: 0 [0 ] / in no VG: 3 [<10.00 GiB]
pvs
:-
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 lvm2 --- <2.50g <2.50g
pvdisplay
:-
[email protected]:~$ sudo pvdisplay
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
"/dev/sdd1" is a new physical volume of "2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
"/dev/sdd2" is a new physical volume of "<2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2
VG Name
PV Size <2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB
Comme vous pouvez le constater, en plus de la simple liste des volumes physiques, ces commandes vous donnent également une tonne d'autres informations sur ces volumes.
Supprimer un volume physique
Vous pouvez supprimer un volume physique avec le pvremove
commande. Tout comme pvcreate
, passez simplement les périphériques (qui sont initialisés en tant que volumes physiques) à pvremove
commande.
Pour la démonstration, je supprimerai /dev/sdd2
de la liste.
sudo pvremove /dev/sdd2
La sortie devrait être identique à ceci :-
[email protected]:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Lister maintenant les volumes physiques avec sudo pvs
[email protected]:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2
n'est plus ici.
2. Groupes de volumes
Les groupes de volumes sont des ensembles de volumes physiques. C'est le prochain niveau d'abstraction dans LVM. Les groupes de volumes sont le pool de stockage qui combine la capacité de stockage de plusieurs périphériques de stockage bruts.
Utilitaires : Tous les noms d'utilitaires de groupe de volumes commencent par vg
, signifie V olume G groupe, par ex. vgcreate
, vgs
, vgrename
etc.
Créer des groupes de volumes
Les groupes de volumes sont créés à l'aide de vgcreate
commande. Le premier argument de vgcreate
est le nom que vous voulez donner à ce groupe de volumes, et le reste est la liste des volumes physiques qui vont sauvegarder le pool de stockage.
sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Exemple :-
[email protected]:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Volume group "lvm_tutorial" successfully created
Liste des groupes de volumes
La liste des groupes de volumes est similaire à la liste des volumes physiques, vous pouvez utiliser différentes commandes avec différents niveaux de verbosité, vgdisplay
, vgscan
et vgs
.
Personnellement, je préfère le vgs
commande, sudo vgs
[email protected]:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan
:-
[email protected]:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay
:-
[email protected]:~$ sudo vgdisplay
--- Volume group ---
VG Name lvm_tutorial
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 7.49 GiB
PE Size 4.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 7.49 GiB
VG UUID LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1
Liste des volumes physiques attachés à un groupe de volumes
Vous pouvez répertorier tous les volumes physiques connectés à un groupe de volumes spécifique en utilisant la commande suivante :-
sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name
Exemple :-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
Vous pouvez également obtenir le nombre de volumes physiques.
sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count
Exemple :-
[email protected]:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
#PV
3
Étendre un groupe de volumes
L'extension d'un groupe de volumes signifie l'ajout de volumes physiques supplémentaires à un groupe de volumes. Pour ce faire, le vgextend
commande est utilisée. La syntaxe est simple :-
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Étendons notre lvm_tutorial
volume par /dev/sdd2
.
sudo vgextend lvm_tutorial /dev/sdd2
Concentrez-vous sur le résultat :-
[email protected]:~$ sudo vgextend lvm_tutorial /dev/sdd2
Physical volume "/dev/sdd2" successfully created.
Volume group "lvm_tutorial" successfully extended
Dans la section du volume physique, nous avons fini par supprimer /dev/sdd2
en tant que volume physique, mais une partition ou un disque brut doit être initialisé en tant que volume physique, sinon LVM ne pourra pas le gérer dans le cadre d'un groupe de volumes. Alors vgextend
prépare /dev/sdd2
avant de l'ajouter au groupe de volumes.
Maintenant, répertoriez les volumes physiques attachés à ce groupe de volumes, juste pour être sûr.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Sortie :-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
/dev/sdd2
/dev/sdd2
est maintenant dans la liste comme prévu.
Réduire un groupe de volumes
Tout comme étendre un groupe de volumes signifie ajouter un autre volume physique, le réduire signifie supprimer un ou plusieurs volumes physiques.
Nous utilisons le vgreduce
commande pour le faire. La syntaxe générale est la suivante :-
vgreduce <vgname> <physical_volume1> <physical_volume2> ....
Supprimons les volumes physiques /dev/sdc
et /dev/sdd1
.
sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Exemple :-
[email protected]:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Removed "/dev/sdc" from volume group "lvm_tutorial"
Removed "/dev/sdd1" from volume group "lvm_tutorial"
Si un groupe de volumes a des volumes logiques actifs, vous ne pourrez pas le réduire de cette manière. Listez à nouveau les volumes physiques.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
Sortie :-
[email protected]:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdd2
Ces deux volumes physiques ont disparu.
Maintenant, pour le reste de cet article, rajoutez ces deux volumes physiques.
sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1
Supprimer un groupe de volumes
Vous pouvez supprimer un volume logique avec le vgremove
commande.
sudo vgremove lvm_tutorial
N'exécutez pas cette commande maintenant, sinon vous devrez recréer le groupe de volumes. Si vous voulez le tester, lancez-le à la toute fin de cet article.
3. Volumes logiques
C'est avec cela que vous allez principalement travailler. Un volume logique est comme une partition, mais au lieu de s'asseoir sur un disque brut, il se trouve sur un groupe de volumes. Vous pouvez,
- Formatez un volume logique avec le système de fichiers de votre choix.
- Montez-le n'importe où dans le système de fichiers de votre choix.
Dans cette section, vous apprendrez,
- Comment créer des volumes logiques.
- Opérations courantes sur un volume logique.
- Redimensionner un volume logique.
- Suppression d'un volume logique.
Utilitaires : Tous les noms d'utilitaires de groupe de volumes commencent par lv
, signifie L V logique olume. par exemple. lvcreate
, lvs
, lvreduce
etc.vgcreate
, vgs
, vgrename
etc.
Création de volumes logiques
Les volumes logiques sont créés à l'aide de lvcreate
commande. La syntaxe couramment utilisée se présente comme suit,
sudo lvcreate -L <size> -n <lvname> <vgname>
Permettez-moi de le décomposer pour vous :-
- Le
-L
est pour la taille du nouveau volume logique, vous pouvez utiliser n'importe quel nombre entier avec "GB", "MB" ou "KB" à la fin. Par exemple. "1 Go". - Le
-n
l'option sert à nommer ce volume logique. - Enfin, vous devez lui transmettre le nom du groupe de volumes dont ce volume logique fera partie. Ainsi, tout en fournissant une taille au volume logique, assurez-vous que le groupe de volumes dispose de l'espace disponible.
Exécutez la commande suivante sur la machine virtuelle :-
sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Exemple de sortie :-
[email protected]:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Logical volume "lv1" created.
Opérations courantes sur un volume logique
Comme je l'ai dit précédemment, vous pouvez placer un système de fichiers sur un volume logique et le monter n'importe où sur le système de fichiers.
Une fois créé, vous pouvez trouver le volume logique dans /dev/<vgname>/<lvname>
chemin. Par exemple dans notre cas le volume va être dans /dev/lvm_tutorial/lv1
.
[email protected]:~$ ls -l /dev/lvm_tutorial/lv1
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0
Vous pouvez maintenant l'utiliser comme n'importe quelle partition. Formatez-le avec ext4,
sudo mkfs.ext4 /dev/lvm_tutorial/lv1
Montez-le à un endroit de votre structure de répertoires actuelle comme /mnt
,
sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt
Redimensionner un volume logique
Vous pouvez étendre un volume logique en utilisant lvextend
commande et réduisez sa taille en utilisant lvreduce
commande. Ou vous pouvez utiliser la seule commande lvresize
pour accomplir les deux tâches.
Voyons d'abord s'il reste de l'espace dans le groupe de volumes ou non.
sudo vgs -S vgname=lvm_tutorial -o vg_free
Sortie :-
[email protected]:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
VFree
<4.99g
Selon la sortie, il me reste de l'espace, alors augmentons la taille du volume de 2 Go.
N'oubliez pas que le volume logique est toujours monté sur /mnt
.
[email protected]:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime)
Utilisez la commande suivante pour redimensionner le volume :-
sudo lvresize -L +2GB lvm_tutorial/lv1
La syntaxe générale ressemble à ceci :-
lvresize -L [+|-][Size] <vgname>/<lvname>
Le symbole + ou - après -L
dépend si vous essayez d'augmenter la taille du volume ou de le diminuer respectivement.
Une fois la taille du volume augmentée, le système de fichiers doit également être redimensionné. Pour ext4, la commande à utiliser est resize2fs
.
sudo resize2fs /dev/lvm_tutorial/lv1
Sortie :-
[email protected]:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long.
Tous les systèmes de fichiers ne prennent pas en charge le redimensionnement à chaud, Ext4 et XFS sont l'un de ceux pris en charge. Je vous recommande de vous en tenir à ceux-ci. Réduire un volume logique est une tâche un peu plus compliquée et je ne vais pas en parler ici dans cet article. Je réduis la taille de ce volume de 1 Go.
Supprimer un volume logique
Vous supprimez un volume logique avec le lvremove
commande. La syntaxe de la commande est la suivante :-
lvremove <vgname>/<lvname>
Exécutez cette commande sur la machine virtuelle :-
sudo lvremove lvm_tutorial/lv1
Sortie :-
[email protected]:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
Logical volume "lv1" successfully removed
Il existe une multitude d'autres opérations réalisables sur les volumes logiques, les volumes physiques et les groupes de volumes, mais il n'est pas possible d'écrire tout cela dans un seul article.
Je vous ai laissé un autre disque /dev/sde
dans la machine virtuelle. Utilisez-le, pratiquez certaines des commandes de cet article, créez un nouveau groupe de volumes, étendez-en un existant, entraînez-vous simplement.
J'espère que cet article vous a été utile. Si vous souhaitez en savoir plus à ce sujet à l'avenir, faites-le moi savoir dans la section des commentaires ci-dessous.