Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lvm [Le 30/06/2019, 20:10] – [Chapitre spécial pour ceux qui ont décidé d'installer UBUNTU sur la totalité de leur disque en le chiffrant] 88.182.40.86 | lvm [Le 28/12/2020, 16:11] (Version actuelle) – [Références] dexter74 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> partitions administration système}} | ||
+ | ---- | ||
+ | ====== LVM, une autre manière de partitionner ===== | ||
+ | |||
+ | ===== Introduction ===== | ||
+ | |||
+ | |||
+ | **LVM** (Logical Volume Manager, ou // | ||
+ | Depuis Intrepid, il existe le paquet [[apt:// | ||
+ | |||
+ | |||
+ | ==== Avantages de LVM ==== | ||
+ | |||
+ | * Il n'y a pas de limitations « étranges » comme avec les partitions (primaire, étendue, etc.). | ||
+ | * On ne se préoccupe plus de l' | ||
+ | * On peut conserver quelques giga-octets de libres pour pouvoir les ajouter n' | ||
+ | * Les opérations de redimensionnement deviennent quasiment sans risques, contrairement au redimensionnement des partitions. | ||
+ | * On peut créer des snapshots de volume sans perturber le fonctionnement de la machine et sans interruption de services. | ||
+ | |||
+ | ==== Inconvénients de LVM ==== | ||
+ | |||
+ | * Si un des volumes physiques devient HS, alors c'est l' | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | * Un disque ou une partition libre. | ||
+ | * Ne pas avoir peur de la ligne de commande. | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | [[gestionnaire_de_paquets|Installez]] le paquet [[apt:// | ||
+ | Avant d' | ||
+ | ===== Notions et vocabulaire ===== | ||
+ | |||
+ | ==== Volume physique ===== | ||
+ | |||
+ | Un volume physique ou « PV » pour « //physical volume// » est tout simplement un disque ou une partition. Bref, c'est un espace de stockage bien réel (autrement dit un périphérique de la forme ''/ | ||
+ | <note important> | ||
+ | |||
+ | ==== Groupe de volumes ===== | ||
+ | Un groupe de volumes ou « VG » pour « //volume group// » est, comme son nom l' | ||
+ | :) | ||
+ | ==== Volume logique ===== | ||
+ | |||
+ | Un volume logique ou « LV » pour « //logical volume// » est ce que nous allons utiliser au final. Un volume logique est un espace « quelque part dans un groupe de volume » où l'on peut mettre un système de fichiers. C'est donc ce qui remplace les partitions. On peut donc utiliser un volume logique pour mettre la mémoire virtuelle, un pour ''/ | ||
+ | |||
+ | <note important> | ||
+ | </ | ||
+ | |||
+ | On peut y mettre à peu près tout … mais il vaut mieux éviter d'y mettre "/ | ||
+ | ==== Synthèse graphique ==== | ||
+ | |||
+ | On peut voir les choses ainsi : | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Création ===== | ||
+ | |||
+ | Bien, passons à la pratique ! | ||
+ | |||
+ | Puisque nous allons entrer toutes les commandes à venir en tant que //root//, je vous conseille de passer //root// « une bonne fois pour toutes » : | ||
+ | |||
+ | sudo -i | ||
+ | |||
+ | Voilà : le //prompt// est maintenant en mode root « # », cela nous évitera d' | ||
+ | |||
+ | Bonne nouvelle, les commandes LVM sont extrêmement simples à utiliser, et elles intègrent toutes une aide en ligne très bien conçue, claire, courte, mais suffisante. De plus, leurs noms se « devinent » assez facilement : | ||
+ | * toutes les commandes agissant sur les volumes physiques commencent par //pv// (pour //physical volume//); | ||
+ | * toutes les commandes agissant sur les groupes de volumes commencent par //vg// (pour //volumes group//); | ||
+ | * toutes les commandes agissant sur les volumes logiques commencent par //lv// (pour //logical volume//). | ||
+ | |||
+ | La première chose à faire est de créer **un volume physique**, en attribuant une partition à LVM. | ||
+ | |||
+ | Essayez la commande suivante pour connaître la liste des commandes disponibles pour les volumes physiques : | ||
+ | |||
+ | man -k pv | ||
+ | | ||
+ | Parmi toutes les commandes renvoyées, on remarque une « pvcreate », ça doit être celle-là… ;-) Cette astuce fonctionne avec toutes les commandes LVM et permet de les retrouver facilement. | ||
+ | < | ||
+ | pvchange (8) - change attributes of a physical volume | ||
+ | pvck (8) - check physical volume metadata | ||
+ | pvcreate (8) - initialize a disk or partition for use by LVM | ||
+ | pvdisplay (8) - display attributes of a physical volume | ||
+ | pvmove (8) - move physical extents | ||
+ | pvremove (8) - remove a physical volume | ||
+ | pvresize (8) - resize a disk or partition in use by LVM2 | ||
+ | pvs (8) - report information about physical volumes | ||
+ | pvscan (8) - scan all disks for physical volumes | ||
+ | </ | ||
+ | ==== Groupe de volumes ==== | ||
+ | |||
+ | Il existe de nombreuses options lors de la création d'un groupe de volumes… Mais continuons de faire au plus simple. Le seul paramètre indispensable sera de lui donner un nom, nous utiliserons les valeurs par défaut pour tout le reste. Pour une raison que j' | ||
+ | |||
+ | Pour connaitre la syntaxe de la commande // | ||
+ | |||
+ | vgcreate | ||
+ | |||
+ | La syntaxe est donc : | ||
+ | |||
+ | vgcreate VolumeGroupName PhysicalVolume [optionnellement d' | ||
+ | |||
+ | Allons-y : | ||
+ | |||
+ | vgcreate mvg /dev/sdc1 | ||
+ | |||
+ | Si tout se passe bien, vous avez maintenant un groupe de volumes, contenant un disque physique. Vous pouvez obtenir d' | ||
+ | |||
+ | vgdisplay | ||
+ | --- Volume group --- | ||
+ | VG Name mvg | ||
+ | System ID | ||
+ | Format | ||
+ | Metadata Areas 1 | ||
+ | Metadata Sequence No 3 | ||
+ | VG Access | ||
+ | VG Status | ||
+ | MAX LV 0 | ||
+ | Cur LV 2 | ||
+ | Open LV 0 | ||
+ | Max PV 0 | ||
+ | Cur PV 1 | ||
+ | Act PV 1 | ||
+ | VG Size | ||
+ | PE Size 4,00 MiB | ||
+ | Total PE 47695 | ||
+ | Alloc PE / Size 15360 / 60,00 GiB | ||
+ | Free PE / Size 32335 / 126,31 GiB | ||
+ | VG UUID | ||
+ | |||
+ | |||
+ | ==== Volume logique ==== | ||
+ | |||
+ | Nous y voilà… Cette fois-ci, nous allons vraiment créer deux espaces que l'on pourra ensuite « formater » en //ext4// par exemple. | ||
+ | |||
+ | Comme précédemment, | ||
+ | |||
+ | lvcreate | ||
+ | |||
+ | Les deux options vraiment importantes sont « -n » pour son nom, et « -L » pour sa taille. Le paramètre principal est « OriginalLogicalVolume ». Il s'agit peut-être d'une erreur dans le manuel (//man//). En fait, ce qu'il faut indiquer, c'est bien le groupe de volumes dans lequel nous allons créer le volume logique. Pour l' | ||
+ | |||
+ | lvcreate -n Vol1 -L 10g mvg | ||
+ | lvcreate -n Vol2 -L 50g mvg | ||
+ | |||
+ | Idem, on peut vérifier avec la commande // | ||
+ | |||
+ | ~# lvdisplay | ||
+ | --- Logical volume --- | ||
+ | LV Name / | ||
+ | VG Name mvg | ||
+ | LV UUID q0D6cQ-mcMP-q8sf-XTlI-DdxX-QHd1-qkaB5J | ||
+ | LV Write Access | ||
+ | LV Status | ||
+ | # open 0 | ||
+ | LV Size 10,00 GiB | ||
+ | Current LE 2560 | ||
+ | Segments | ||
+ | Allocation | ||
+ | Read ahead sectors | ||
+ | - currently set to 256 | ||
+ | Block device | ||
+ | |||
+ | --- Logical volume --- | ||
+ | LV Name / | ||
+ | VG Name mvg | ||
+ | LV UUID JZjMxI-cTAw-cbs6-02BM-4Mev-P2E7-b8JX0x | ||
+ | LV Write Access | ||
+ | LV Status | ||
+ | # open 0 | ||
+ | LV Size 50,00 GiB | ||
+ | Current LE 12800 | ||
+ | Segments | ||
+ | Allocation | ||
+ | Read ahead sectors | ||
+ | - currently set to 256 | ||
+ | Block device | ||
+ | |||
+ | |||
+ | ==== Système de fichiers ==== | ||
+ | |||
+ | Avec les partitions, on avait des noms ressemblant à ''/ | ||
+ | Autrement dit, puisqu' | ||
+ | À partir de maintenant, ''/ | ||
+ | |||
+ | mkfs -t ext4 / | ||
+ | mkfs -t ext4 / | ||
+ | mkdir /Essai1 | ||
+ | mount / | ||
+ | df -h | ||
+ | |||
+ | Et normalement, | ||
+ | |||
+ | > Pourquoi est-il écrit ''/ | ||
+ | |||
+ | Avec LVM en version 1, c'est bien ''/ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Suppression ===== | ||
+ | |||
+ | Rien de plus simple : | ||
+ | |||
+ | umount / | ||
+ | lvremove / | ||
+ | |||
+ | :!: Attention, une fois un volume logique effacé, il est **totalement impossible** de récupérer les données qu'il contenait. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Redimensionnement ===== | ||
+ | |||
+ | |||
+ | |||
+ | ==== Volume physique ==== | ||
+ | |||
+ | Imaginons maintenant que notre groupe de volume (mvg) n'ait plus suffisamment d' | ||
+ | |||
+ | On initialise le volume en vue de son utilisation dans LVM : | ||
+ | |||
+ | pvcreate /dev/sdc2 | ||
+ | |||
+ | On rajoute le volume sdc2 au groupe de volume mvg : | ||
+ | |||
+ | vgextend mvg /dev/sdc2 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Volume logique ==== | ||
+ | |||
+ | Il est très facile d' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Agrandissement ==== | ||
+ | |||
+ | Bien qu'il soit évidemment moins risqué d' | ||
+ | |||
+ | Pour agrandir un volume il est nécessaire de démonter le système de fichier, ici, prenons celui du volume logique Vol2 : | ||
+ | umount /Essai2 | ||
+ | |||
+ | Maintenant nous allons ajouter 5Gio au volume et agrandir son système de fichier : | ||
+ | lvresize --resizefs --size +5G / | ||
+ | | ||
+ | <note important> | ||
+ | |||
+ | Une fois l' | ||
+ | |||
+ | ==== Rétrécissement ==== | ||
+ | |||
+ | Diminuer la taille d'un système de fichier est un peu plus délicat. En effet, il faut dans un premier temps s' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Voyons d' | ||
+ | df -h | grep ca | ||
+ | / | ||
+ | |||
+ | Les valeurs qui nous intéressent sont la deuxième et la quatrième, à savoir : | ||
+ | * 512Mio d' | ||
+ | * 283Mio d' | ||
+ | |||
+ | L' | ||
+ | |||
+ | Commençons par démonter le volume : | ||
+ | umount / | ||
+ | |||
+ | Maintenant, nous allons retirer 256Mio : | ||
+ | lvresize --resizefs --size -256M / | ||
+ | |||
+ | <note tip>Si la partition n'est pas démontée, la commande propose de la démonter et s' | ||
+ | |||
+ | Le volume peut maintenant être monté : | ||
+ | mount / | ||
+ | |||
+ | Et on peut alors afficher sa nouvelle taille : | ||
+ | df -h | grep ca | ||
+ | / | ||
+ | ===== Snapshot ===== | ||
+ | __Comprendre la magie du Snapshot LVM :__ | ||
+ | |||
+ | //Pourquoi donner une taille au snapshot ? Tout simplement parce que celui-ci est intelligent, | ||
+ | |||
+ | **Avec LVM 1**, les instantanés sont en lecture seule. Ils fonctionnent par l' | ||
+ | |||
+ | |||
+ | **Avec LVM 2**, les instantanés sont par défaut en lecture/ | ||
+ | |||
+ | Voir [[http:// | ||
+ | ==== Création d'un snapshot LVM ==== | ||
+ | < | ||
+ | Va créer un snapshot du LV " | ||
+ | Attention, la taille d' | ||
+ | |||
+ | |||
+ | ==== Redimensionnement du snapshot ==== | ||
+ | La taille du snapshot est trop petite et elle arrive bientôt à 100%, pourtant vous avez encore besoin d' | ||
+ | Vérifier avec vgdisplay que le VG dispose encore d' | ||
+ | < | ||
+ | Va ajouter **3Go** au snap **lv_test_20110617** qui est présent dans le VG **vg_data**. | ||
+ | ==== Fusionner un snapshot ==== | ||
+ | Le but ici est de fusionner un snapshot modifié vers le LV d' | ||
+ | < | ||
+ | Attention : vous avez besoin d'un kernel (> | ||
+ | |||
+ | ===== Changement d'un disque défectueux ===== | ||
+ | |||
+ | Votre disque /dev/sda présente des signes de faiblesse (signalés par SMART, par la présence de nombreux fichiers dans les dossiers "lost + found" de vos partitions). Vous désirez le remplacer par un disque neuf, de taille plus importante (surtout pas plus petite !), que vous avez installé dans la machine (ou sur un port USB) et qui est reconnu par le système comme étant /dev/sdb. | ||
+ | ==== Principe ==== | ||
+ | |||
+ | Supposons que votre disque initial (/dev/sda) ait été formaté ainsi : | ||
+ | /dev/sda1 est une partition primaire, de type bootable, montée sur /boot. | ||
+ | /dev/sda2 est une partition étendue, contenant la partition logique /dev/sda5 de type lvm2. | ||
+ | |||
+ | Vous avez besoin de copier /dev/sda1 sur une partition /dev/sdb1, et /dev/sda5 sur une partition /dev/sdb5. | ||
+ | |||
+ | Vous allez utiliser l' | ||
+ | |||
+ | ==== Avec GParted ==== | ||
+ | |||
+ | Lancez Gparted (Système -> Administration -> Editeur de partitions GParted). | ||
+ | Les partitions de votre disque /dev/sda s' | ||
+ | |||
+ | Passez au disque /dev/sdb. Créez-y une nouvelle partition primaire /dev/sdb1, de taille légèrement supérieure à celle de /dev/sda1. " | ||
+ | |||
+ | Repassez au disque /dev/sda. Cliquez-droit sur /dev/sda1 et choisissez " | ||
+ | |||
+ | ==== En ligne de commande ==== | ||
+ | |||
+ | Remontez votre partition de boot : | ||
+ | sudo mount /boot | ||
+ | |||
+ | Faites un scan des volumes physiques de LVM : | ||
+ | sudo pvscan | ||
+ | PV / | ||
+ | Total: 1 [148,81 GiB] / in use: 1 [148,81 GiB] / in no VG: 0 [0 ] | ||
+ | Cela signifie que le volume physique (PV) /dev/sda5 est inclus dans le groupe de volumes (VG) nommé ici delphy (bien sûr le vôtre porte un autre nom). | ||
+ | |||
+ | Déclarez /dev/sdb5 comme volume physique : | ||
+ | sudo pvcreate /dev/sdb5 | ||
+ | Physical volume "/ | ||
+ | |||
+ | Vérifiez qu'il existe bien, mais n'est pas encore attribué à un groupe de volumes : | ||
+ | sudo pvscan | ||
+ | PV / | ||
+ | PV / | ||
+ | Total: 2 [614,28 GiB] / in use: 1 [148,81 GiB] / in no VG: 1 [465,47 GiB] | ||
+ | |||
+ | Attribuez /dev/sdb5 à votre groupe de volumes (ici delphy). Ce groupe de volumes est " | ||
+ | sudo vgextend delphy /dev/sdb5 | ||
+ | Volume group " | ||
+ | |||
+ | Vérification : | ||
+ | sudo pvscan | ||
+ | PV / | ||
+ | PV / | ||
+ | Total: 2 [614,27 GiB] / in use: 2 [614,27 GiB] / in no VG: 0 [0 ] | ||
+ | |||
+ | Lancez enfin le déplacement des données, du volume physique /dev/sda5 vers le volume physique /dev/sdb5 : | ||
+ | sudo pvmove /dev/sda5 /dev/sdb5 | ||
+ | /dev/sda5: Moved: 0,3% | ||
+ | /dev/sda5: Moved: 0,7% | ||
+ | /dev/sda5: Moved: 1,0% | ||
+ | /dev/sda5: Moved: 1,3% | ||
+ | ... | ||
+ | /dev/sda5: Moved: 99,8% | ||
+ | /dev/sda5: Moved: 100,0% | ||
+ | |||
+ | Attention, l' | ||
+ | |||
+ | Vérifiez que le contenu de /dev/sda5 a bien été transféré sur /dev/sdb5 : | ||
+ | sudo pvscan | ||
+ | PV / | ||
+ | PV / | ||
+ | En effet, la totalité de /dev/sda5 est libre, et /dev/sdb5 est occupée par les données transférées. | ||
+ | |||
+ | Supprimez /dev/sda5 du groupe de volumes delphy : | ||
+ | sudo vgreduce delphy /dev/sda5 | ||
+ | Removed "/ | ||
+ | |||
+ | Vérifiez : | ||
+ | sudo pvscan | ||
+ | PV / | ||
+ | PV / | ||
+ | Total: 2 [614,28 GiB] / in use: 1 [465,46 GiB] / in no VG: 1 [148,81 GiB] | ||
+ | |||
+ | Enlevez le disque des volumes physiques : | ||
+ | sudo pvremove /dev/sda5 | ||
+ | Labels on physical volume "/ | ||
+ | |||
+ | **Vous pouvez désormais enlever le disque.** | ||
+ | ==== Finalisation ==== | ||
+ | |||
+ | Réinstallez GRUB sur le MBR de votre disque dur : | ||
+ | sudo grub-install /dev/sdb | ||
+ | |||
+ | Éteignez votre ordinateur, enlevez l' | ||
+ | |||
+ | |||
+ | ===== Mieux comprendre ou aller plus loin ===== | ||
+ | |||
+ | ==== Notion d'« extent » ==== | ||
+ | |||
+ | Un //extent//, ou « //physical extent// » aussi appelé « PE », est un tout petit morceau d'un groupe de volumes. En fait, au moment de la création d'un groupe de volumes, le ou les disques sont découpés en morceaux de quelques Mio (4 Mio par défaut). Lorsqu' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Glossaire ==== | ||
+ | |||
+ | |abréviation|anglais|français|description| | ||
+ | |VG|**V**olume **G**roup |**G**roupe de **V**olumes | | | ||
+ | |LV|**L**ogical **V**olume|**V**olume **L**ogique| une " | ||
+ | |PV|**P**hysical **V**olume|**V**olume **P**hysique| | | ||
+ | |PE|**P**hysical **E**xtent| **E**tendue **P**hysique|un tout petit morceau d'un groupe de volumes | | ||
+ | |||
+ | ==== LVM et RAID === | ||
+ | |||
+ | Il est tout à fait possible d' | ||
+ | |||
+ | pvcreate /dev/md0 | ||
+ | |||
+ | Bien qu'il soit possible de partitionner le raid ''/ | ||
+ | |||
+ | Donc comme le montre la commande plus haut, le mieux est de donner l' | ||
+ | |||
+ | Vous pouvez aussi aller voir le tutoriel [[tutoriel: | ||
+ | |||
+ | ==== LVM miroir === | ||
+ | Convertir un LVM en miroir | ||
+ | |||
+ | lvconvert -m 1 Volume_Group/ | ||
+ | |||
+ | ou /dev/sdx1 est la partition LVM miroir à ajouter et /dev/sdy1 est la partition LVM de journalisation du miroir | ||
+ | |||
+ | Voir l' | ||
+ | |||
+ | lvs -a -o +devices | ||
+ | |||
+ | LV VG | ||
+ | Logical_Volume | ||
+ | [Logical_Volume_mimage_0] | ||
+ | [Logical_Volume_mimage_1] | ||
+ | [Logical_Volume_mlog] | ||
+ | ==== Interface graphique pour LVM === | ||
+ | |||
+ | Il existe une interface graphique pour LVM, qui permet de manipuler les volumes logiques : system-config-lvm. (disponible dans les dépôts de la 11.04). | ||
+ | |||
+ | Attention néanmoins, celle-ci applique DIRECTEMENT les changements, | ||
+ | |||
+ | |||
+ | ==== Monter une partition ==== | ||
+ | === Obtenir la liste des groupes logiques === | ||
+ | < | ||
+ | lvm vgscan | ||
+ | </ | ||
+ | === Obtenir la liste des partitions === | ||
+ | < | ||
+ | lvm lvs | ||
+ | </ | ||
+ | === Rendre la partition disponible === | ||
+ | < | ||
+ | lvm lvchange -ay / | ||
+ | </ | ||
+ | |||
+ | === Monter la partition === | ||
+ | < | ||
+ | mount / | ||
+ | </ | ||
+ | === Exemple === | ||
+ | < | ||
+ | user@ubuntu: | ||
+ | Reading all physical volumes. This may take a while... | ||
+ | Found volume group " | ||
+ | user@ubuntu: | ||
+ | LV VG | ||
+ | home Groupe_lvm | ||
+ | root | ||
+ | swap Groupe_lvm | ||
+ | |||
+ | user@ubuntu: | ||
+ | user@ubuntu: | ||
+ | user@ubuntu: | ||
+ | </ | ||
+ | ==== Vérifier une partition ==== | ||
+ | === Rendre la partition disponible === | ||
+ | < | ||
+ | lvm lvchange -ay / | ||
+ | </ | ||
+ | === Lancer fsck === | ||
+ | < | ||
+ | sudo fsck -f -y / | ||
+ | </ | ||
+ | ==== Références ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | |||
+ | ---- | ||
+ | // |