Guide pratique de LVM Version française du LVM HOWTO A. J. Lewis Emmanuel Araman Adaptation française Camille Huot Relecture de la version française Alain Portal Relecture de la version française Jean-Philippe Guérard Préparation de la publication de la v.f. Version : 0.19.fr.1.0 Copyright © 2002-2003-NaN Sistina Software, Inc Copyright © 2004-2005-NaN Red Hat, Inc Copyright © 2005-2006-NaN Terrascale Technologies, Inc Copyright © 2006 Rackable Systems, Inc Copyright © 2004-2007-NaN Emmanuel Araman, Camille Huot, Alain Portal, Jean-Philippe Guérard Vous est autorisé à copier, distribuer et modifier ce document selon les termes de la Licence de documentation libre GNU (GFDL), version 1.2 ou ultérieure, telle que publiée par la Free Software Foundation ; sans section inaltérable, ni texte de première de couverture, ni texte de quatrième de couverture. La section « GNU Free Documentation License » contient une copie de cette licence. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Ce document est distribué dans l'espoir qu'il sera utile mais SANS AUCUNE GARANTIE, explicite ou implicite. Même si tous les efforts ont été faits pour assurer l'exactitude des informations fournies ici, les auteurs, éditeurs, responsables des mises à jours et contributeurs n'assument AUCUNE RESPONSABILITÉ pour les erreurs ou les dommages, directs ou indirects, qui pourraient résulter de l'utilisation des informations ci-incluses. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author(s)/editor(s)/maintainer(s)/contributor(s) assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the information documented herein. 28 janvier 2007 +------------------------------------------------------------------------+ | Historique des versions | |------------------------------------------------------------------------| | Version 0.19.fr.1.0 | 2007-01-28 | EA | |------------------------------------------------------------------------| | Mise à jour de la version française. | |------------------------------------------------------------------------| | Version 0.14.fr.1.0 | 2004-10-11 | EA, CH, AP, JPG | |------------------------------------------------------------------------| | Première traduction française. | |------------------------------------------------------------------------| | Version 0.19 | 2006-11-27 | AJL | |------------------------------------------------------------------------| | Clarification des conditions pour les sauvegardes instantanées dans | | [1]Section 8, « Les instantanés (snapshots) » et ajout d'une remarque | | sur le redimensionnement de la source d'un instantané (Clarified full | | snapshot conditions in [2]Section 8, « Les instantanés (snapshots) » | | and [3]Section 4.1, « Créer le volume d'instantané » and added a note | | about resizing the origin of a snapshot) ; correction des droits | | d'utilisation (Fixed Rackable copyright) ; correction de l'adresse | | e-mail (Fixed e-mail address). | |------------------------------------------------------------------------| | Version 0.18 | 2006-11-27 | AJL | |------------------------------------------------------------------------| | Clarification sur l'utilisation du disque complet dans [4]Section 1, | | « Initialiser des disques ou des partitions de disques » (Clarify | | whole disk usage in [5]Section 1, « Initialiser des disques ou des | | partitions de disques ») ; mise à jour des droits d'utilisation | | (Updated copyright) ; mise à jour de l'adresse e-mail (Updated e-mail | | address). | |------------------------------------------------------------------------| | Version 0.17 | 2005-10-03 | AJL | |------------------------------------------------------------------------| | Ajout d'une entrée dans la FAQ sur la taille maximale des LVs avec | | LVM 2 (Added FAQ entry for max size of LVs in LVM2) ; ménage dans le | | paragraphe "Récupération des méta-données d'un volume physique" (Did | | some cleanup of "Recover physical volume metadata" section) ; mise à | | jour de l'adresse e-mail (Updated e-mail address). | |------------------------------------------------------------------------| | Version 0.16 | 2005-07-15 | AJL | |------------------------------------------------------------------------| | Ajout d'informations relatives au scripts de démarrage de LVM 2 (Added | | lvm2 boot-time scripts info) ; ajout du paragraphe "Récupération des | | méta-données d'un volume physique" - remerciements à Maximilian Attems | | pour le patch (Added "Recover physical volume metadata" section - | | thanks to Maximilian Attems for the patch). | |------------------------------------------------------------------------| | Version 0.15 | 2005-06-09 | AJL | |------------------------------------------------------------------------| | Suppression des références à xfs_freeze, qui ne sont plus nécessaires | | (Removed references to xfs_freeze - it is no longer needed) ; mise à | | jour du paragraphe sur les instantanés dans le chapitre "Anatomie de | | LVM" (Updated snapshots subsection in Anatomy of LVM section) ; ajout | | de plusieurs entrées dans la FAQ LVM 2 (Added a couple entries to the | | LVM2 FAQ) ; correction de plusieurs coquilles (Fixed a couple typos). | |------------------------------------------------------------------------| | Version 0.14 | 2004-10-06 | AJL | |------------------------------------------------------------------------| | Ajout d'une référence au script lvm2_createinitrd dans les sources ; | | petite mise à jour de l'exemple de lvcreate ; ajout de « vgchange | | -ay » dans la recette « Déplacer un groupe de volumes vers un autre | | système » (Added reference to lvm2_createinitrd in source tree; | | Adjusted lvcreate example slightly; Added 'vgchange -ay' in 'Moving a | | volume group to another system' recipe). | |------------------------------------------------------------------------| | Version 0.13 | 2004-08-16 | AJL | |------------------------------------------------------------------------| | Clarification de la description sur les liens ; correction du nombre | | majeur du périphérique de contrôle de dm ; suppression de /boot de vg | | dans l'exemple de petite configuration LVM ; ajout de commentaires sur | | /boot et / dans LVM ; suppression d'un lien mort (Clarify symlink farm | | description; Fix dm control device major number; Remove /boot from vg | | in small lvm setup example; Add notes about /boot and / on LVM; Remove | | outdated link). | |------------------------------------------------------------------------| | Version 0.12 | 2004-06-07 | AJL | |------------------------------------------------------------------------| | Mise à jour de la FAQ sur LVM 2 (Updated LVM 2 FAQ entries) | |------------------------------------------------------------------------| | Version 0.11 | 2004-05-03 | AJL | |------------------------------------------------------------------------| | Mise à jour de la FAQ sur LVM 2 (Updated LVM 2 FAQ entries) | |------------------------------------------------------------------------| | Version 0.10 | 2004-04-22 | AJL | |------------------------------------------------------------------------| | Retrait de -print0 de la commande find suite aux retours indiquant que | | cela ne fonctionne pas (removed -print0 from find command after | | receiving reports that it doesn't work). | |------------------------------------------------------------------------| | Version 0.9 | 2004-04-16 | AJL | |------------------------------------------------------------------------| | Ajout de -print0 à la commande find avant la redirection vers cpio | | (Added -print0 to find command before pipingit to cpio) ; changement | | de la ligne de commande vgimport pour LVM 2 (Changed vgimport command | | line for LVM 2) ; ajout de ext3 au paragraphe de redimensionnement de | | ext2 (Added ext3 to the ext2 resize section) ; mise à jour de la FAQ | | (Updated FAQ) mise à jour des liens (Updated Links section). | |------------------------------------------------------------------------| | Version 0.8 | 2004-02-25 | AJL | |------------------------------------------------------------------------| | Mise à jour de l'emplacement du CVS et des liens FTP (Updated CVS | | locations and FTP links) ; ajout d'un paragraphe sur l'extension d'un | | système de fichiers JFS (Added section on extending a JFS | | filesystem) ; corrections typographiques -- utilisation d'aspell sur | | le document (Fixed typos - Ran aspell against document). | |------------------------------------------------------------------------| | Version 0.7 | 2004-02-16 | AJL | |------------------------------------------------------------------------| | Mise à jour pour inclure les informations sur LVM 2 et le mappeur de | | périphériques (Updated to include LVM 2 and device mapper | | information) mise à jour des adresses électroniques (Updated email | | addresses) ; mise à jour des droits d'utilisation (Updated | | copyright) ; ajout de la FAQ (Added FAQ section) ; ajout de la licence | | (Added document license) ; mise à jour vers DocBook 4.2 (Updated to | | docbook 4.2). | |------------------------------------------------------------------------| | Version 0.6 | 2003-12-09 | AJL | |------------------------------------------------------------------------| | Mise à jour pour LVM 1.0.8 (Updated for LVM 1.0.8) ; réparation d'un | | lien cassé (fixed broken link) ; clarification de la partie sur le | | script d'initialisation RedHat (Clarified redhat init script section). | |------------------------------------------------------------------------| | Version 0.5 | 2003-02-10 | AJL | |------------------------------------------------------------------------| | Mise à jour des informations du script initscript de RedHat pour les | | versions 7.0 et supérieures (Updated Redhat initscript information for | | 7.0 and above) ; ajout des informations pour supprimer une table de | | partitions d'un disque lorsque pvcreate échoue (Added information on | | removing a partition table from a disk if pvcreate fails) ; la taille | | par défaut de PE est désormais de 32 Mo (Default PE size is 32MB | | now) ; mise à jour de la méthode d'instantanés avec XFS (Updated | | method for snapshotting under XFS). | |------------------------------------------------------------------------| | Version 0.4 | 2002-12-16 | AJL | |------------------------------------------------------------------------| | Mise à jour pour LVM 1.0.6 (Updated for LVM 1.0.6). | |------------------------------------------------------------------------| | Version 0.3 | 2002-09-16 | AJL | |------------------------------------------------------------------------| | Suppression de l'exemple de pvmove du chapitre « Opérations de | | commandes » -- nous pointons désormais vers la recette plus détaillée | | sur pvmove qui contient différents avertissements (removed example | | pvmove from Command Operations section - we now just point to the more | | detailed recipe on pvmove that contains various warnings and such). | |------------------------------------------------------------------------| | Version 0.2 | 2002-09-11 | AJL | |------------------------------------------------------------------------| | Mise à jour pour LVM 1.0.5 et conversion vers DocBook XML 4.1.2. | | (Updated for LVM 1.0.5 and converted to DocBook XML 4.1.2). | |------------------------------------------------------------------------| | Version 0.1 | 2002-04-28 | gf | |------------------------------------------------------------------------| | Conversion initiale du source du format Latex de Sistina vers le | | format LinuxDoc du tLDP (Initial conversion from Sistina's LaTeX | | source and import to tLDP in LinuxDoc format). | +------------------------------------------------------------------------+ Résumé Ce document explique comment compiler, installer et configurer le gestionnaire de volumes logiques (LVM) de Linux. Il inclut aussi une description synthétique de LVM. Cette version de guide pratique couvre LVM 2 avec le mappeur de périphériques et LVM 1.0.8. -------------------------------------------------------------------------- Table des matières Introduction 1. Dernière version de ce document 2. Limitations de responsabilité 3. Auteurs 1. Qu'est-ce que LVM ? 2. Qu'est-ce que la gestion par volumes logiques ? 1. Pourquoi en voudrais-je ? 2. Bénéfices de la gestion par volumes logiques sur un petit système 3. Avantages de la gestion par volumes logiques sur un gros système 3. Anatomie de LVM 1. Groupe de volumes (Volume Group, VG) 2. Volume physique (Physical Volume, PV) 3. Volume logique (Logical Volume, LV) 4. Extent physique (Physical Extent, PE) 5. Extent logique (Logical Extent, LE) 6. Mettre tout ensemble 7. Types de correspondances (linéaire/répartie) 8. Les instantanés (snapshots) 4. Questions fréquemment posées 1. FAQ LVM 2 2. FAQ LVM 1 5. Obtenir LVM 1. Télécharger le code source 2. Télécharger le code source de développement par CVS 3. Avant de commencer 4. Configuration initiale 5. Récupération du code source 6. Mise à jour du code 7. Commencer un projet 8. Bidouiller le code 9. Conflits 6. Construire les modules du noyau 1. Construire le module noyau device-mapper 2. Construire le module du noyau pour LVM 1 2.1. Fabriquer un correctif pour votre noyau 2.2. Construire le module LVM pour Linux 2.2.17+ 2.3. Compiler les modules LVM pour Linux 2.4 2.4. Vérifier le système de fichiers proc 7. Scripts de démarrage pour LVM 1 1. Caldera 2. Debian 3. Mandrake 4. Redhat 5. Slackware 6. SuSE 8. Scripts de démarrage pour LVM 2 9. Compiler LVM à partir des sources 1. Compiler la bibliothèque et les utilitaires LVM 2. Installer la bibliothèque LVM et les utilitaires 3. Supprimer la bibliothèque LVM et les utilitaires 10. Migrer d'une version précédente de LVM vers LVM 1.0.8 1. Migrer vers LVM 1.0.8 avec une partition racine non LVM 2. Migrer vers LVM 1.0.8 avec une partition racine en LVM et initrd 11. Tâches courantes 1. Initialiser des disques ou des partitions de disques 2. Créer un groupe de volumes 3. Activer un groupe de volumes 4. Enlever un groupe de volumes 5. Ajouter un volume physique à un groupe de volumes 6. Supprimer un volume physique d'un groupe de volumes 7. Créer un volume logique 8. Supprimer un volume logique 9. Étendre un volume logique 10. Réduire un volume logique 11. Migrer des données hors d'un volume physique 12. Partitionnement de disques 1. Plusieurs partitions sur le même disque 2. Étiquettes de disque Sun (Sun disk labels) 13. Recettes 1. Mettre en place LVM avec trois disques SCSI 1.1. Préparation des disques 1.2. Configuration du groupe de volumes 1.3. Création du volume logique 1.4. Création du système de fichiers 1.5. Test du système de fichiers 2. Mise en place de LVM sur trois disques SCSI avec répartition (striping) 2.1. Préparation des partitions de disque 2.2. Configuration du groupe de volumes 2.3. Création du volume logique 2.4. Création du système de fichiers 2.5. Test du système de fichiers 3. Ajouter un nouveau disque dans un système avec plusieurs disques SCSI 3.1. Situation actuelle 3.2. Préparation du partitionnement du disque 3.3. Ajout des nouvelles partitions au groupe de volumes 3.4. Extension des systèmes de fichiers 3.5. Remontage des volumes étendus 4. Faire une sauvegarde avec un instantané (snapshot) 4.1. Créer le volume d'instantané 4.2. Monter le volume d'instantané 4.3. Faire la sauvegarde 4.4. Supprimer l'instantané 5. Enlever un disque 5.1. Distribuer les anciens extents vers des disques existants du groupe de volumes 5.2. Distribuer les anciens extents sur un nouveau disque de remplacement 6. Déplacer un groupe de volumes vers un autre système 6.1. Démonter le système de fichiers 6.2. Marquer le groupe de volumes comme inactif 6.3. Exporter le groupe de volumes 6.4. Importer le groupe de volumes 6.5. Activer le groupe de volumes 6.6. Monter le système de fichiers 7. Diviser un groupe de volumes 7.1. Déterminer l'espace libre 7.2. Déplacer les données des disques à réutiliser 7.3. Créer un nouveau groupe de volumes 7.4. Enlever le volume restant 7.5. Créer le nouveau volume logique 7.6. Créez un système de fichiers sur le volume 7.7. Montez le nouveau volume 8. Convertir le système de fichiers racine en LVM 1 8.1. Démarrer en mode mono-utilisateur 8.2. Utiliser Parted 8.3. Redémarrer 8.4. Vérifier les options de configuration du noyau 8.5. Ajuster le type de partition 8.6. Configurer LVM 1 pour la nouvelle configuration 8.7. Créer le système de fichiers 8.8. Mise à jour de /etc/fstab 8.9. Créez une image disque RAM d'initialisation pour LVM 1 8.10. Mise à jour de /etc/lilo.conf 8.11. Lancez lilo pour écrire le nouveau secteur de boot 8.12. Redémarrer avec LVM 8.13. Ajoutez le reste du disque dans LVM 9. Restaurer les méta-données d'un volume physique A. Opérations dangereuses 1. Restaurer les UUID de VG avec uuid_fixer 2. Partager des volumes LVM B. Signaler des erreurs ou des bogues C. Contacts et liens 1. Listes de diffusion 2. Liens D. GNU Free Documentation License 1. PREAMBLE 2. APPLICABILITY AND DEFINITIONS 3. VERBATIM COPYING 4. COPYING IN QUANTITY 5. MODIFICATIONS 6. COMBINING DOCUMENTS 7. COLLECTIONS OF DOCUMENTS 8. AGGREGATION WITH INDEPENDENT WORKS 9. TRANSLATION 10. TERMINATION 11. FUTURE REVISIONS OF THIS LICENSE 12. ADDENDUM: How to use this License for your documents Introduction Table des matières 1. Dernière version de ce document 2. Limitations de responsabilité 3. Auteurs Ce document essaie de rassembler tous les éléments nécessaires pour obtenir LVM et le faire fonctionner. Il traite l'ensemble du processus pour l'obtenir, le compiler, l'installer et le mettre en ½uvre. Il fournit aussi des liens vers des configurations testées de LVM. Cette version de guide pratique couvre LVM 2 et LVM 1.0.8. Toutes les versions précédentes de LVM sont considérées comme obsolètes et sont gardées uniquement pour des raisons historiques. Ce document n'a pas pour objet d'essayer d'expliquer et décrire le fonctionnement de ces versions. 1. Dernière version de ce document Vous trouverez la plus récente version française de ce document à l'adresse : http://www.traduc.org/docs/howto/lecture/LVM-HOWTO.html [http://www.traduc.org/docs/howto/lecture/LVM-HOWTO.html]. La dernière version originale de ce guide pratique est disponible sur le serveur CVS du Projet de documentation Linux avec les autres guides pratiques (howto). Vous pouvez l'obtenir en faisant un checkout de « LDP/howto/docbook/LVM-HOWTO.xml » sur le serveur CVS du LDP. Vous devriez toujours pouvoir obtenir une version lisible de ce guide pratique à l'adresse : http://www.tldp.org/HOWTO/LVM-HOWTO.html [http://www.tldp.org/HOWTO/LVM-HOWTO.html]. 2. Limitations de responsabilité This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author(s)/editor(s)/maintainer(s)/contributor(s) assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the information documented herein. Ce document est distribué dans l'espoir qu'il sera utile mais SANS AUCUNE GARANTIE, explicite ou implicite. Même si tous les efforts ont été faits pour assurer l'exactitude des informations documentées ici, les auteurs, éditeurs, mainteneurs, contributeurs, traducteurs n'assument AUCUNE RESPONSABILITÉ pour les erreurs ou les dommages, directs ou indirects, qui pourraient résulter de l'utilisation des informations documentées ici. 3. Auteurs Liste de tous ceux qui ont écrit dans ce document. * AJ Lewis * Joe Thornber * Patrick Caulfield * Alasdair Kergon * Jochen Radmacher - Informations sur l'extension de JFS S'il vous plaît, veuillez prévenir le mainteneur du guide pratique si vous pensez devoir être dans la liste ci-dessus. Chapitre 1. Qu'est-ce que LVM ? LVM est un gestionnaire de volumes logiques (Logical Volume Manager) pour le système d'exploitation Linux. Il existe désormais deux versions de LVM pour Linux : * LVM 2 - La dernière et meilleure version de LVM pour Linux. LVM 2 est presque entièrement compatible avec les volumes créés avec LVM 1, à l'exception des instantanés (il faut supprimer les volumes d'instantanés avant de passer à LVM 2). LVM 2 utilise le mappeur de périphériques du noyau Linux. Le mappeur de périphériques est inclus dans les noyaux 2.6. Des mises à jour sont disponibles pour les noyaux 2.4 récents. * LVM 1 - La version présente dans les noyaux 2.4. LVM 1 est un produit mature et considéré comme stable depuis plusieurs années. Le pilote noyau pour LVM 1 est inclus dans les noyaux 2.4, mais cela ne veut pas dire que votre noyau 2.4.x est à jour de la dernière version de LVM. Regardez dans le fichier [6]README pour obtenir les dernières informations sur les versions de noyaux possédant le code le plus récent. Chapitre 2. Qu'est-ce que la gestion par volumes logiques ? Table des matières 1. Pourquoi en voudrais-je ? 2. Bénéfices de la gestion par volumes logiques sur un petit système 3. Avantages de la gestion par volumes logiques sur un gros système La gestion par volumes logiques permet une gestion de plus haut niveau des problèmes de stockage sur disque par rapport à l'approche traditionnelle avec des disques et des partitions. Cela apporte à l'administrateur système une bien meilleure flexibilité pour allouer de l'espace aux applications et aux utilisateurs. Les volumes de stockage créés au moyen du gestionnaire de volumes logiques peuvent être redimensionnés et déplacés à la demande, bien que cela puisse nécessiter une mise à jour des utilitaires des systèmes de fichiers. Le gestionnaire de volumes logiques autorise aussi la gestion de volumes logiques par groupes d'utilisateurs, ce qui permet à l'administrateur système de gérer des groupes de volumes en utilisant un nommage compréhensible avec, par exemple, des noms comme « developpement » et « ventes » plutôt que les noms des disques physiques comme « sda » et « sdb ». 1. Pourquoi en voudrais-je ? La gestion par volumes logiques est traditionnellement associée aux grosses installations contenant de nombreux disques mais elle est également appropriée pour les petites installations avec un ou deux disques. 2. Bénéfices de la gestion par volumes logiques sur un petit système Le partitionnement du disque dur est l'une des décisions difficiles pour un nouvel utilisateur de Linux. La nécessité de devoir estimer précisément l'espace disque pour les fichiers systèmes et utilisateurs rend l'installation plus complexe que nécessaire et certains utilisateurs choisissent simplement de mettre toutes leurs données sur une seule grosse partition pour essayer de contourner ce problème. Une fois que l'utilisateur (ou le programme d'installation) a déterminé l'espace nécessaire pour /home, /usr et /, il arrive fréquemment qu'une des partitions soit saturée alors qu'il reste encore plein d'espace libre sur une autre partition. Avec la gestion par volumes logiques, le disque entier est alloué à un groupe de volumes et des volumes logiques sont créés pour contenir les systèmes de fichiers /, /usr et /home. Si, par exemple, le volume logique /home est plus tard saturé mais qu'il reste de l'espace libre dans /usr, alors il est possible de réduire /usr de quelques mégaoctets et de réallouer cet espace à /home. Une autre solution est d'allouer un espace minimal pour chaque volume logique et de laisser une partie de l'espace disque non alloué. Ensuite, lorsque les partitions commencent à être remplies, elles peuvent être étendues suivant les besoins. Par exemple : Joe achète un PC avec 8,4 Go d'espace disque et installe Linux avec le partitionnement suivant : /boot /dev/hda1 10 Mo swap /dev/hda2 256 Mo / /dev/hda3 2 Go /home /dev/hda4 6 Go Il pense que cette répartition optimisera l'espace disponible pour tous ses fichiers MP3. Quelque temps plus tard, Joe décide qu'il veut installer la dernière suite bureautique et le dernier environnement graphique disponible, mais il réalise que la partition racine n'est pas assez grande. Par contre, puisqu'il a archivé tous ses MP3 grâce à son nouveau graveur DVD, il lui reste plein d'espace libre dans /home. Les différentes possibilités qui s'offrent à lui ne sont pas satisfaisantes : 1. Reformater le disque, modifier le partitionnement et tout réinstaller. 2. Acheter un nouveau disque et trouver un nouveau partitionnement qui demandera le moins de déplacements de données. 3. Utiliser un lien symbolique de / vers /home et installer le nouveau logiciel dans /home. Avec LVM, tout cela devient beaucoup plus facile : Jane achète un PC identique mais utilise LVM pour diviser son disque de manière similaire : /boot /dev/hda1 10 Mo swap /dev/vg00/swap 256 Mo / /dev/vg00/root 2 Go /home /dev/vg00/home 6 Go [7][Note] Note La partition de démarrage /boot n'est pas incluse dans le LV car les chargeurs de démarrage ne gèrent pas encore les volumes LVM. Il est possible que le démarrage sur une partition LVM fonctionne, mais vous risquez de vous retrouvez avec un système non amorçable. [8][Avertissement] Seuls les utilisateurs avancés peuvent envisager de passer leur partition racine en LVM Pour passer la partition racine en LVM, une image initrd doit activer le LV racine au démarrage. Si le noyau est mis à jour sans créer l'image initrd nécessaire, le noyau ne pourra pas démarrer. Les nouvelles distributions incluent LVM dans leurs scripts mkinitrd ainsi que dans leurs images initrd, donc cela va devenir de moins en moins problématique. Lorsque Jane rencontre le même problème, elle peut réduire la taille de /home d'un gigaoctet et rajouter cet espace dans la partition racine. Supposons que Joe et Jane remplissent aussi la partition /home et décident d'ajouter un nouveau disque de 20 Go dans leur système. Joe formate le disque entièrement dans une seule partition (/dev/hdb1) et l'utilise comme /home en y déplaçant les données de son /home existant. Il lui reste alors 6 Go inutilisés qu'il peut faire apparaître comme une extension de /home avec un lien symbolique, /home/joe/anciens-mp3 par exemple. Jane ajoute simplement le nouveau disque dans son groupe de volumes existant et étend son /home pour inclure le nouveau disque. Ou bien, elle pourrait déplacer les données de /home de l'ancien vers le nouveau disque et ensuite étendre le volume racine existant pour couvrir tout l'ancien disque. 3. Avantages de la gestion par volumes logiques sur un gros système Les avantages de la gestion par volumes logiques sont plus évidents sur les gros systèmes avec de nombreux disques. Gérer une importante ferme de disques prend beaucoup de temps et peut s'avérer particulièrement complexe si le système comporte de nombreux disques de tailles différentes. Gérer les problèmes d'espace, généralement conflictuels, entre les différents utilisateurs peut devenir un cauchemar. Les différents groupes de volumes et volumes logiques, qui peuvent être agrandis autant que nécessaire, peuvent être alloués à des groupes d'utilisateurs. L'administrateur peut « garder en réserve » de l'espace jusqu'à ce qu'il soit requis. Cet espace peut alors être ajouté au groupe de volumes qui en a le plus besoin. Quand de nouveaux disques sont ajoutés au système, il n'est plus nécessaire de déplacer les fichiers des utilisateurs pour optimiser le nouvel espace de stockage. Il suffit simplement d'ajouter le nouveau disque à un ou plusieurs groupes de volumes et d'étendre les volumes logiques suivant les besoins. Il est aussi facile de se séparer des anciens disques en déplaçant les données sur des disques plus récents. Ceci peut être effectué à chaud, sans coupure de service pour l'utilisateur. Chapitre 3. Anatomie de LVM Table des matières 1. Groupe de volumes (Volume Group, VG) 2. Volume physique (Physical Volume, PV) 3. Volume logique (Logical Volume, LV) 4. Extent physique (Physical Extent, PE) 5. Extent logique (Logical Extent, LE) 6. Mettre tout ensemble 7. Types de correspondances (linéaire/répartie) 8. Les instantanés (snapshots) Le schéma suivant donne une vision générale des composants d'un système à base de LVM. +-- Groupe de volumes (Volume Group) ------------+ | | | +----------------------------------------+ | | PV | PE | PE | PE | PE | PE | PE | PE | PE | | | +----------------------------------------+ | | . . . . | | . . . . | | +----------------------------------------+ | | LV | LE | LE | LE | LE | LE | LE | LE | LE | | | +----------------------------------------+ | | . . . . | | . . . . | | +----------------------------------------+ | | PV | PE | PE | PE | PE | PE | PE | PE | PE | | | +----------------------------------------+ | | | +------------------------------------------------+ Voici une autre façon de visualiser ceci (grâce à la gentillesse d'Erik Bågfors de la liste de diffusion linux-lvm) : hda1 hdc1 (PV dans des partitions ou disques entiers) \ / \ / diskvg (VG) / | \ / | \ usrlv rootlv varlv (LV) | | | ext2 reiserfs xfs (Systèmes de fichiers) 1. Groupe de volumes (Volume Group, VG) Le groupe de volumes est l'abstraction de plus haut niveau utilisée dans LVM. C'est un ensemble de volumes logiques et physiques au sein d'une seule unité d'administration. 2. Volume physique (Physical Volume, PV) Un volume physique est typiquement un disque dur, bien que cela puisse aussi être un périphérique qui « ressemble » à un disque dur (par exemple, un périphérique de RAID logiciel). 3. Volume logique (Logical Volume, LV) C'est l'équivalent d'une partition de disque d'un système sans LVM. Le LV est visible comme un périphérique de bloc standard. En tant que tel, le LV peut contenir un système de fichiers. (Ex : /home.) 4. Extent physique (Physical Extent, PE) Chaque volume physique est divisé en morceaux de données, appelés extents physiques. Ces extents ont une taille identique à celle des extents logiques du groupe de volumes. 5. Extent logique (Logical Extent, LE) Chaque volume logique est divisé en morceaux de données, appelés extents logiques. La taille d'extents est la même pour tous les volumes logiques du groupe de volumes. 6. Mettre tout ensemble Voici un exemple concret pour aider à la compréhension : Prenons un groupe de volumes nommé VG1, avec une taille d'extent physique de 4 Mo. Nous mettons dans ce groupe de volumes deux partitions de disques, /dev/hda1 et /dev/hdb1. Ces partitions vont devenir les volumes physiques PV1 et PV2 (l'administrateur peut mettre des noms plus parlants). Les PV sont divisés en morceaux de 4 Mo, puisque c'est la taille des extents pour le groupe de volumes. Les disques sont de tailles différentes et nous avons donc 99 extents pour PV1 et 248 pour PV2. Nous pouvons maintenant créer un volume logique de taille entre 1 et 347 (248 + 99) extents. Quand le volume logique est créé, une relation est définie entre les extents logiques et physiques, c'est-à-dire que l'extent logique 1 peut correspondre à l'extent physique 51 de PV1 et les données écrites sur les quatre premiers mégaoctets du volume logique seront en fait écrites sur le 51^ème extent de PV1. 7. Types de correspondances (linéaire/répartie) L'administrateur peut utiliser différentes stratégies pour effectuer la relation entre les extents logiques et les extents physiques : 1. La correspondance linéaire permet d'attribuer une plage de PE à un LV dans l'ordre. Par exemple, les LE 1 à 99 correspondront à PV1 et les LE 100 à 347 à PV2. 2. La correspondance répartie (striped) permet de distribuer des morceaux d'extents logiques sur plusieurs volumes physiques, par exemple : 1er morceau de LE[1] -> PV1[1], 2me morceau de LE[1] -> PV2[1], 3me morceau de LE[1] -> PV3[1], 4me morceau de LE[1] -> PV1[2], et ainsi de suite. Dans certaines situations, cette stratégie peut améliorer les performances du volume logique. [9][Avertissement] Défaut de LVM 1 Avec LVM 1, les LV créés par répartition ne peuvent pas être étendus au-delà des PV où ils ont été créés initialement. Avec LVM 2, les LV répartis peuvent être étendus en concaténant un autre lot de périphériques à la fin du premier lot. Par conséquent, vous pourrez vous retrouver avec un LV composé de deux lots de PE répartis concaténés avec un lot linéaire composé de quatre lots de PE. Je vous ai déjà perdu ? 8. Les instantanés (snapshots) Une des merveilleuses fonctionnalités apportées par LVM est l'instantané. Elle permet à l'administrateur de créer un nouveau périphérique qui est une copie exacte d'un volume logique figé à un moment donné. Typiquement, cela peut être utilisé lors de traitements par lots sur le volume logique, pour une sauvegarde par exemple, lorsque l'on ne veut pas arrêter une application qui est en train de modifier les données. Une fois que l'on a fini d'utiliser l'instantané, l'administrateur système peut tout simplement supprimer le périphérique. Cette fonctionnalité demande à ce que l'instantané soit effectué lorsque le volume logique se trouve dans un état consistant - Le patch "VFS-lock" pour LVM 1 permet de garantir cet état à la création de l'instantané pour certains systèmes de fichiers. Avec le noyau 2.6, de nombreux systèmes de fichiers le font automatiquement à la création de l'instantané, sans avoir besoin d'un patch. [10][Avertissement] Les instantanés pleins sont automatiquement désactivés Lorsque le volume logique d'un instantané est plein, il est désactivé (état inutilisable). Il est donc primordial de lui allouer un espace suffisant. Il n'y a pas de recette magique pour déterminer l'espace requis, qui dépend uniquement de l'utilisation de l'instantané. Cependant, un instantané de taille identique à sa source ne sera jamais saturé. Avec LVM 1, les instantanés sont en lecture seule. Ils fonctionnent par l'utilisation d'une table d'exception qui trace les blocs modifiés : Lorsqu'un bloc est modifié sur la source, il est d'abord copié dans l'instantané, marqué comme modifié dans la table d'exceptions et ensuite modifié sur le volume source avec les nouvelles données. Avec LVM 2, les instantanés sont par défaut en lecture/écriture. Le fonctionnement est similaire aux instantanés en lecture seule avec la possibilité supplémentaire d'écrire sur l'instantané : le bloc est alors marqué comme utilisé dans la table d'exception et ne sera plus récupéré du volume source. Cela ouvre de nouvelles perspectives par rapport au fonctionnement en lecture seule de LVM 1. Par exemple, on peut faire l'instantané d'un volume, le monter et tester un programme expérimental qui modifie les fichiers dessus. Si le résultat n'est pas satisfaisant, on peut le démonter, le supprimer et remonter le système de fichiers originel à la place. C'est aussi utile pour créer des volumes utilisés avec Xen [http://www.cl.cam.ac.uk/Research/SRG/netos/xen/]. Vous pouvez créer une image disque et en faire un instantané que vous pourrez modifier avec une instance spécifique de domU. Vous pourrez ensuite créer un autre instantané de l'image orginale et le modifier avec une autre instance de domU. Comme les instantanés ne stockent que les blocs modifiés, la majeure partie du volume sera partagée entre les domUs. [11][Note] Note Avec le mappeur de périphériques actuel et LVM 2, la source peut être agrandie mais pas réduite. Avec LVM 1, le redimensionnement de la source est impossible. [12][Avertissement] Mise à jour de LVM 1 vers LVM 2 Assurez-vous de supprimer tous les instantanés avant la mise à jour de LVM 1 vers LVM 2. (Cf. Section 1, « FAQ LVM 2 ».) Chapitre 4. Questions fréquemment posées Table des matières 1. FAQ LVM 2 2. FAQ LVM 1 1. FAQ LVM 2 1.1. J'ai LVM 1 installé et fonctionnel sur mon système. Comment faire pour passer à LVM 2 ? 1.2. Un module noyau spécifique est-il nécessaire pour LVM 2 ? 1.3. J'ai des erreurs concernant /dev/mapper/control quand j'essaie d'utiliser les utilitaires LVM 2. Que se passe-t-il ? 1.4. Quelles sont les commandes et types de volumes logiques compatibles avec LVM 2 ? 1.5. Les formats de représentation sur le disque des groupes de volumes et volumes logiques sont-ils différents dans LVM 2 par rapport à LVM 1 ? 1.6. LVM 2 est-il compatible avec les VG et LV créés avec LVM 1 ? 1.7. Puis-je passer mes VG et LV qui proviennent de LVM 1 au format natif de LVM 2 ? 1.8. J'ai mis à jour mon système avec LVM 2, mais les utilitaires échouent constamment en indiquant qu'il ne reste plus de mémoire libre. Que se passe-t-il ? 1.9. Ma partition racine est sur un LV en LVM 1. Comment faire pour passer à LVM 2 ? Qu'est devenu lvmcreate_initrd ? 1.10. Comment se comporte LVM par rapport à un renommage soudain des disques physiques ? 1.11. J'essaie de remplir mon VG et vgdisplay/vgs indique que j'ai 1,87 Go de libre mais quand je fais un lvcreate vg -L1.87G, il indique « pas assez d'extents libres » (« insufficient free extents »). Que se passe-t-il ? 1.12. Quelles sont les différences entre les instantanés de LVM 2 et LVM 1 ? 1.13. Quelle est la taille maximale d'un LV ? 1.1. J'ai LVM 1 installé et fonctionnel sur mon système. Comment faire pour passer à LVM 2 ? Voici les instructions pour démarrer rapidement :) 1. Commencez par enlever tous les instantanés du système. Ils ne sont pas gérés par LVM 2 et empêcheront l'activation de leur volume d'origine au démarrage de LVM 2. 2. Assurez-vous de posséder un moyen de démarrage du système autre que par la partition de démarrage standard. Vous devez avoir les utilitaires de LVM 1, les outils systèmes standards (mount) et un noyau compatible LVM 1 au cas où il serait nécessaire de revenir en arrière pour faire des corrections. 3. Récupérez les sources des utilitaires de LVM 2 et le mappeur de périphériques. Compilez-les. Il faut installer la bibliothèque du mappeur de périphériques avec « make install » avant de compiler les utilitaires de LVM 2. Copiez aussi le script dm/scripts/devmap_mknod.sh dans /sbin. Je recommande d'installer seulement le binaire « lvm » pour l'instant pour garder l'accès aux utilitaires de LVM 1 au cas où. Si vous avez accès à des paquets de LVM 2 et du mappeur de périphériques, vous pouvez les installer à la place mais il faut noter qu'il vont probablement écraser les utilitaires de LVM 1. 4. Récupérez un noyau compatible avec le mappeur de périphériques, compilé en interne ou avec un module. 5. Recherchez les commandes d'activation de LVM dans les scripts de démarrage de la machine. Assurez-vous que le module du mappeur de périphériques est chargé à cet endroit (si vous utilisez le mappeur de périphériques en tant que module) et ajoutez ensuite la commande « /sbin/devmap_mknod.sh; lvm vgscan; lvm vgchange -ay ». 6. Installez le noyau compatible avec le mappeur de périphériques et redémarrez. Si tout se passe bien, vous devriez être en train d'utiliser LVM 2. 1.2. Un module noyau spécifique est-il nécessaire pour LVM 2 ? Non. Il faut le mappeur de périphériques (device-mapper). Les utilitaires de LVM 2 l'utilisent pour s'interfacer avec le noyau et effectuer tout le mappage des interfaces (d'où le nom de mappeur de périphériques). A partir du moment où le mappeur de périphériques est disponible, vous devriez pouvoir utiliser LVM 2. 1.3. J'ai des erreurs concernant /dev/mapper/control quand j'essaie d'utiliser les utilitaires LVM 2. Que se passe-t-il ? La cause première de ce problème est de ne pas avoir lancé la commande « dmsetup mknodes » après le redémarrage avec un noyau utilisant le mappeur de périphériques. Ce script génère le n½ud de contrôle pour le mappeur de périphériques. Si la commande « dmsetup mknodes » n'est pas disponible, ne désespérez pas! (Cependant cela veut probablement dire que vous devriez migrer vers la dernière version de device-mapper.) Il est assez simple de créer le fichier /dev/mapper/control par vous même : 1. Assurez-vous d'avoir chargé le module du mappeur de périphériques s'il n'est pas directement dans le noyau. 2. Tapez : # cat /proc/misc | grep device-mapper | awk '{print $1}' et notez le chiffre affiché. (S'il n'y a rien d'affiché, reportez-vous à l'étape 1.) 3. Tapez : # mkdir /dev/mapper Si vous obtenez une erreur comme quoi /dev/mapper existe déjà, vérifiez que c'est un répertoire et continuez. 4. Tapez : # mknod /dev/mapper/control c 10 $nombre $nombre est le chiffre affiché à l'étape 2. Cela devrait être bon maintenant. 1.4. Quelles sont les commandes et types de volumes logiques compatibles avec LVM 2 ? Si vous utilisez le correctif de l'archive lvm2 pour les noyaux stables 2.4, toutes les fonctionnalités majeures de LVM1 seront compatibles avec les outils de LVM2 (il est toujours nécessaire de supprimer les instantanés avant la mise à jour de LVM 1 vers LVM 2.) Si vous utilisez la version du mappeur de périphériques du noyau 2.6 de kernel.org, les commandes et types de LV suivants ne sont pas compatibles : * pvmove * snapshots Vous pourrez trouver un début de compatibilité avec ces fonctionnalités dans les correctifs instables du mappeur de périphériques [http://people.sistina.com/~thornber/dm/] maintenus par Joe Thornber. 1.5. Les formats de représentation sur le disque des groupes de volumes et volumes logiques sont-ils différents dans LVM 2 par rapport à LVM 1 ? Oui. LVM 2 utilise le format de méta-données lvm 2. Ce format est beaucoup plus flexible que celui de LVM 1. Il supprime ou réduit la plupart des limitations de LVM 1. 1.6. LVM 2 est-il compatible avec les VG et LV créés avec LVM 1 ? Oui. LVM 2 est capable d'activer et de fonctionner avec les VG et LV créés avec LVM 1 à l'exception des instantanés qui doivent être supprimés avant la mise à jour. Les instantanés qui restent après la mise à jour devront être supprimés afin que l'on puisse activer leur volume d'origine avec LVM 2. 1.7. Puis-je passer mes VG et LV qui proviennent de LVM 1 au format natif de LVM 2 ? Oui. vgconvert permet de convertir un VG et tous les LV qu'il contient au nouveau format de méta-données lvm 2. Attention, il n'est pas toujours possible de revenir ensuite aux méta-données lvm 1. 1.8. J'ai mis à jour mon système avec LVM 2, mais les utilitaires échouent constamment en indiquant qu'il ne reste plus de mémoire libre. Que se passe-t-il ? Une des causes possibles de cela est le non positionnement par certaines versions de LVM 1 du champ UUID dans les structures de PV et VG alors qu'elles étaient supposées le faire. (L'utilisateur qui a signalé l'anomalie utilisait une Mandrake 9.2, mais d'autres distributions peuvent être impactées.) Les dernières versions des utilitaires de LVM 2 positionnent les UUID automatiquement s'ils manquent, il vous suffit donc de récupérer une version plus récente que la vôtre et le problème devrait être résolu. Dans le cas contraire, envoyez un message sur la liste de diffusion linux-lvm. 1.9. Ma partition racine est sur un LV en LVM 1. Comment faire pour passer à LVM 2 ? Qu'est devenu lvmcreate_initrd ? Passer à LVM 2 avec sa partition racine en LVM est un peu compliqué, mais pas impossible. Vous devez créer un noyau compatible avec le mappeur de périphériques et installer les utilitaires LVM 2. (Vous devriez faire une sauvegarde des utilitaires de LVM 1 ou trouver un disque de secours avec les utilitaires LVM au cas où vous en auriez besoin avant la fin de la migration.) Ensuite, vous devez trouver un script mkinitrd compatible avec votre distribution et de LVM 2. Voici la liste des scripts mkinitrd que je connais et qui sont compatibles avec LVM 2, classés par distributions : Scripts mkinitrd compatible LVM 2 Fedora Le programme mkinitrd [http://distro.ibiblio.org/pub/linux/distributions/fedora/linux/core/development/i386/Fedora/RPMS/mkinitrd-3.5.21-1.i386.rpm] de la dernière Fedora Core 2 gère LVM 2, mais repose sur un binaire lvm lié statiquement dans la dernière archive LVM 2. Les utilisateurs de Redhat 9 devraient pouvoir l'utiliser. Debian Il existe une version non officielle ici [http://www.poochiereds.net/svn/lvm2/]. Générique Il en existe une version dans la distribution source de LVM 2 dans le répertoire scripts/lvm2_createinitrd/. Voir la documentation dans ce répertoire pour plus de détails. 1.10. Comment se comporte LVM par rapport à un renommage soudain des disques physiques ? Très bien : LVM identifie les PV par leur UUID et non par le nom du périphérique. Chaque disque (PV) possède un UUID, qui est un identifiant unique dans le système. Il est utilisé par « vgscan » pour le reconnaître lorsqu'un nouveau disque est ajouté et change la numérotation du disque. Pour cela, la plupart des distributions lancent vgscan dans les scripts de démarrage pour détecter les ajouts de matériel. Si vous faites des ajouts à chaud, je pense que vous devrez faire cela manuellement. D'un autre coté, si votre VG est activé et utilisé, la renumérotation ne devrait pas l'affecter du tout. L'identifiant est uniquement utilisé lors de l'activation et le pire qu'il puisse arriver sans le vgscan est que l'activation échoue avec un message indiquant qu'il manque un PV. [13][Note] Note Des problèmes de fonctionnement ou l'enlèvement d'un disque en cours d'utilisation par LVM cause des problèmes avec l'utilisation en cours et les futures activations du VG concerné. 1.11. J'essaie de remplir mon VG et vgdisplay/vgs indique que j'ai 1,87 Go de libre mais quand je fais un lvcreate vg -L1.87G, il indique « pas assez d'extents libres » (« insufficient free extents »). Que se passe-t-il ? Le chiffre 1,87 Go est arrondi à deux décimales, donc il correspond à quelque chose comme 1,866 Go. C'est juste une présentation à l'écran du chiffre pour donner une idée générale de la taille du VG. Si vous voulez donner une taille exacte, vous devez utiliser les extents à la place de quelque multiple d'octets. Dans le cas de vgdisplay, utilisez le chiffre donné par Free PE à la place. Free PE / Size 478 / 1.87 GB ^^^ Vous devriez donc lancer la commande suivante : # lvcreate vg -l478 Remarquez qu'à la place d'un « L » majuscule, il faut utiliser un « l » minuscule pour dire à LVM d'utiliser les extents plutôt que les octets. Dans le cas de vgs, il est nécessaire de lui demander explicitement le nombre d'extents disponibles : # vgs -o +vg_free_count,vg_extent_count Cela demande à vgs de rajouter le nombre d'extents libres et leur nombre total à la fin de la liste produite par vgs. Utilisez le nombre d'extents libres de la même façon que pour le cas de vgdisplay. 1.12. Quelles sont les différences entre les instantanés de LVM 2 et LVM 1 ? Avec LVM 2, les instantanés sont en lecture/écriture par défaut, alors qu'ils sont en lecture seule avec LVM 1. Voir Section 8, « Les instantanés (snapshots) » pour plus de détails. 1.13. Quelle est la taille maximale d'un LV ? Cela dépend de l'architecture CPU et du noyau utilisé : * Pour les noyaux 2.4, la taille maximale d'un LV est de 2TB. Cependant, pour certains noyaux plus anciens, la limite était de 1TB en raison d'un problème de nombres signés au niveau des blocs. La distribution Red Hat Enterprise Linux Update 4 a un correctif pour autoriser les LVs de 2TB. Consultez les informations de votre distribution pour ce problème. * Pour les CPUs 32 bits avec les noyaux 2.6, la taille maximale des LVs est de 16TB. * Pour les CPUs 64 bits avec les noyaux 2.6, la taille maximale des LVs est de 6EB. (Oui, c'est un nombre très gros.) 2. FAQ LVM 1 2.1. Quand y aura-t-il des infos ici ? 2.1. Quand y aura-t-il des infos ici ? Quand les gens commenceront à envoyer des entrées de FAQ ;) Chapitre 5. Obtenir LVM Table des matières 1. Télécharger le code source 2. Télécharger le code source de développement par CVS 3. Avant de commencer 4. Configuration initiale 5. Récupération du code source 6. Mise à jour du code 7. Commencer un projet 8. Bidouiller le code 9. Conflits La première chose à faire est de récupérer une copie de LVM. * Télécharger une archive de LVM par FTP. * Télécharger le code source en développement continu par CVS. 1. Télécharger le code source * [14]Mappeur de périphériques * [15]LVM 2 Assurez-vous de télécharger aussi les sources du mappeur de périphériques. * [16]LVM 1 [17][Note] Note Le correctif du noyau pour LVM 1 doit être généré avec les sources de LVM 1. Plus d'informations sur ceci peuvent être trouvées dans la Section 2, « Construire le module du noyau pour LVM 1 ». 2. Télécharger le code source de développement par CVS Remarque : L'état du code dans l'entrepôt CVS évolue sauvagement. Il contient des erreurs, certaines peuvent faire planter LVM ou le noyau. Il peut aussi ne pas compiler du tout. Considérez-le comme du code de qualité alpha et que vous pourriez perdre des données... Vous êtes prévenu. 3. Avant de commencer Pour suivre la progression des développements de LVM, abonnez-vous aux listes de diffusion de LVM, linux-lvm et la liste de commit appropriée. (Cf. Section 1, « Listes de diffusion ».) Pour construire LVM à partir des sources CVS, plusieurs outils GNU sont nécessaires : * le client CVS version 1.9 ou supérieure ; * GCC 2.95.2 ; * GNU make 3.79 ; * autoconf version 2.13 ou supérieure. 4. Configuration initiale Pour vous rendre la vie plus facile lors des mises à jour futures de l'arbre CVS, créez le fichier $HOME/.cvsrc et mettez-y les lignes suivantes qui permettent de configurer le comportement par défaut des commandes CVS les plus utilisées. Faites-le avant de continuer plus loin. diff -u -b -B checkout -P update -d -P De même, si vous utilisez une connexion à bas débit (comme un modem RTC), vous voudrez probablement rajouter une ligne contenant cvs -z5 dans ce fichier. Cela active un niveau de compression qui sera utilisé par toutes les commandes CVS. 5. Récupération du code source * Bibliothèque et utilitaires du mappeur de périphériques La bibliothèque du mappeur de périphériques est nécessaire pour construire LVM 2. Vous devez vous authentifier lors de votre premier chargement : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm login cvs Le mot de passe est « cvs ». La commande ne renvoie rien en cas de succès et renvoie un message d'erreur en cas d'échec. Seule la première connexion nécessite une authentification explicite. Toutes les commandes CVS suivantes lisent le mot de passe stocké dans le fichier $HOME/.cvspass pour l'authentification. La commande de « checkout » suivante permet de récupérer une copie du code : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/dm checkout device-mapper Cela crée un nouveau répertoire device-mapper dans le répertoire courant. Il contient la version la plus à jour possible du code du mappeur de périphériques. * LVM 2 Vous devez vous authentifier lors de votre premier chargement : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 login cvs Le mot de passe est « cvs ». La commande ne renvoie rien en cas de succès et un message d'erreur en cas d'échec. Seule la première connexion nécessite une authentification explicite. Toutes les commandes CVS suivantes lisent le mot de passe stocké dans le fichier $HOME/.cvspass pour l'authentification. La commande de « checkout » suivante permet de récupérer une copie du code : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm2 checkout LVM2 Cela crée un nouveau répertoire LVM2 dans le répertoire courant. Il contient la version la plus à jour possible du code de LVM 2. * LVM 1 Vous devez vous authentifier lors de votre premier chargement : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm login cvs Le mot de passe est « cvs ». La commande ne renvoie rien en cas de succès et un message d'erreur en cas d'échec. Seule la première connexion nécessite une authentification explicite. Toutes les commandes CVS suivantes lisent le mot de passe stocké dans le fichier $HOME/.cvspass pour l'authentification. La commande de « checkout » suivante permet de récupérer une copie du code : # cvs -d :pserver:cvs@sources.redhat.com:/cvs/lvm checkout LVM Cela crée un nouveau répertoire LVM dans le répertoire courant. Il contient la version la plus à jour possible du code de LVM 1. Les commandes CVS fonctionnent depuis n'importe où dans l'arborescence des sources et de façon récursive. Par conséquent, si vous faites une mise à jour à partir du sous répertoire « tools », cela fonctionnera mais uniquement pour le répertoire « tools » et ses sous-répertoires. Les commandes qui suivent supposent que vous êtes à la racine de l'arborescence des sources. 6. Mise à jour du code Les modifications du code sont assez fréquentes dans le dépôt CVS. Elles sont annoncées automatiquement par un envoi dans la liste lvm-commit. Vous pouvez mettre à jour votre copie des sources pour correspondre au dépôt maître avec la commande update. Il n'est pas nécessaire de récupérer une nouvelle copie des sources. Il est beaucoup plus simple et rapide d'utiliser la commande update, car elle télécharge uniquement les modifications des fichiers modifiés depuis la dernière mise à jour. Elle permet aussi de fusionner automatiquement les modifications du dépôt CVS avec les changements que vous auriez pu effectuer en local. Pour cela, il vous suffit juste d'aller dans le répertoire à mettre à jour et de taper la commande suivante : # cvs update Si vous n'avez pas spécifié de balise lors du « checkout », cela mettra à jour vos sources par rapport à la dernière version de la branche principale des sources. Si vous aviez spécifié une balise de branche, cela mettra à jour suivant la dernière version de cette branche. Si vous aviez spécifié une balise de version, cela ne fera rien du tout. 7. Commencer un projet Discutez de l'idée sur la liste de développement avant de commencer. Quelqu'un est peut-être déjà en train de travailler sur le même sujet ou peut avoir des bonnes idées pour le mener à bien. 8. Bidouiller le code Ainsi, vous voulez corriger un bogue ? Développer une fonctionnalité de la liste TODO ? Développer une nouvelle fonctionnalité ? Bidouiller le code ne pourrait pas être plus simple. Utilisez votre copie des sources. Pas besoin de copier les fichiers en .orig ou autres. CVS garde la copie des originaux. Quand votre code fonctionnera et aura été testé du mieux possible avec le matériel dont vous disposez, faites un correctif par rapport à la version current des sources sur CVS. # cvs update # cvs diff > patchfile Envoyez le correctif à la liste linux-lvm ou dm-devel (Section 1, « Listes de diffusion ») avec une description des modifications et ajouts que vous avez effectués. 9. Conflits Si quelqu'un a travaillé sur les mêmes fichiers que vous, il se peut qu'il y ait des modifications conflictuelles. Vous le saurez quand vous mettrez à jour vos sources. # cvs update RCS file: LVM/tools/pvcreate.c,v retrieving revision 1.5 retrieving revision 1.6 Merging differences between 1.5 and 1.6 into pvcreate.c rcsmerge: warning: conflicts during merge cvs server: conflicts found in tools/pvcreate.c C tools/pvcreate.c Pas de panique ! Le fichier original, tel qu'il était avant la mise à jour, est conservé avec le nom .#pvcreate.c.1.5. Vous pouvez toujours le récupérer si les choses se passent mal. Le fichier nommé pvcreate.c contient désormais les deux versions, la vôtre et la nouvelle, des lignes conflictuelles. Il vous reste simplement à ouvrir le fichier et résoudre les conflits en effaçant la mauvaise version des lignes. <<<<<<< pvcreate.c j++; ======= j--; >>>>>>> 1.6 N'oubliez pas de supprimer les lignes avec les symboles « < », « = » et « > ». Chapitre 6. Construire les modules du noyau Table des matières 1. Construire le module noyau device-mapper 2. Construire le module du noyau pour LVM 1 2.1. Fabriquer un correctif pour votre noyau 2.2. Construire le module LVM pour Linux 2.2.17+ 2.3. Compiler les modules LVM pour Linux 2.4 2.4. Vérifier le système de fichiers proc 1. Construire le module noyau device-mapper Le mappeur de périphériques est inclus dans les noyaux 2.6.9 et suivants, donc vous devez juste vérifier qu'il est activé directement dans le noyau ou sous forme de module. Pour cela, vous devez avoir la présence de /sys/class/misc/device-mapper ou de la ligne device-mapper dans /proc/devices. Si aucun n'est présent, essayez modprobe dm_mod et re-vérifiez. Pour les versions de noyau avant le 2.6.9, vous ou votre distribution doit patcher le noyau pour le supporter. Allez voir la page web du mappeur de périphériques [http://sources.redhat.com/dm/] pour plus d'informations. 2. Construire le module du noyau pour LVM 1 Pour utiliser LVM 1, il faut que vous compiliez le module LVM 1 du noyau (recommandé) ou, si vous le préférez, que vous reconstruisiez le noyau avec le code LVM 1 lié statiquement dedans. Votre système Linux est probablement basé sur une des distributions populaires de Linux (Redhat, Debian...) avec laquelle le module LVM 1 est peut-être déjà fourni. Vérifiez la version des utilitaires que vous avez sur votre système en utilisant une des commandes de LVM avec l'option « -h ». Utilisez la commande pvscan -h si vous ne connaissez aucune des commandes. Si le numéro de version en tête du listing de l'aide est 1.0.8, utilisez votre configuration actuelle et sautez le reste de ce chapitre. 2.1. Fabriquer un correctif pour votre noyau Afin de mettre à jour le noyau pour qu'il soit compatible avec LVM v1.0.8, vous devez effectuer les opérations suivantes : 1. Décompresser LVM 1.0.8 : # tar zxf lvm_1.0.8.tar.gz 2. Allez dans le répertoire racine de cette version : # cd LVM/1.0.8 3. Lancez le script de configuration : # ./configure Il faut ajouter l'option --with-kernel_dir à configure si les sources du noyau ne sont pas dans /usr/src/linux. (Lancez ./configure --help pour visualiser toutes les options disponibles.) 4. Allez dans le répertoire PATCHES : # cd PATCHES 5. Lancez « make » : # make Vous devriez maintenant avoir un correctif appelé lvm-1.0.8-$KERNELVERSION.patch dans le répertoire PATCHES. C'est le correctif du noyau pour LVM qui sera utilisé dans la suite de ce guide pratique. 6. Patchez le noyau : # cd /usr/src/linux ; patch -pX < /répertoire/lvm-1.0.8-$KERNELVERSION.patch 2.2. Construire le module LVM pour Linux 2.2.17+ Un noyau de la série 2.2 doit être mis à jour avant de commencer la compilation. Allez voir ailleurs les instructions pour apprendre à appliquer des correctifs au noyau. Correctifs : 1. Correctif rawio Le correctif raw_io de Stephen Tweedie est disponible à http://www.kernel.org/pub/linux/kernel/people/sct/raw-io [http://www.kernel.org/pub/linux/kernel/people/sct/raw-io] 2. Correctif lvm Ce correctif doit être construit à partir du sous-répertoire PATCHES de la distribution de LVM 1. Vous trouverez plus d'informations dans la Section 2.1, « Fabriquer un correctif pour votre noyau ». Une fois que les correctifs ont été correctement appliqués, il faut vous assurer que le module soit bien compilé. Les pilotes LVM 1 se trouvent dans la section « devices » de la configuration du noyau. Vous devriez aussi compiler les informations de /proc pour LVM. Compilez les modules noyau comme d'habitude. 2.3. Compiler les modules LVM pour Linux 2.4 Le noyau 2.4 contient déjà LVM, mais vous devriez vérifier la présence de mises à jour sur le site web de LVM (c'est-à-dire que les noyaux 2.4.9 et inférieurs doivent utiliser le plus récent correctif LVM 1). En configurant le noyau, cherchez LVM 1 dans Multi-device support (RAID and LVM). LVM 1 peut être compilé dans le noyau ou en tant que module. Compilez votre noyau et les modules et installez-les de la manière habituelle. Si vous décidez de compiler LVM en tant que module, il s'appellera lvm-mod.o. Si vous voulez faire des instantanés avec ReiserFS, faites attention à appliquer le correctif linux-2.4.x-VFS-lock (il y en a une copie dans le répertoire LVM/1.0.8/PATCHES). 2.4. Vérifier le système de fichiers proc Si le noyau est compilé avec le système de fichiers /proc (probablement), vous pouvez vérifier la présence de LVM par l'existence du répertoire /proc/lvm. S'il n'existe pas, il se peut que vous ayez à charger le module par la commande : # modprobe lvm-mod Si /proc/lvm n'existe toujours pas, vérifiez soigneusement votre configuration noyau. Quand LVM est actif, il existe des entrées dans /proc/lvm pour tous les volumes physiques, groupes de volumes et volumes logiques. De plus, le « fichier » appelé /proc/lvm/global donne le statut de LVM et montre la version du noyau LVM en cours d'utilisation. Chapitre 7. Scripts de démarrage pour LVM 1 Table des matières 1. Caldera 2. Debian 3. Mandrake 4. Redhat 5. Slackware 6. SuSE Les scripts de démarrage ne sont pas fournis par la distribution de LVM, bien qu'ils soient simples à faire soi-même. Le démarrage de LVM demande juste ces deux commandes : # vgscan # vgchange -ay Et l'arrêt une seule : # vgchange -an Suivez les instructions ci-dessous suivant la distribution de Linux que vous utilisez. 1. Caldera Il est nécessaire d'ouvrir le fichier /etc/rc.d/rc.boot. Insérez les lignes de commandes vgscan et vgchange juste avant les lignes qui disent « Mounting local filesystems ». Vous pouvez aussi modifier le fichier /etc/rc.d/init.d/halt pour désactiver les groupes de volume à l'arrêt de la machine. Insérer la commande vgchange -an près de la fin du fichier, juste après le démontage des systèmes de fichiers ou leur montage en lecture seule et avant le commentaire disant « Now halt or reboot ». 2. Debian Si vous téléchargez le paquet Debian lvm-common (pour LVM 1) ou lvm2, un script d'initialisation devrait être installé pour vous. Si vous installez LVM à partir des sources, vous devez créer votre propre fichier d'initialisation : * Créez le script de démarrage /etc/init.d/lvm contenant les lignes suivantes : #!/bin/sh case "$1" in start) /sbin/vgscan /sbin/vgchange -ay ;; stop) /sbin/vgchange -an ;; restart|force-reload) ;; esac exit 0 * Ensuite, exécutez les commandes : # chmod 0755 /etc/init.d/lvm # update-rc.d lvm start 26 S . stop 82 1 . Remarquez les points dans la dernière commande. 3. Mandrake Aucune modification des scripts d'initialisation ne devrait être nécessaire pour les versions actuelles de Mandrake. 4. Redhat Pour la Redhat 7.0 et supérieure, vous ne devriez pas avoir besoin de modifier de script d'initialisation pour démarrer LVM s'il est inclus dans le noyau. Si LVM est compilé en tant que module, il peut être nécessaire de modifier /etc/rc.d/rc.sysinit pour charger le module en y ajoutant la ligne « modprobe lvm-mod » avant la partie disant : # LVM initialization, take 2 (it could be on top of RAID) if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y fi [18][Note] Note Cette portion de script est pour la RedHat 7.3. Les autres versions peuvent apparaître légèrement différentes. Pour les versions de RedHat antérieures à la 7.0, il est nécessaire de modifier le fichier /etc/rc.d/rc.sysinit. Regardez la ligne qui dit « Mount all other filesystems » et insérez les commandes vgscan et vgchange juste avant celle-ci. Assurez-vous que votre système de fichiers racine est monté en lecture/écriture avant d'utiliser les commandes LVM. Vous voudrez peut-être aussi modifier le fichier /etc/rc.d/init.d/halt pour désactiver les groupes de volumes à l'arrêt de la machine. Insérez la commande : vgchange -an vers la fin du fichier, juste après le remontage des systèmes de fichiers en lecture seule et avant le commentaire qui dit « Now halt or reboot ». 5. Slackware La Slackware 8.1 ne demande aucune mise à jour des scripts de démarrage pour faire fonctionner LVM. Pour les versions précédentes de Slackware 8.1, vous devrez appliquer le correctif suivant à /etc/rc.d/rc.S. cd /etc/rc.d cp -a rc.S rc.S.old patch -p0 < rc.S.diff (Le cp sert à faire une sauvegarde au cas où). ----- snip snip file: rc.S.diff--------------- --- rc.S.or Tue Jul 17 18:11:20 2001 +++ rc.S Tue Jul 17 17:57:36 2001 @@ -4,6 +4,7 @@ # # Mostly written by: Patrick J. Volkerding, # +# Added LVM support PATH=/sbin:/usr/sbin:/bin:/usr/bin @@ -28,19 +29,21 @@ READWRITE=yes fi + # Check the integrity of all filesystems if [ ! READWRITE = yes ]; then - /sbin/fsck -A -a + /sbin/fsck -a / + # Check only the root fs first, but no others # If there was a failure, drop into single-user mode. if [ ? -gt 1 ] ; then echo echo - echo "*******************************************************" - echo "*** An error occurred during the file system check. ***" - echo "*** You will now be given a chance to log into the ***" - echo "*** system in single-user mode to fix the problem. ***" - echo "*** Running 'e2fsck -v -y ' might help. ***" - echo "*******************************************************" + echo "************************************************************" + echo "*** An error occurred during the root file system check. ***" + echo "*** You will now be given a chance to log into the ***" + echo "*** system in single-user mode to fix the problem. ***" + echo "*** Running 'e2fsck -v -y ' might help. ***" + echo "************************************************************" echo echo "Once you exit the single-user shell, the system will reboot." echo @@ -82,6 +85,44 @@ echo -n "get into your machine and start looking for the problem. " read junk; fi + # okay / fs is clean, and mounted as rw + # This was an addition, limits vgscan to /proc thus + # speeding up the scan immensely. + /sbin/mount /proc + + # Initialize Logical Volume Manager + /sbin/vgscan + /sbin/vgchange -ay + + /sbin/fsck -A -a -R + #Check all the other filesystem, including the LVM's, excluding / + + # If there was a failure, drop into single-user mode. + if [ ? -gt 1 ] ; then + echo + echo + echo "*******************************************************" + echo "*** An error occurred during the file system check. ***" + echo "*** You will now be given a chance to log into the ***" + echo "*** system in single-user mode to fix the problem. ***" + echo "*** Running 'e2fsck -v -y ' might help. ***" + echo "*** The root filesystem is ok and mounted readwrite ***" + echo "*******************************************************" + echo + echo "Once you exit the single-user shell, the system will reboot." + echo + + PS1="(Repair filesystem) #"; export PS1 + sulogin + + echo "Unmounting file systems." + umount -a -r + mount -n -o remount,ro / + echo "Rebooting system." + sleep 2 + reboot + fi + else echo "Testing filesystem status: read-write filesystem" if cat /etc/fstab | grep ' / ' | grep umsdos 1> /dev/null 2> /dev/null ; then @@ -111,14 +152,16 @@ echo -n "Press ENTER to continue. " read junk; fi + fi + # remove /etc/mtab* so that mount will create it with a root entry /bin/rm -f /etc/mtab* /etc/nologin /etc/shutdownpid # mount file systems in fstab (and create an entry for /) # but not NFS or SMB because TCP/IP is not yet configured -/sbin/mount -a -v -t nonfs,nosmbfs +/sbin/mount -a -v -t nonfs,nosmbfs,proc # Clean up temporary files on the /var volume: /bin/rm -f /var/run/utmp /var/run/*.pid /var/log/setup/tmp/* --snip snip snip end of file--------------- 6. SuSE Aucun changement ne devrait être nécessaire à partir de la 6.4 puisque LVM y est inclus. Chapitre 8. Scripts de démarrage pour LVM 2 Pour utiliser initrd, vous avez besoin d'avoir les lignes : dmsetup mknodes vgscan --ignorelockingfailure vgchange -ay --ignorelockingfailure dans linuxrc pour pouvoir activer le LV racine avant d'accéder au volume racine. La plupart des distributions semblent maintenant posséder cette configuration dans leur script mkinitrd et tendent aussi à l'avoir dans les scripts d'initialisation du système (rc.sysinit ou équivalent), ce qui active tous les volumes au démarrage. Chapitre 9. Compiler LVM à partir des sources Table des matières 1. Compiler la bibliothèque et les utilitaires LVM 2. Installer la bibliothèque LVM et les utilitaires 3. Supprimer la bibliothèque LVM et les utilitaires 1. Compiler la bibliothèque et les utilitaires LVM Allez dans le répertoire de LVM et faites un ./configure suivi d'un make. Cela créera toutes les bibliothèques et programmes. Si vous en avez besoin, vous pouvez modifier des options avec la commande de configuration. Faites un ./configure --help pour voir les options disponibles. La plupart du temps, ceci sera inutile. Il ne devrait pas y avoir d'erreur dans le processus de compilation. S'il y en a, reportez-vous au chapitre Signaler des erreurs et des bogues pour les signaler. Vous êtes aussi les bienvenus si vous les corrigez et que vous nous envoyez les correctifs. Les correctifs sont habituellement à envoyer à la liste linux-lvm. 2. Installer la bibliothèque LVM et les utilitaires Une fois que les sources compilent correctement, faites simplement un make install pour installer la bibliothèque LVM et les utilitaires sur votre système. 3. Supprimer la bibliothèque LVM et les utilitaires Pour enlever la bibliothèque et les utilitaires que vous venez d'installer, faites make remove. Vous devez avoir les sources originelles utilisées pour l'installation de LVM pour que cela fonctionne. Chapitre 10. Migrer d'une version précédente de LVM vers LVM 1.0.8 Table des matières 1. Migrer vers LVM 1.0.8 avec une partition racine non LVM 2. Migrer vers LVM 1.0.8 avec une partition racine en LVM et initrd Migrer d'une version précédente de LVM vers LVM 1.0.8 devrait être très simple. Nous avons trouvé une méthode pour lire les méta-données des PV version 1 (LVM 0.9.1 Beta7 et précédents) aussi bien que les méta-données des PV version 2 (LVM 0.9.1 Beta8 et LVM 1.0). Attention : Les nouveaux PV initialisés avec LVM 1.0.8 utilisent la structure de disque des PV version 1. Cela signifie que LVM 0.9.1 Beta8 et LVM 1.0 ne peuvent pas lire ou utiliser les PV créés avec la version 1.0.8. 1. Migrer vers LVM 1.0.8 avec une partition racine non LVM Les étapes de la migration sont très simples, mais il est néanmoins recommandé de faire une sauvegarde des données avant. Vous êtes prévenus. 1. Compiler le noyau LVM et les modules Suivez les étapes expliquées dans les Chapitre 5, Obtenir LVM et Section 2, « Construire le module du noyau pour LVM 1 » pour connaître les instructions pour obtenir et compiler les éléments nécessaires de LVM pour le noyau Linux. 2. Compiler les utilitaires LVM Suivez les étapes du Chapitre 9, Compiler LVM à partir des sources pour compiler et installer les utilitaires de LVM. 3. Configurer les scripts de démarrage Assurez-vous d'avoir une configuration correcte des scripts de démarrage comme dans le Chapitre 7, Scripts de démarrage pour LVM 1. 4. Démarrer avec le nouveau noyau Assurez-vous que le chargeur d'amorçage est configuré pour charger le nouveau noyau avec LVM et, si vous utilisez des modules, que la commande insmod lvm-mod soit dans le script de démarrage ou que les lignes suivantes soient ajoutées dans /etc/modules.conf (anciennement appelé /etc/conf.modules) pour permettre à modprobe de charger le module LVM (n'oubliez pas d'activer kmod) : alias block-major-58 lvm-mod alias char-major-109 lvm-mod Redémarrez la machine et appréciez. 2. Migrer vers LVM 1.0.8 avec une partition racine en LVM et initrd La procédure est relativement simple si elle est suivie avec attention. Il est recommandé de faire une bonne sauvegarde avec une disquette de démarrage de secours, juste au cas où. L'utilisation « normale » de LVM sur le système de fichiers racine est d'avoir une seule partition non LVM appelée /boot qui contient le noyau et une image disque RAM d'initialisation, nécessaire pour démarrer le système. Le système que j'ai mis à jour était comme suit : # df Sys. de fich. Blocs-1k Occupé Dispo. Cap% Monté sur /dev/rootvg/root 253871 93384 147380 39% / /dev/hda1 17534 12944 3685 78% /boot /dev/rootvg/home 4128448 4568 3914168 0% /home /dev/rootvg/usr 1032088 332716 646944 34% /usr /dev/rootvg/var 253871 31760 209004 13% /var /boot contient l'ancien noyau et l'image disque RAM d'initialisation ainsi que les fichiers d'amorçage de Lilo et les lignes suivantes dans /etc/lilo.conf : # ls /boot System.map lost+found vmlinux-2.2.16lvm map module-info boot.0300 boot.b os2_d.b chain.b initrd.gz # tail /etc/lilo.conf image=/boot/vmlinux-2.2.16lvm label=lvm08 read-only root=/dev/rootvg/root initrd=/boot/initrd.gz append="ramdisk_size=8192" 1. Compiler le noyau LVM et les modules Suivez les instructions détaillées dans les Chapitre 5, Obtenir LVM et Section 2, « Construire le module du noyau pour LVM 1 » pour obtenir et compiler les composants noyau nécessaires pour LVM. 2. Compiler les utilitaires LVM Suivez les instructions détaillées dans le Section 2, « Construire le module du noyau pour LVM 1 » pour compiler et installer les utilitaires nécessaires pour LVM. Installer les nouveaux utilitaires. Une fois cela effectué, vous ne pourrez plus faire de manipulations sur LVM car les utilitaires ne sont pas compatibles avec le noyau démarré actuellement. 3. Renommer le fichier initrd.gz existant Cela permet qu'il ne soit pas écrasé par le nouveau fichier. # mv /boot/initrd.gz /boot/initrd08.gz 4. Modifier /etc/lilo.conf Faites pointer l'entrée de démarrage existante vers le fichier renommé. Vous devrez redémarrer en utilisant cela si quelque chose se passe mal. L'entrée modifiée devrait ressembler à cela : image=/boot/vmlinux-2.2.16lvm label=lvm08 read-only root=/dev/rootvg/root initrd=/boot/initrd08.gz append="ramdisk_size=8192" 5. Lancer lvmcreate_initrd pour créer une nouvelle image disque RAM d'initialisation # lvmcreate_initrd 2.4.9 N'oubliez pas de spécifier la nouvelle version du noyau afin qu'il prenne les bons modules. 6. Ajouter une nouvelle entrée dans /etc/lilo.conf Cette nouvelle entrée sert à démarrer avec le nouveau noyau et le nouvel initrd. image=/boot/vmlinux-2.4.9lvm label=lvm10 read-only root=/dev/rootvg/root initrd=/boot/initrd.gz append="ramdisk_size=8192" 7. Relancer lilo Cela installe le nouveau bloc d'amorçage # /sbin/lilo 8. Redémarrer la machine Lorsque vous avez l'écran de sélection de Lilo, choisissez la nouvelle entrée (lvm10 dans cet exemple) et le système devrait démarrer avec un Linux utilisant la nouvelle version de LVM. Si le nouveau noyau ne démarre pas, alors démarrez avec l'ancien et essayez de corriger le problème. Cela peut provenir du noyau qui n'aurait pas tous les pilotes de périphériques correctement compilés ou bien qu'ils ne sont pas disponibles dans initrd. Souvenez-vous que tous les pilotes (excepté pour LVM) qui sont nécessaires pour accéder au périphérique racine doivent être compilés en dur dans le noyau et non en tant que modules. Si vous avez besoin d'effectuer des manipulations avec LVM lorsque vous avez redémarré sur l'ancienne version, il vous faut juste recompiler les anciens utilitaires et les installer avec : # make install Si vous faites cela, n'oubliez pas de réinstaller la nouvelle version lorsque vous redémarrerez avec le nouveau LVM. Une fois satisfait de la nouvelle installation, pensez à modifier l'entrée « default= » dans le fichier lilo.conf pour mettre par défaut le nouveau noyau. Chapitre 11. Tâches courantes Table des matières 1. Initialiser des disques ou des partitions de disques 2. Créer un groupe de volumes 3. Activer un groupe de volumes 4. Enlever un groupe de volumes 5. Ajouter un volume physique à un groupe de volumes 6. Supprimer un volume physique d'un groupe de volumes 7. Créer un volume logique 8. Supprimer un volume logique 9. Étendre un volume logique 10. Réduire un volume logique 11. Migrer des données hors d'un volume physique Ce chapitre détaille quelques opérations courantes sur un système LVM. Cela ne remplace pas la lecture des pages de man. 1. Initialiser des disques ou des partitions de disques Avant de pouvoir utiliser un disque ou une partition comme volume physique, il faut l'initialiser : Pour un disque entier : * Lancez pvcreate sur le disque : # pvcreate /dev/hdb Cela crée un descripteur de groupe de volumes au début du disque. [19][Avertissement] Déconseillé L'utilisation d'un disque entier en tant que PV (par rapport à une partition utilisant tout le disque) est déconseillée en raison des problèmes de gestion que cela peut créer. Tout autre système d'exploitation ne détectera pas les méta-données LVM, affichera un disque vide et écrasera probablement son contenu. Sinon LVM fonctionne parfaitement avec des PVs occupant tout le disque. * Si vous obtenez une erreur indiquant que LVM ne peut pas initialiser un disque qui possède déjà une table de partition, vérifiez tout d'abord que vous êtes en train d'utiliser le bon disque. Si vous en êtes vraiment sûr, effectuez les commandes suivantes : [20][Avertissement] DANGEREUX Les commandes suivantes vont détruire la table des partitions sur le disque où elles sont lancées. Soyez vraiment sûr que c'est le bon disque. # dd if=/dev/zero of=/dev/nomdudisque bs=1k count=1 # blockdev --rereadpt /dev/nomdudisque Pour les partitions : * Quand vous utilisez LVM 1 sur des PC avec des partitions DOS, mettez le type de la partition à 0x8e avec fdisk ou un programme similaire. Ceci n'est pas nécessaire avec un système PPC ou avec LVM 2. * Lancez pvcreate sur la partition : # pvcreate /dev/hdb1 Cela crée un descripteur de groupe de volumes au début de la partition /dev/hdb1. 2. Créer un groupe de volumes Utilisez le programme vgcreate : # vgcreate mon_groupe_de_volumes /dev/hda1 /dev/hdb1 Remarque : Si vous utilisez devfs, il est primordial d'utiliser le nom complet du périphérique devfs plutôt que le lien symbolique dans /dev. Par conséquent la commande précédente devient : # vgcreate mon_groupe_de_volumes \\ /dev/ide/host0/bus0/target0/lun0/part1 \\ /dev/ide/host0/bus0/target1/lun0/part1 LVM 2 n'a pas cette restriction. Vous pouvez aussi préciser la taille des extents avec l'option « -s » de cette commande si la valeur par défaut de 32 Mo ne vous convient pas. De plus, vous pouvez mettre des limites sur le nombre de volumes physiques et logiques que le volume peut contenir. 3. Activer un groupe de volumes Après un redémarrage ou la commande vgchange -an, les VG et LV ne sont plus accessibles. Pour réactiver le groupe de volumes, exécutez : # vgchange -a y mon_groupe_de_volumes 4. Enlever un groupe de volumes Assurez-vous qu'aucun volume logique n'est présent dans le groupe de volumes, voir les sections suivantes pour savoir comment faire. Désactivez le groupe de volumes : # vgchange -a n mon_groupe_de_volumes Maintenant, vous pouvez supprimer le groupe de volumes : # vgremove mon_groupe_de_volumes 5. Ajouter un volume physique à un groupe de volumes Utilisez « vgextend » pour ajouter un volume physique déjà initialisé à un groupe de volumes existant. # vgextend mon_groupe_de_volumes /dev/hdc1 ^^^^^^^^^ nouveau volume physique 6. Supprimer un volume physique d'un groupe de volumes La commande « pvdisplay » permet de s'assurer que le volume physique n'est utilisé par aucun volume logique : # pvdisplay /dev/hda1 --- Physical volume --- PV Name /dev/hda1 VG Name myvg PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB] PV# 1 PV Status available Allocatable yes (but full) Cur LV 1 PE Size (KByte) 4096 Total PE 499 Free PE 0 Allocated PE 499 PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7 Si le volume physique est encore utilisé, il faut migrer les données vers un autre volume physique. Utilisez ensuite « vgreduce » pour enlever le volume physique : # vgreduce mon_groupe_de_volumes /dev/hda1 7. Créer un volume logique Pour créer un LV « testlv » linéaire de 1 500 Mo et son périphérique spécial « /dev/testvg/testlv » : # lvcreate -L1500 -ntestlv testvg Pour créer un volume logique de 100 LE avec 2 blocs répartis et une taille de bloc de 4 Ko : # lvcreate -i2 -I4 -l100 -nunautretestlv testvg Pour créer un LV qui utilise tout le VG, utilisez vgdisplay pour trouver la valeur de « Total PE », puis utilisez-la avec lvcreate. # vgdisplay testvg | grep "Total PE" Total PE 10230 # lvcreate -l 10230 testvg -n monlv Cela créera un LV appelé monlv qui remplira la totalité du VG testvg. Si vous désirez allouer le volume logique sur un volume physique précis, il faut spécifier le nom du ou des PV à la fin de la commande lvcreate. # lvcreate -L 1500 -ntestlv testvg /dev/sdg 8. Supprimer un volume logique Un volume logique doit être démonté avant d'être supprimé : # umount /dev/monvg/homevol # lvremove /dev/monvg/homevol lvremove -- do you really want to remove "/dev/monvg/homevol"? [y/n]: y lvremove -- doing automatic backup of volume group "monvg" lvremove -- logical volume "/dev/monvg/homevol" successfully removed 9. Étendre un volume logique Pour étendre un volume logique, il suffit de dire à lvextend de combien vous voulez augmenter la taille. Vous pouvez spécifier la quantité d'espace à ajouter ou bien la taille finale du volume logique : # lvextend -L12G /dev/monvg/homevol lvextend -- extending logical volume "/dev/monvg/homevol" to 12 GB lvextend -- doing automatic backup of volume group "monvg" lvextend -- logical volume "/dev/monvg/homevol" successfully extended étend /dev/monvg/homevol jusqu'à 12 Go. # lvextend -L+1G /dev/monvg/homevol lvextend -- extending logical volume "/dev/monvg/homevol" to 13 GB lvextend -- doing automatic backup of volume group "monvg" lvextend -- logical volume "/dev/monvg/homevol" successfully extended ajoute 1 Go à /dev/monvg/homevol. Une fois le volume logique étendu, il est nécessaire d'augmenter la taille du système de fichiers à la taille correspondante. La procédure à suivre dépend du type de système de fichiers utilisé. Par défaut, la plupart des utilitaires de redimensionnement de systèmes de fichiers vont augmenter leur taille suivant la taille du volume logique correspondant. Vous n'avez donc pas à vous occuper de spécifier la même taille pour les deux commandes. 1. ext2/ext3 À moins que vous n'ayez un noyau avec le correctif ext2online, il est nécessaire de démonter le système de fichiers avant le redimensionnement. (Il semble que le patch de redimensionnement à chaud soit dangereux, donc à utiliser à vos risques et périls.) # umount /dev/monvg/homevol # ext2resize /dev/monvg/homevol # mount /dev/monvg/homevol /home Si vous n'avez pas e2fsprogs 1.19 ou supérieur, la commande ext2resize est disponible sur ext2resize.sourceforge.net [http://ext2resize.sourceforge.net]. Utilisez-la ensuite : # umount /dev/monvg/homevol # resize2fs /dev/monvg/homevol # mount /dev/monvg/homevol /home Pour ext2, il y a une solution plus simple : LVM 1 fournit un utilitaire appelé e2fsadm qui effectue le lvextend et le resize2fs pour vous (et peut aussi faire la réduction, voir le chapitre suivant). [21][Avertissement] Inconvénient de LVM 2 Il n'y a pas actuellement d'équivalent à e2fsadm pour LVM 2 et la version de e2fsadm de LVM 1 ne fonctionne pas avec LVM 2. La commande unique devient : # e2fsadm -L+1G /dev/monvg/homevol qui est équivalente à : # lvextend -L+1G /dev/monvg/homevol # resize2fs /dev/monvg/homevol [22][Note] Remarque Il est toujours nécessaire de démonter le système de fichiers avant d'utiliser e2fsadm. 2. reiserfs Le système de fichiers Reiserfs peut être redimensionné monté ou démonté, comme vous le préférez : * en fonctionnement : # resize_reiserfs -f /dev/monvg/homevol * hors fonctionnement : # umount /dev/monvg/homevol # resize_reiserfs /dev/monvg/homevol # mount -treiserfs /dev/monvg/homevol /home 3. xfs Les systèmes de fichiers XFS doivent être montés pour être redimensionnés et le point de montage doit être donné à la place du nom de périphérique. # xfs_growfs /home 4. jfs Comme XFS, le système de fichiers JFS doit être monté pour être redimensionné et le point de montage doit être spécifié plutôt que le nom du périphérique. Il vous faut au minimum la version 1.0.21 de jfs-utils pour cela. # mount -o remount,resize /home [23][Avertissement] Bogue connu du noyau Certaines versions du noyau ont des problèmes avec cette syntaxe (2.6.0 en fait partie). Dans ce cas, vous devez explicitement spécifier la nouvelle taille du système de fichiers en blocs. Attention aux erreurs car vous devez connaître la taille de blocs de votre système de fichiers et vous en servir pour calculer la nouvelle taille. Exemple : Si vous devez redimensionner un système de fichiers JFS à 4 Go, écrivez : # mount -o remount,resize=1048576 /home 10. Réduire un volume logique Les volumes logiques peuvent être réduits de la même façon qu'ils peuvent être agrandis. Cependant, il est très important de se souvenir qu'il faut réduire la taille du système de fichiers ou de toute autre chose résidant sur le volume avant de le réduire lui-même. Autrement, vous risquez de perdre des données. 1. ext2 Si vous utilisez LVM 1 avec le système de fichiers ext2, vous pouvez utiliser e2fsadm comme mentionné précédemment pour effectuer les deux commandes de réduction du système de fichiers et de réduction du volume : # umount /home # e2fsadm -L-1G /dev/monvg/homevol # mount /home [24][Avertissement] Inconvénient de LVM 2 Actuellement, il n'y a pas d'équivalent à e2fsadm pour LVM 2 et la version de e2fsadm de LVM 1 ne fonctionne pas avec LVM 2. Si vous préférez faire cela manuellement, vous devez connaître la nouvelle taille du volume en blocs et utiliser les commandes suivantes : # umount /home # resize2fs /dev/monvg/homevol 524288 # lvreduce -L-1G /dev/monvg/homevol # mount /home 2. reiserfs Il semble que Reiserfs préfère être démonté avant d'être réduit : # umount /home # resize_reiserfs -s-1G /dev/monvg/homevol # lvreduce -L-1G /dev/monvg/homevol # mount -treiserfs /dev/monvg/homevol /home 3. xfs Il n'y a pas moyen de réduire un système de fichiers XFS. 4. jfs Il n'y a pas moyen de réduire un système de fichiers JFS. 11. Migrer des données hors d'un volume physique Pour mettre un disque hors service, il faut au préalable déplacer tous ses extents physiques sur d'autres disques du groupe de volumes. Il doit y avoir assez d'extents physiques libres sur les PV qui restent pour accueillir les extents provenant du disque à enlever. Pour plus de détails, voir la Section 5, « Enlever un disque ». Chapitre 12. Partitionnement de disques Table des matières 1. Plusieurs partitions sur le même disque 2. Étiquettes de disque Sun (Sun disk labels) 1. Plusieurs partitions sur le même disque Le LVM permet de créer des PV (volumes physiques) sur presque tous les périphériques par blocs. Par exemple, les commandes suivantes sont valides et vont très bien fonctionner dans un environnement LVM : # pvcreate /dev/sda1 # pvcreate /dev/sdf # pvcreate /dev/hda8 # pvcreate /dev/hda6 # pvcreate /dev/md1 Dans un environnement de production « normal », il est recommandé de n'avoir qu'un seul PV par disque réel pour les raisons suivantes : * Facilité d'administration. Il est plus simple de gérer le matériel du système si chaque disque réel n'apparaît qu'en un seul endroit. C'est particulièrement vrai en cas de problème sur le disque. * Éviter les problèmes de performances avec la répartition. LVM ne sait pas dire si deux PV sont sur le même disque physique. Donc si vous créez des LV répartis, les blocs peuvent très bien être sur différentes partitions du même disque, ce qui entraîne une diminution des performances, plutôt qu'une augmentation. Cependant, il peut être souhaitable de le faire pour certaines raisons : * La migration d'un système existant vers LVM. Sur un système avec peu de disques, il peut être nécessaire de déplacer des données entre les partitions pour effectuer la conversion (cf. la Section 8, « Convertir le système de fichiers racine en LVM 1 »). * Séparer un gros disque dans plusieurs groupes de volumes. Si vous avez un très gros disque et que vous voulez plus d'un groupe de volumes pour des raisons d'administration, alors il est nécessaire de faire plusieurs partitions sur le disque. Si vous avez un disque avec plus d'une partition et que ces partitions sont dans le même groupe de volumes, faites attention à bien spécifier les partitions qui doivent être incluses dans le volume logique lorsque vous créez des volumes répartis. Il est recommandé d'utiliser une seule partition qui couvre l'ensemble du disque physique. Cela évite des accidents avec les n½uds des périphériques du disque et évite les messages d'alerte du noyau au démarrage à propos de types de partitions inconnus. 2. Étiquettes de disque Sun (Sun disk labels) Il faut porter une attention particulière aux systèmes SPARC car les disques contiennent des étiquettes de disque Sun. L'organisation normale des disques munis d'étiquettes de disque Sun est de faire commencer la première partition à partir du bloc zéro du disque. Cela implique que l'étiquette du disque se trouve en fait sur sa première partition. Cela fonctionne parfaitement avec les systèmes de fichiers ext2 (et c'est essentiel pour amorcer un système avec avec SILO) mais ces partitions ne doivent pas être utilisées avec LVM car celui-ci commence à écrire au tout début du périphérique et écrase alors l'étiquette de disque. Si vous voulez utiliser un disque avec des étiquettes de disque Sun, assurez-vous de faire commencer votre partition à partir du cylindre 1 ou supérieur. Chapitre 13. Recettes Table des matières 1. Mettre en place LVM avec trois disques SCSI 1.1. Préparation des disques 1.2. Configuration du groupe de volumes 1.3. Création du volume logique 1.4. Création du système de fichiers 1.5. Test du système de fichiers 2. Mise en place de LVM sur trois disques SCSI avec répartition (striping) 2.1. Préparation des partitions de disque 2.2. Configuration du groupe de volumes 2.3. Création du volume logique 2.4. Création du système de fichiers 2.5. Test du système de fichiers 3. Ajouter un nouveau disque dans un système avec plusieurs disques SCSI 3.1. Situation actuelle 3.2. Préparation du partitionnement du disque 3.3. Ajout des nouvelles partitions au groupe de volumes 3.4. Extension des systèmes de fichiers 3.5. Remontage des volumes étendus 4. Faire une sauvegarde avec un instantané (snapshot) 4.1. Créer le volume d'instantané 4.2. Monter le volume d'instantané 4.3. Faire la sauvegarde 4.4. Supprimer l'instantané 5. Enlever un disque 5.1. Distribuer les anciens extents vers des disques existants du groupe de volumes 5.2. Distribuer les anciens extents sur un nouveau disque de remplacement 6. Déplacer un groupe de volumes vers un autre système 6.1. Démonter le système de fichiers 6.2. Marquer le groupe de volumes comme inactif 6.3. Exporter le groupe de volumes 6.4. Importer le groupe de volumes 6.5. Activer le groupe de volumes 6.6. Monter le système de fichiers 7. Diviser un groupe de volumes 7.1. Déterminer l'espace libre 7.2. Déplacer les données des disques à réutiliser 7.3. Créer un nouveau groupe de volumes 7.4. Enlever le volume restant 7.5. Créer le nouveau volume logique 7.6. Créez un système de fichiers sur le volume 7.7. Montez le nouveau volume 8. Convertir le système de fichiers racine en LVM 1 8.1. Démarrer en mode mono-utilisateur 8.2. Utiliser Parted 8.3. Redémarrer 8.4. Vérifier les options de configuration du noyau 8.5. Ajuster le type de partition 8.6. Configurer LVM 1 pour la nouvelle configuration 8.7. Créer le système de fichiers 8.8. Mise à jour de /etc/fstab 8.9. Créez une image disque RAM d'initialisation pour LVM 1 8.10. Mise à jour de /etc/lilo.conf 8.11. Lancez lilo pour écrire le nouveau secteur de boot 8.12. Redémarrer avec LVM 8.13. Ajoutez le reste du disque dans LVM 9. Restaurer les méta-données d'un volume physique Ce chapitre détaille plusieurs « recettes » différentes pour mettre en place LVM. L'objectif est que le lecteur puisse adapter ces recettes pour son système et ses propres besoins. 1. Mettre en place LVM avec trois disques SCSI Pour cette recette, on dispose de trois disques SCSI qui vont être mis dans un volume logique utilisant LVM. Les disques sont /dev/sda, /dev/sdb et /dev/sdc. 1.1. Préparation des disques Il faut préparer le disque avant de pouvoir l'utiliser dans un groupe de volumes : [25][Avertissement] Attention ! Les commandes suivantes vont détruire toutes les données présentes sur /dev/sda, /dev/sdb et /dev/sdc. Lancez pvcreate sur les disques : # pvcreate /dev/sda # pvcreate /dev/sdb # pvcreate /dev/sdc Cela crée une zone avec les descripteurs de groupes de volumes (volume group descriptor area, VGDA) au début des disques. 1.2. Configuration du groupe de volumes 1. Créez un groupe de volumes # vgcreate mon_groupe_de_volumes /dev/sda /dev/sdb /dev/sdc 2. Utilisez vgdisplay pour vérifier le groupe de volume # vgdisplay --- Volume Group --- VG Name mon_groupe_de_volumes VG Access read/write VG Status available/resizable VG # 1 MAX LV 256 Cur LV 0 Open LV 0 MAX LV Size 255.99 GB Max PV 256 Cur PV 3 Act PV 3 VG Size 1.45 GB PE Size 4 MB Total PE 372 Alloc PE / Size 0 / 0 Free PE / Size 372/ 1.45 GB VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y Le plus important est de vérifier les trois premiers éléments et que la taille indiquée par « VG Size » est bien la taille de vos trois disques réunis. 1.3. Création du volume logique Si le groupe de volumes semble correct, il est alors temps de créer un volume logique dessus. Vous pouvez choisir la taille que vous voulez pour le volume logique (de la même manière que vous le feriez dans un environnement non LVM). Pour cet exemple, nous allons juste créer un volume logique d'1 Go dans le groupe de volumes. Nous n'utiliserons pas la répartition car il n'est pas actuellement possible de rajouter un disque une fois le volume logique créé. # lvcreate -L1G -nmon_volume_logique mon_groupe_de_volumes lvcreate -- doing automatic backup of "mon_groupe_de_volumes" lvcreate -- logical volume "/dev/mon_groupe_de_volumes/mon_volume_logique" successfully created 1.4. Création du système de fichiers Créez un système de fichiers ext2 dans le volume logique : # mke2fs /dev/mon_groupe_de_volumes/mon_volume_logique mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 131072 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user First data block=0 9 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Writing superblocks and filesystem accounting information: done 1.5. Test du système de fichiers Montez le volume logique et vérifiez que tout semble correct. # mount /dev/mon_groupe_de_volumes/mon_volume_logique /mnt # df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda1 1311552 628824 616104 51% / /dev/mon_groupe_de_volumes/mon_volume_logique 1040132 20 987276 0% /mnt Si tout s'est passé correctement, vous avez désormais un volume logique avec un système de fichiers ext2 monté dans /mnt. 2. Mise en place de LVM sur trois disques SCSI avec répartition (striping) Pour cette recette, on dispose de trois disques SCSI qui vont être mis dans un volume logique en utilisant LVM. Les disques sont /dev/sda, /dev/sdb et /dev/sdc. [26][Note] Remarque Il n'est pas actuellement possible d'ajouter un disque dans un volume logique réparti avec LVM 1. Utilisez LVM 2 avec le format de méta-données lvm 2 si vous voulez effectuer cela. 2.1. Préparation des partitions de disque Il faut préparer le disque avant de pouvoir l'utiliser dans un groupe de volumes : [27][Avertissement] Attention ! Les commandes suivantes vont détruire toutes les données présentes sur /dev/sda, /dev/sdb et /dev/sdc. Lancez pvcreate sur les disques : # pvcreate /dev/sda # pvcreate /dev/sdb # pvcreate /dev/sdc Cela crée une zone de descripteurs de groupes de volumes (volume group descriptor area, VGDA) au début des disques. 2.2. Configuration du groupe de volumes 1. Créez un groupe de volumes # vgcreate mon_groupe_de_volumes /dev/sda /dev/sdb /dev/sdc 2. Utilisez vgdisplay pour vérifier le groupe de volume # vgdisplay --- Volume Group --- VG Name mon_groupe_de_volumes VG Access read/write VG Status available/resizable VG # 1 MAX LV 256 Cur LV 0 Open LV 0 MAX LV Size 255.99 GB Max PV 256 Cur PV 3 Act PV 3 VG Size 1.45 GB PE Size 4 MB Total PE 372 Alloc PE / Size 0 / 0 Free PE / Size 372/ 1.45 GB VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y Le plus important est de vérifier les trois premiers éléments et que la taille indiquée par « VG Size » est bien la taille de vos trois disques réunis. 2.3. Création du volume logique Si le groupe de volumes semble correct, il est alors temps de créer un volume logique dessus. Vous pouvez choisir la taille que vous voulez pour le volume logique (de la même manière que vous le feriez sur un environnement non LVM). Pour cet exemple, nous allons juste créer un volume logique d'1 Go sur le groupe de volumes. Le volume logique sera réparti en utilisant une taille de bloc de 4 Ko. Cela devrait améliorer ses performances. # lvcreate -i3 -I4 -L1G -nmon_volume_logique mon_groupe_de_volumes lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE lvcreate -- doing automatic backup of "mon_groupe_de_volumes" lvcreate -- logical volume "/dev/mon_groupe_de_volumes/mon_volume_logique" successfully created [28][Note] Remarque Si vous créez le volume logique avec l'option « -i2 », vous n'utiliserez que deux disques de votre groupe de volumes. Ceci est utile si vous voulez créer deux volumes logiques à partir du même volume physique, mais ce point n'est pas abordé dans cette recette. 2.4. Création du système de fichiers Créez un système de fichiers ext2 dans le volume logique : # mke2fs /dev/mon_groupe_de_volumes/mon_volume_logique mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 132192 inodes, 264192 blocks 13209 blocks (5.00%) reserved for the super user First data block=0 9 block groups 32768 blocks per group, 32768 fragments per group 14688 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Writing superblocks and filesystem accounting information: done 2.5. Test du système de fichiers Montez le volume logique et vérifiez que tout semble correct. # mount /dev/mon_groupe_de_volumes/mon_volume_logique /mnt # df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda1 1311552 628824 616104 51% / /dev/mon_groupe_de_volumes/mon_volume_logique 1040132 20 987276 0% /mnt Si tout s'est passé correctement, vous avez désormais un volume logique avec un système de fichiers ext2 monté dans /mnt. 3. Ajouter un nouveau disque dans un système avec plusieurs disques SCSI 3.1. Situation actuelle Un serveur de données possède six disques organisés de la façon suivante : # pvscan pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] pvscan -- total: 8 [11.72 GB] / in use: 8 [11.72 GB] / in no VG: 0 [0] # df Filesystem 1k-blocks Used Available Use% Mounted on /dev/dev/cvs 1342492 516468 757828 41% /mnt/dev/cvs /dev/dev/users 2064208 2060036 4172 100% /mnt/dev/users /dev/dev/build 1548144 1023041 525103 66% /mnt/dev/build /dev/ops/databases 2890692 2302417 588275 79% /mnt/ops/databases /dev/sales/users 2064208 871214 1192994 42% /mnt/sales/users /dev/ops/batch 1032088 897122 134966 86% /mnt/ops/batch Comme vous pouvez le voir, les groupes « dev » et « ops » sont presque pleins. Un nouveau disque est acheté et ajouté au système. Il devient /dev/sdg. 3.2. Préparation du partitionnement du disque Le nouveau disque doit être partagé entre ops et dev. Il est donc partitionné en deux volumes physiques /dev/sdg1 et /dev/sdg2 : # fdisk /dev/sdg Device contains neither a valid DOS partition table, nor Sun or SGI disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1000, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1000, default 1000): 500 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (501-1000, default 501): Using default value 501 Last cylinder or +size or +sizeM or +sizeK (501-1000, default 1000): Using default value 1000 Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Unknown) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 8e Changed system type of partition 2 to 8e (Unknown) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Ensuite, les volumes physiques sont créés sur cette partition : # pvcreate /dev/sdg1 pvcreate -- physical volume "/dev/sdg1" successfully created # pvcreate /dev/sdg2 pvcreate -- physical volume "/dev/sdg2" successfully created 3.3. Ajout des nouvelles partitions au groupe de volumes Les volumes sont ensuite ajoutés aux groupes de volumes dev et ops : # vgextend ops /dev/sdg1 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "ops" vgextend -- volume group "ops" successfully extended # vgextend dev /dev/sdg2 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "dev" vgextend -- volume group "dev" successfully extended # pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 44 MB free] pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sde1" of VG "ops" [996 MB / 52 MB free] pvscan -- ACTIVE PV "/dev/sde2" of VG "sales" [996 MB / 944 MB free] pvscan -- ACTIVE PV "/dev/sdf1" of VG "ops" [996 MB / 0 free] pvscan -- ACTIVE PV "/dev/sdf2" of VG "dev" [996 MB / 72 MB free] pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 996 MB free] pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 996 MB free] pvscan -- total: 10 [13.67 GB] / in use: 10 [13.67 GB] / in no VG: 0 [0] 3.4. Extension des systèmes de fichiers L'action suivante est d'étendre les systèmes de fichiers pour que de l'espace disque supplémentaire soit disponible aux utilisateurs. Il existe des outils qui permettent le redimensionnement à chaud des systèmes de fichiers ext2, mais nous utilisons ici la méthode la plus sûre et démontons les deux systèmes de fichiers avant le redimensionnement : # umount /mnt/ops/batch # umount /mnt/dev/users Nous utilisons ensuite la commande e2fsadm pour redimensionner le volume logique et le système de fichiers ext2 en une seule opération. Nous utilisons ext2resize à la place de resize2fs (qui est la commande par défaut de e2fsadm). Pour cela, nous définissons la variable d'environnement E2FSADM_RESIZE_CMD pour dire à e2fsadm d'utiliser cette commande. # export E2FSADM_RESIZE_CMD=ext2resize # e2fsadm /dev/ops/batch -L+500M e2fsck 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/ops/batch: 11/131072 files (0.0