[Azure] VM Debian, élargir la capacité de la partition principale

azure-logo

Lorsque que l’on crée une machine virtuelle sur Azure, le disque dur virtuel contenant la partition principale peut être plus ou moins grand, selon la taille de la machine choisie. Cependant, il se peut que pour certaines raisons, il soit nécessaire d’augmenter la taille de cette partition. Cela peut se faire facilement de façon graphique, via le portail d’administration de notre compte Azure ou bien en ligne de commande, avec Azure PowerShell (des cmdlets utilisables en PowerShell).

J’ai choisi ici de passer par PowerShell car cela permet de donner une bonne petite introduction compréhensible de ce qu’il est possible de faire avec cet outil sur Azure.

Il est à noter qu’il existe deux types de machines virtuelles sur cette plateforme : les classiques et celles créées avec le modèle « Resource Manager ». Microsoft conseille de passer par ce modèle qui est le plus récent et qui offre la plus grande souplesse d’utilisation. Par conséquent, c’est ce cas d’utilisation que je prendrai en compte ici.

Prérequis

1. Se connecter au compte Azure

Dans cette partie, le but sera de se connecter à Azure, accéder à notre machine virtuelle, récupérer la taille du disque contenant l’OS (Debian 8 dans mon cas) et modifier celle-ci. Il faudra ensuite sauvegarder cette nouvelle configuration sur Azure.

La première étape consiste donc à ouvrir PowerShell en mode administrateur et à installer les packages contenant les cmdlets permettant de manipuler notre compte Azure et ses ressources. Pour faire cela, voici les deux commandes à taper, successivement :

Note : N’hésitez pas à aller consulter mon article concernant l’autocomplétion dans PowerShell car ça va être assez pratique pour la suite de ce guide 🙂

PowerShell vous avertira que ces modules proviennent d’un dépôt non certifié et demandera une confirmation d’installation. Étant donné que ces deux modules sont ceux conseillés par le MSDN, je pense qu’on peut leur accorder notre confiance.

Maintenant que les modules sont installés, on va pouvoir se connecter sur Azure et commencer à opérer sur notre machine… Le cmdlet de connexion est le suivant :

Une popup s’ouvrira et vous demandera de vous identifier. Il faut donc entrer notre compte Microsoft gérant l’abonnement du serveur que l’on veut modifier. Une fois connecté, le cmdlet affichera quelques informations utiles :

azure_resultlogin

Au cas où vous auriez plusieurs abonnements Azure reliés à votre compte Microsoft, il est nécessaire d’indiquer lequel nous allons utiliser pour la suite des opérations. Surlignez puis copiez le « SubscriptionId » de l’abonnement à utiliser (celui sur lequel se trouve votre VM) en appuyant sur la touchée « Entrée » et, enfin, entrez la commande suivante :

Si vous n’avez qu’un seul abonnement, inutile de spécifier l’identifiant à utiliser, entrez la commande sans l’attribut « SubscriptionId ». Note : l’opérateur de pipeline « | » permet d’utiliser la sortie (le résultat) de la première commande comme entrée de la seconde (comme des arguments)

2. Récupérer la VM

Maintenant, l’environnement de cette session PowerShell est configuré pour utiliser le bon abonnement Azure. Maintenant, il faut pouvoir cibler la VM sur laquelle nous allons travailler. On peut lister toutes les VM existantes sur notre compte en entrant la commande suivante :

azure_getvm

Le résultat de cette commande est un objet possédant beaucoup de propriétés dont nous n’avons pas besoin, nous pouvons filtrer et ne sélectionner que les attributs intéressants. La commande « Get-AzureRmVm » peut renvoyer une seule VM si on lui donne le ResourceGroupName et le Name de celle-ci. La commande avec le filtre donnera donc ceci :

Et le résultat est bien plus clair, surtout si nous avons plus d’une VM :

get azure rm

 

Ici, je vais sélectionner ma VM Debian et l’enregistrer dans une variable Powershell que je vais nommer « vm ». La syntaxe est très simple :

J’ai enchaîné deux commandes ici, grâce au point-virgule. Une fois que la VM a été récupérée et enregistrée dans la variable $vm, la commande « echo » va afficher le contenu de cette variable. Ainsi, on peut facilement vérifier si on a bien pris la bonne VM :

get azure rm

Nous avons désormais une représentation de la VM dans l’objet $vm.

3. Augmenter la taille du disque de la partition principale

Avant de modifier la taille du disque, il faut s’assurer que la VM n’est plus en activité. Une commande permet de l’éteindre facilement :

Il faudra une dizaine de secondes après avoir confirmé vouloir éteindre la machine avant que cela ne prenne effet. La console sera en attente, il faut juste un peu de patience. Un message indiquera si la requête de fermeture a été accomplie avec succès ou non.

Maintenant, pour modifier la taille du disque, on va passer par la variable $vm récupérée plus haut et en modifier les propriétés. Ensuite, nous utiliserons une autre commande permettant de mettre à jour la VM sur Azure en utilisant les propriétés de l’objet $vm que nous avons créé.

get azure rm

L’attribut qui nous intéressera ici est « DiskSizeGB » qui se trouve dans l’attribut « OsDisk » qui lui-même se trouve dans « StorageProfile ». Comme son nom l’indique, il représente la taille du disque, en Go.

Pour modifier la taille, il suffit de lui attribuer une nouvelle valeur comme nous le ferions avec un objet dans n’importe quel langage de programmation orienté objet. J’ai choisi d’attribuer 300go d’espace disque pour tripler l’espace dont je disposais à la base.

Note : il faut évidemment mieux éviter de réduire la taille du disque, au risque de perdre des données.

Il ne reste plus qu’à mettre à jour la VM du côté d’Azure en utilisant les paramètres de notre objet $vm :

Après quelques instants, le résultat de l’opération est affiché. Et si tout s’est passé correctement, il est temps de relancer la VM :

À nouveau, passé un certain délai, on voit apparaître le résultat de la requête envoyée. Si elle est réussi, la taille du disque a bien été augmentée !

… Il ne reste plus qu’à s’approprier l’espace libre ainsi gagné en étendant la partition principale. Et pour cela, il va falloir se connecter en SSH sur notre VM.

4. Étendre la taille de la partition principale

/!\ Les commandes suivantes sont risquées. Une mauvaise manipulation pourrait détruire le boot de l’OS et/ou vos données. Soyez précautionneux et attentif ! (et puis ne me tenez pas pour responsable si quelque chose arrive hein, je l’ai fait plusieurs fois, ça fonctionne mais comme toujours le risque 0 n’existe pas et je n’ai pas testé tous les environnements/cas d’utilisation possibles)

Une fois connecté, la première chose à vérifier est de constater si oui ou non le disque a bien été redimensionné. Entrez la commande suivante :

On peut constater que le disque sda possède bien une capacité de 300Go. Ce que je souhaite faire étant d’étendre la partition système, il va falloir attribuer à sda1 l’espace libre non utilisé. L’utilitaire fdisk a été prévu pour cela, on va donc l’utiliser :

Ici, c’est l’aide de fdisk. Il fonctionne de la manière suivante : on entre une lettre qui sera interprétée comme une commande et ensuite fdisk nous demandera sur quelle partition agir, quels paramètres appliquer, etc.

Toutes les opérations que nous allons faire n’auront aucun effet sur l’état réel du disque tant que nous ne validons pas nos modifications. Si vous voulez quitter fdisk, la combinaison de touches CTRLC le permet. Ou bien la commande « q », également.

Les commandes que nous allons utiliser ici sont les suivantes :

a. Supprimer les partitions existantes

En premier lieu, on vérifie les partitions existantes sur /dev/sda (donc le disque sur lequel on travaille) :

On peut voir ici que le disque a bien 300 Go de capacité et qu’il y a deux partitions présentes dessus : sda1 qui contient l’OS et qui a une taille de 95Go ainsi que sda2 qui a une taille de 5Go et qui est utilisé en tant que swap.

Étant donné que l’espace non-alloué se situe après sda2 et que je veux en profiter sur sda1, il va falloir supprimer les deux partitions. La commande à utiliser est « d », à deux reprises :

En listant la table des partitions, on peut constater que plus rien n’existe. On peut donc maintenant recréer les partitions.

b. Recréer les partitions

J’ai ici 300Go d’espace à allouer, je vais en donner 295 à sda1 et le reste (donc 5Go) à sda2 pour le swap. Ces tailles sont bien sûr totalement arbitraires. La commande à utiliser ici sera « n » :

On peut remarquer ici deux choses : c’est une partition primaire (leur nombre est limité sur un disque dur, au contraire des partitions étendues) et on peut indiquer directement en Go la taille que l’on souhaite lui attribuer, d’où le « +295G » (et le « + » fait partie de la syntaxe).

Maintenant on peut recréer une deuxième partition primaire pour le swap (les valeurs par défaut suffiront dans ce cas). Et on vérifie ensuite si tout est comme on le souhaite avec la commande « p »

sda2 est pour le moment une partition classique, il faut changer son type pour indiquer à Debian de l’utiliser en tant que swap. On utilise donc la commande « t » :

Et voilà ! On a bien nos partitions à la bonne taille et du bon type. Mais attention, en l’état le système n’est toujours pas bootable. Il faut marquer quelle partition est celle à utiliser pour l’amorçage de l’OS.

c. Ajouter le flag de boot

C’est la dernière commande à entrer pour continuer à avoir un système fonctionnel. Et, forcément, on marquera la partition contenant le système : sda1. Sur fdisk, ajouter le flag de boot se fait avec la commande « a » :

On peut vérifier la partition à utiliser lors de l’amorçage en regardant laquelle possède l’étoile dans la colonne « boot ». On voit donc clairement ici que ce sera bien sda1, comme nous l’avons demandé.

Il n’y a plus qu’à valider les changements ! Et comme ceux-ci se sont fait sur la partition en cours d’utilisation, les changements seront appliqués lors du prochain redémarrage. La commande à utiliser pour enregistrer la nouvelle table des partitions est « w » :

On redémarre…

Et c’est fini !

Libre à vous d’utiliser le nouvel espace ainsi acquis comme bon vous semble. Attention, je ne dis pas qu’étendre la partition primaire (contenant l’OS) est forcément une bonne idée ou même une bonne pratique, je ne fais qu’expliquer un cas d’utilisation. Il existe une quantité de guides sur Internet expliquant comment bien partitionner votre OS, ce n’est pas du tout le but de ce guide 🙂

Liens supplémentaires

Manage VMs using Resource Manager and PowerShell | Microsoft Azure

Expanding the primary (or other) disk in Azure

Sources

http://mspoweruser.com/wp-content/uploads/2016/02/azure-logo.jpg


Related Posts Plugin

Lyyn~

Lyyn~

L'informatique est un monde magique et complexe, partager quelques connaissances et astuces au travers de ce blog me permet de participer à la construction d'un web meilleur pour tous !