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 pratique 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 dites “classiques” et les nouvelles basée sur le modèle “Resource Manager”. Microsoft conseille de passer par ce dernier qui est le plus récent et qui offre la plus grande souplesse d’utilisation. C’est donc ce modèle que j’appliquerai ici.
Prérequis
- Un compte Microsoft Azure actif
- Une machine virtuelle Linux (dans mon cas, sous Debian 8) déployée en mode Resource Manager
- Un client SSH (j’utilise MobaXTerm)
- Conseillé : mon article sur l'autocomplétion dans Powershell
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 sur l'autocomplétion dans Powershell car ça va être assez pratique pour la suite de ce guide 😊
1 | # Installe les modules pour Azure Resource Manager (= RM) depuis la galerie PowerShell |
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 que l’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 :
1 | PS C:\WINDOWS\System32> Login-AzureRmAccount |
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 :
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 :
1 | PS C:\WINDOWS\System32> Get-AzureRmSubscription -SubscriptionId "votre SubscriptionID" | Select-AzureRmSubscription |
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. Désormais, 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 :
1 | PS C:\WINDOWS\System32> Get-AzureRmVM |
Illustration du résultat :
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 :
1 | PS C:\WINDOWS\System32> Get-AzureRmVM | Select ResourceGroupName, Name |
Et le résultat est bien plus clair, surtout si nous avons plus d’une VM :
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 :
1 | PS C:\WINDOWS\System32> $vm = Get-AzureRmVM -ResourceGroupName "DEBIANTESTRG" -Name "DebianTest"; echo $vm |
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 :
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 ne soit plus en activité. Une commande permet de l’éteindre facilement :
1 | PS C:\WINDOWS\System32> $vm | Stop-AzureRmVM |
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 et attendre le message qui indiquera si la requête de fermeture a été accomplie avec succès ou non.
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éé.
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.
1 | PS C:\WINDOWS\System32> $vm.StorageProfile.OsDisk.DiskSizeGB = 300 |
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 :
1 | PS C:\WINDOWS\System32> $vm | Update-AzureRmVM |
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 :
1 | PS C:\WINDOWS\System32> $vm | Start-AzureRmVM |
À 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-se et attentif-ve ! (et ne me tenez pas pour responsable si quelque chose arrive, 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é-e, la première chose à vérifier est de constater si oui ou non le disque a bien été redimensionné. Vous pouvez le faire en entrant la commande suivante :
1 | DebianTest@DebianTest:~$ lsblk |
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 :
1 | DebianTest@DebianTest:~$ sudo fdisk /dev/sda |
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 CTRL + C le permet. Ou bien la commande “q”, également. Les commandes que nous allons utiliser ici sont les suivantes :
1 | a toggle a bootable flag |
a. Supprimer les partitions existantes
En premier lieu, on vérifie les partitions existantes sur /dev/sda (donc le disque sur lequel on travaille) :
1 | Command (m for help): p |
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 :
1 | Command (m for help): d |
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 donc ici 300Go d’espace à allouer, je vais en donner 295 à sda1 et le reste (5go) à sda2 pour le swap ; ces tailles sont bien sûr totalement arbitraires. La commande à utiliser ici sera “n” :
1 | Command (m for help): 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” (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”…
1 | Command (m for help): n |
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” :
1 | Command (m for help): 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 fonctionner 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” :
1 | Command (m for help): 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’avions 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” :
1 | Command (m for help): w |
On redémarre…
1 | DebianTest@DebianTest:~$ sudo reboot |
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.