Salut à tous, aujourd’hui un TP axé système pour savoir comment Augmenter la taille d’un disque dur sous Linux avec LVM sous Hyper-V . En effet, j’ai rencontré ce cas de figure récemment après avoir taillé un /var un peu trop court sur une de mes machines virtuelles. Et si on trouve plein de documentation sur LVM pour redimensionner ses partitions et ajouter d’autres disques dans un volume group, le changement de la taille physique du disque dur n’est pas vraiment abordé correctement en ligne à mon goût. D’où ma tentative de répondre à cette question, ci dessous.
LVM ?
Si vous ne savez de que c’est (mais qu’est ce que vous faîtes ici alors ?) : c’est pour Logical Volume Manager. C’est mieux expliqué sur Wikipédia, donc je ne vais pas m’étendre la dessus. Pour faire simple, cela permet d’ajouter une couche d’abstraction entre vos volumes physique et les partitions utilisée par l’OS et ainsi de gérer logiciellement le partitionnement, la réplication ou encore la taille des partitions utilisé sur la machine ; et de changer tout ça dynamiquement…
Le schéma ci dessous résume vite fait quelques concepts en jeu dans un système LVM.
Augmenter la taille d’un disque dur sous Linux avec LVM
Virtual Disk dans Hyper-V
Dans mon cas, je souhaite augmenter le /var d’une VM sous Hyper-V, mais garder à l’esprit que la manip est là même sur n’importe quel hyperviseur et pour n’importe quel partition du système puisque c’est le disque physique qui va changer de taille. Techniquement c’est peu comme si vous dumpiez le disque dur d’une machine physique pour le copier sur un autre HDD plus grand.
Première étape : éteindre la VM et allez dans les paramètre du disque pour étendre votre virtual-disk :
Partitions pour LVM
Démarrer votre VM, loguez-vous en tant que root, et vérifier que la nouvelle taille du disque dur est bien prise en compte par le système d’exploitation à l’aide de la commande fdisk -l. Je vous mets en rouge les champs intéressants.
root@srv:~# fdisk -l Disque /dev/sda : 500 GiB, 536870912000 octets, 1048576000 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xae09a7f6 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 499711 497664 243M 83 Linux /dev/sda2 501758 629143551 628641794 299,8G 5 Extended /dev/sda5 501760 629143551 628641792 299,8G 8e Linux LVM [...] Disque /dev/mapper/srv--vg-var : 28 GiB, 29997662208 octets, 58589184 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets [...]
Donc on voit que j’ai 300G de disque et 30Go alloué pour /var dispo. Je veux donner tout l’espace nouveau à /var. Pour ça on va aussi utiliser fdisk pour modifier les partitions. C’est un peu « touchy » car on doit supprimer les 2 partitions /dev/sda2 et /dev/sda5 existantes, puis les recréer exactement au même endroit avec les même réglages mais avec un secteur de fin plus loin.
Bein « yapuka », je vous mets le détails en commentaire vert après les commandes
root@srv:~# fdisk /dev/sda # démarrer fdisk sur le disque physique /dev/sda Bienvenue dans fdisk (util-linux 2.25.2). Les modifications resteront en mémoire jusqu'à écriture. Soyez prudent avant d'utiliser la commande d'écriture. Commande (m pour l'aide) : p # afficher les partitions et notez dans un pastebin les valeurs en rouge Disque /dev/sda : 500 GiB, 536870912000 octets, 1048576000 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xae09a7f6 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 499711 497664 243M 83 Linux /dev/sda2 501758 629143551 628641794 299,8G 5 Extended /dev/sda5 501760 629143551 628641792 299,8G 8e Linux LVM Commande (m pour l'aide) : d # supprimer une partition Numéro de partition (1,2,5, 5 par défaut) : 2 # la n°2 La partition 2 a été supprimée. Commande (m pour l'aide) : n # Créer un nouvelle partition Type de partition p primaire (1 primaire, 0 étendue, 3 libre) e étendue (conteneur pour partitions logiques) Sélectionnez (p par défaut) : e # Créer un nouvelle partition de type étendue Numéro de partition (2-4, 2 par défaut) : 2 # Même numéro que celle qu'on vient de supprimer Premier secteur (499712-1048575999, 499712 par défaut) : 501758 # La nouvelle partition commence exactement au même endroit que celle qu'on vient de supprimer Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (501758-1048575999, 1048575999 par défaut) : # on laisse par défaut, ce qui correspond à la fin du disque. Une nouvelle partition 2 de type « Extended » et de taille 499,8 GiB a été créée. Commande (m pour l'aide) : p # on réaffiche l'état actuel de nos partitions Disque /dev/sda : 500 GiB, 536870912000 octets, 1048576000 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xae09a7f6 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 499711 497664 243M 83 Linux /dev/sda2 501758 1048575999 1048074242 499,8G 5 Extended /dev/sda5 2 628641793 628641792 299,8G 8e Linux LVM Les entrées de la table de partitions ne sont pas dans l'ordre du disque. Commande (m pour l'aide) : d # On supprime la n°5 créée en même temps que notre nouvelle partition étendue mais qui ne correspond plus à rien. Numéro de partition (1,2,5, 5 par défaut) : 5 La partition 5 a été supprimée. Commande (m pour l'aide) : n # on créé une nouvelle partition n°5 Type de partition p primaire (1 primaire, 1 étendue, 2 libre) l logique (numéroté à partir de 5) Sélectionnez (p par défaut) : l # de type logique Ajout de la partition logique 5 Premier secteur (503806-1048575999, 503808 par défaut) : # on laisse par défaut, l'outil ne proposant pas l'alignement initial (501760) que l'on veut pour l'instant. Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (503808-1048575999, 1048575999 par défaut) : # On prend tout l'espace dispo Une nouvelle partition 5 de type « Linux » et de taille 499,8 GiB a été créée. Commande (m pour l'aide) : x # passage en mode "avancé" de fdisk Commande pour spécialistes (m pour l'aide) : b # on souhaite déplacer le début des données dans une partition Numéro de partition (1,2,5, 5 par défaut) : 5 # pour la n°5 Nouveau début de données (501759-1048575999, 503808 par défaut) : 501760 # Début qu'on repositionne exactement au même endroit que l'initiale. Commande pour spécialistes (m pour l'aide) : p # On ré-affiche nos partitions, pour s'assurer que le début de nos partitions correspond bien aux valeurs initiales Disque /dev/sda : 500 GiB, 536870912000 octets, 1048576000 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xae09a7f6 Device Boot Start End Sectors Id Type Start-C/H/S End-C/H/S Attrs /dev/sda1 * 2048 499711 497664 83 Linux 0/33/32 31/59/26 80 /dev/sda2 501758 1048575999 1048074242 5 Extended 31/27/59 758/31/213 00 /dev/sda5 501760 1048575999 1048074240 83 Linux 31/61/91 758/31/213 00 Commande pour spécialistes (m pour l'aide) : r # il reste juste à modifier le type, retour en mode normal. Commande (m pour l'aide) : t # modifier le type d'une partition Numéro de partition (1,2,5, 5 par défaut) : 5 # la n°5 Code Hexa (taper L pour afficher tous les codes) : L # on liste les types existant [...] 8 AIX 4e 2e partie QNX4. 8e LVM Linux df BootIt [...] Code Hexa (taper L pour afficher tous les codes) :8e # on veut une partition LVM linux comme initialement. Type de partition « Linux » modifié en « Linux LVM ». Commande (m pour l'aide) : p # On affiche l'état de nos partitions Disque /dev/sda : 500 GiB, 536870912000 octets, 1048576000 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0xae09a7f6 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 499711 497664 243M 83 Linux /dev/sda2 501758 1048575999 1048074242 499,8G 5 Extended /dev/sda5 501760 1048575999 1048074240 499,8G 8e Linux LVM #Attention une fois que les modifications seront écrite plus de retour en arrière possible. Donc si vous avez un doute, vérifier plutôt deux fois qu'une ici... Commande (m pour l'aide) : w # Tout est bon On écrit les modifications sur le disque La table de partitions a été altérée. Appel d'ioctl() pour relire la table de partitions. Échec de relecture de la table de partitions.: Périphérique ou ressource occupé
Comme on fait les modifications en live, le noyau continue à utiliser l’ancienne table. La nouvelle sera utilisée lors du prochain démarrage. Donc on reboot :
shutdown -r now
PV, VG et LV dans LVM
Bon c’est pas fini, on a réaligner nos partitions sur la taille du nouveau disque mais LVM lui n’est au courant de rien. Il faut lui dire d’occuper tout se nouvel espace :
root@srv:~# pvresize /dev/sda5 Physical volume "/dev/sda5" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
On vérifie que tout s’est bien passé :
root@srv:~# pvs PV VG Fmt Attr PSize PFree /dev/sda5 srv-vg lvm2 a-- 499,76g 200,00g root@srv:~# vgs VG #PV #LV #SN Attr VSize VFree srv-vg 1 5 0 wz--n- 499,76g 200,00g
Donc on a bien nos nouveaux 200Go marqués comme libres dans LVM désormais. On va étendre le volume logique /var pour utilisé cet espace.
root@srv:~# lvextend -l 100%FREE /dev/srv-vg/var # pour ajouter tous l'espace libre restant au volume # lvextend -L50G /dev/srv-vg/var # pour spécifier une taille fixe à 50Go après l'ajout # lvextend -L +2G /dev/srv-vg/var # pour ajouter une quantité fixe de 2Go Size of logical volume srv-vg/var changed from 27,94 GiB (7152 extents) to 200,00 GiB (51200 extents).
Logical volume var successfully resized
A ce niveau je vous laisse vérifier avec pvdisplay ou pvs…
File System
Par contre on a pas encore tout à fait terminé, il reste à redimensionner le système de fichier posé sur la partition pour que lui aussi occupe tout l’espace :
root@srv:~# resize2fs /dev/srv-vg/var resize2fs 1.42.12 (29-Aug-2014) Le système de fichiers de /dev/srv-vg/var est monté sur /var ; le changement de taille doit être effectué en ligne old_desc_blocks = 2, new_desc_blocks = 13 Le système de fichiers sur /dev/srv-vg/var a maintenant une taille de 52428800 blocs (4k).
Pour finir, on vérifie que le système a bien pris en compte les changements;
root@srv:~# df -h Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/srv--vg-var 197G 27G 163G 14% /var
Et voilou.
Le mot de la fin
Bon alors c’est à la fois très simple d’augmenter la taille d’un disque dur sous Linux avec LVM. il suffit d’aligner de nouvelles partitions similaires aux initiales sur le point de départ des anciennes et ensuite d’indiquer à tout le monde de se réajuster avec le nouvelle espace disponible. Et en même temps il ne faut pas se louper sur la partie fdisk, même sis c’est juste un jeu de poupée russes… Mais si vous cassez vos partitions : votre système ne redémarrera pas et vous allez commencer à « en chier » pour récupérer vos données, donc je vous conseille de faire un backup avant si vous n’êtes pas certains de ce que vous faîtes…
J’espère que ça en aidera un ou deux. et au pire ça me fera de la doc dans un coin !
@+
j’ai un soucis même apres suivre le tuto ça a modifier le stockage du sique mais quand je met df -h j’ai l’impression que ça n’a pas changé et j’ai toujours le message de « No space left on device » Quelqu’un sait la réponse ?
C’est 100 % fiable je recommande merci beaucoup !!!
Content d’avoir pu aider :)!
bonjour svp j’aimerais augmenter la taille prédéfinie de mon disque de stockage sur kali.
NB: je n’utilise pas une VM
j’ai un disque normal de 500GO mais en installant kali j’ai partitionné en 250GO et j’ai alloué cet espace pour kali. maintenant j’aimerais recuperer mes 500GO sans perdre mes données svp
Hello,
Techniquement je pense que c’est la même procédure à peu de chose prêt. bon courage !
Deuxième fois que j’utilise votre tuto et pour un serveur en prod…
Merci pour la clarté
Merci pour ton commentaire !
Un grand merci. J’en était à mon 3ème tuto générique qui ne fonctionnait pas avec LVM… 😉
Avec plaisir
Un grand merci pour ce tuto qui m’a permit de redimensionner la partition /var de mon seveur ZABBIX qui était HS. Effectivement pas simple mais avec un peu de temps et de concentration c’est réalisable.
Merci pour le partage
Content que ça soit utile !
Super, grand merci pour ce tuto, ca m’a bien aidé.
Avec plaisir
super !!! grand mercis !! ca m’a sauvé la vie
Ouf alors 🙂 ! Merci pour ton retour.
Merci pour ce tuto très clair, c’est exactement ce que je cherchais à faire !
Avec Plaisir.
Un grand merci pour ce tuto clair et qui fonctionne parfaitement !
De rien !
Bonjour,
Petite coquille ici :
root@srv:~# lvextend -l 100%FREE /dev/srv-vg/var
Il faut donner l’instruction avec +100%FREE (le +)
CG
Alors d’après le man, le + n’est pas obligatoire :
« [ -l|–extents [+]Number[PERCENT] ]
[…]
When the plus + or minus – prefix is used, the value is not an absolute size, but is relative and added or subtracted from the current size. »
Mais dans le cas ou l’on utilise le %FREE : « the suffix %FREE the remaining free space in the VG, […] when expressed as a percentage, the size defines an upper limit for the number of logical extents in the new LV »
Donc pour moi il n’est pas nécessaire dans ce cas, mais il change en effet le comportement de la commande si on ajoute de l’espace disque en volume fixe et pas relatif.
Merci pour l’info en tout cas.
Je confirme que le +100%FREE a fonctionné pour moi !
Merci pour ce super tuto en francais. Je me sentais pas chaud de le faire depuis un tuto en anglais
Avec plaisir ! Merci pour ton message!
Je confirme que le « + » a résolu le problème pour moi. Sans celui-ci, ça ne fonctionnait pas. Merci 🙂
ça en aura au moins aidé un! C’est lisible, très bien expliqué et compréhensible. Merci!