PROJET – Linux Partitions Calculator
Je ne pensais pas en venir un jour à rédiger un article sur cette thématique. Pourtant force est de constater que je me suis fait encore une fois ch*er la bi*e (passez-moi l’expression) à déployer une machine linux.
Je rassure le lecteur qui s’est égaré ici, ce billet va être simple.
Bref, j’ai la problématique suivante, lorsque je déploie une nouvelle machine Linux (RHEL1 ou Debian) je suis le guide d’hygiène et sécurité de l’ANSSI2. Ce qui se traduit par le partitionnement strict des points de montage système et de données. Sauf que lorsque la taille de notre disque varie, difficile de définir de tête quelle volumétrie doit être provisionnée pour chaque partition…
C’est donc là que j’ai pris un coup de sang.
En voiture Simone, c’est parti !
Avant-Propos
Je ne vais pas rentrer dans le détail du code qui compose mon application, ce n’est pas l’objectif. Si l’on souhaite comprendre ce dernier, un peu de réverse engineering et le tour est joué (surtout que j’ai commenté le code).
Je n’aborderai pas non plus la partie de durcissement des systèmes GNU Linux. Pourquoi ?
- Ce n’est pas le sujet de ce billet
- Je traite le sujet dans un de mes premiers articles que je ne partage que sur contact et échange
- Je pars du principe que cela sera fait après déploiement du SE3.
L’objectif est vraiment de comprendre ou du moins rappeler la structure d’un système GNU quant à son arborescence d’organisation de fichier. Et donc outre à mesure à comprendre pourquoi nous devons allouer plus ou moins d’espace de stockage.
Concernant l’application que j’ai développé, bien que je revienne sur ce point plus bas dans ce billet, cette dernière n’est pas fonctionnelle sur les environnements GNU Linux du fait de la GUI4.
Il est également important de souligné que cette application n’est compatible qu’avec la version 5.X de powershell.
Prérequis
- SE : Environnement Windows non obsolète
- Apps : Non Applicable
- Autres :
- PowerShell version 5.X
Théorie
Si nous devons commencer par la base, il serait bon de se poser la question
« Comment est structurer un environnement GNU Linux ? »
Contrairement à certaines connaissances que j’ai pu fréquenter, oui c’est un point important. Cela évite de faire n’importe quoi et dans une outre mesure d’apprendre quelques choses. (Toutes ressemblances avec des personnes existantes et purement fortuite).
T’es un peu chafouin en ce moment non ? Tu ne voudrais pas ton petit suppositoire à la verveine ?
Légèrement agacé avec une pointe de colère et donc de sarcasme il est vrai. L’hypocrisie des uns fait le désespoir des autres. Mais OKLM comme disent les d’jeuns je prends un sacré recul. Cependant, je suis partant pour la verveine mais pas en suppositoire, plus en pousse café 🙂 Et puis Monsieur, Madame, Mademoiselle, je suis bien fatigué… J’en ai marre…
Regardons alors de plus près l’architecture n à n-1.

(Pas de panique je vais prendre le temps de décrire chaque répertoire).
Nous avons le répertoire parent de notre arborescence, communément appelé « la Racine » (et non rien à voir avec l’organisation de l’ombre de Konoha dans Naruto [super référence…]) ou root. C’est sous ce répertoire / que nous allons retrouver les répertoires qui organise notre SE.
J’en peux plus. C’est que c’est long comme retour aux bases… J’espère ne pas avoir oublié de répertoire.
L’une des mauvaises pratiques lors du déploiement d’un SE Linux est d’allouer l’ensemble de l’espace disponible à /, de ce fait si par exemple je viens à blinder le /var/tmp ou /var/log mon système est à genoux. Donc sur un disque il convient de partitionner les répertoires.
Oui mais quels répertoires ?
En réponse à cette question, je mets en 3/4 face et je réponds par un Uraken des familles en sortant le guide de l’ANSSI.
![]() | Cela offre également une autre possibilité concernant la sécurité. Au-delà d’assurer le fonctionnement du système quant au potentiel risque de saturation de stockage, il est possible de définir des options sur les points de montage de nos répertoires. Ainsi il est possible de limiter l’accès au device ou l’exécution de programme. Je préconise également d’ajouter le répertoire /var/log/audit. Je ne rentre volontairement pas dans le détail car j’explique ce point de recommandation (R12) dans mon billet concernant le durcissement d’un système GNU Linux. |
Ok pour ce qui est de la segmentation, mais du coup, quel doit être la répartition niveau stockage ?
C’est plutôt simple. Encore une fois, il suffit de chercher un peu. Malheureusement il n’y a pas de recommandation empirique. C’est donc à nous de définir les seuils par répertoire en tenant compte des critères énoncés précédemment.
Pour ma part cela donne :
| Répertoires | % Minimum | % Maximum |
| / | 10% | 15% |
| /boot | * 1024 Mio | * 1024 Mio |
| /usr | 10% | 15% |
| /var | 10% | 15% |
| swap | 1:1 de la RAM si =< 8 Gio 1:0.5 de la RAM si > 8 Gio | 1:1 de la RAM si =< 8 Gio 1:0.5 de la RAM si > 8 Gio |
| /var/log | 5% | 10% |
| /var/log/audit | 2% | 5% |
| /var/tmp | 5% | 5% |
| /tmp | 5% | 5% |
| /opt | 5% | 10% |
| /home | 10% | 10% |
| /srv | 2% | 5% |
Voilà ce qui est pour la théorie. Comme ça me soule de ne pas savoir quel espace allouer pour 30 Gio, 40 Gio, 50 Gio de disque, j’ai été contraint de faire une petite application en Powershell… Pourquoi changer une équipe qui gagne ?
Application
Je reste un puriste en termes de développement et je ne peux me passer de Windows Powershell ISE7. Je sais qu’il existe mieux comme IDE8 (Visual Studio Code par exemple) mais je n’arrive pas à me faire à l’idée de quitter ISE…
Cela fait-il de moi un vieux réactionnaire ? Un dev de l’ancien temps ?
Bref, je laisse cette question existentielle en suspens.
Je me suis amusé pour une fois à réaliser une interface GUI9 via WindowsForm. Moi l’amoureux du CLI10 je reconnais mettre amusé. Encore une fois je sais que je ne savais rien et j’ai donc encore appris.
Réaliser une application GUI en plaçant les items au pixel c’est marrant mais vite casse gueule. Cela demande une gymnastique d’esprit qui ne me rebute pas.
Il y a toutefois un bémol non négligeable à l’utilisation de WindowsForm, cela ne permet pas l’opérabilité multiplateforme. Logique puisque WindowsForm fait partie intégrante de Windows, donc pas possible de faire fonctionner ce dernier sous Linux.
Il faudrait donc que je compose un mode de fonctionnement CLI pour assurer l’opérabilité. Cela n’est qu’au final que le développement d’une fonction d’affichage.
| La première version de mon application ne se base pas pour l’instant sur un fichier de configuration ce qui implique que les seuils minimums et maximums sont défini en dur dans le code (en tant que constante global tout de même je ne suis pas un sauvage !). | ![]() |
J’offre également la possibilité de définir la taille minimum ou maximum à provisionner.
Pour bien comprendre (c’est un grand mot) je propose la courte vidéo de présentation de la version béta de mon app.
Démonstration
GitHub
Conclusion
Qu’il est bon de revenir aux bases. Sans cela, je pense que je n’aurai pas eu l’idée de faire du GUI en powershell depuis mon ISE. Il est vrai que cela permet également de revenir peut-être aux prémices de ce blog qui étaient :
- L’aspect pédagogique
- Aborder les bases
- Réaliser des petits projets
- Sortir des sentiers battus
Ainsi, je renoue avec certaines valeurs laissées de côté dans le cadre des derniers gros projets que j’ai pu mener. Toutefois, je reste une tête de c*n à laisser transparaitre ma désinvolture, sarcasmes et autres tournures de phrases et expressions vitriolés 🙂 (Ce blog et mes articles restent un loisir personnel et cela m’amuse d’user de ma liberté d’expression tout en tachant de rester respectueux).
Bref, il est temps de clôturer ce billet et d’attaquer d’autres thématiques 🙂
Le mot de la fin :
J’ai évalué et calculé mon incompétence, elle est à la hauteur de vos mensonges et de votre lâcheté. Un petit partitionnement de prime et de service ? Vous méritez bien convenablement un pâté lorrain en cadeau ?
Erwan GUILLEMARD
Sources
- RHEL : RedHat Entreprise Linux ↩︎
- ANSSI : Agence Nationale de Sécurité des Systèmes d’Informations ↩︎
- SE : Système d’Exploitation ↩︎
- GUI : Graphical User Interface ↩︎
- GRUB : GRand Unifier Bootloader ↩︎
- BDD : Base De Données ↩︎
- ISE : Integrated Scripting Environment ↩︎
- IDE : Integraded Development Environment ↩︎
- GUI : Graphical User Interface ↩︎
- CLI : Command Line Interface ↩︎


