mercredi 4 novembre 2015

Le B-A BA de la gestion des disques

Alors, cet article de vulgarisation aborde des sujets largement abordés sur Internet. Néanmoins, j'ai trouvé que les articles disponibles étaient soient beaucoup trop techniques, entrant dans des détails rebutants, soit beaucoup trop légers et sources de confusion.

Comme j'ai besoin que ces concepts soient bien compris en pré-requis d'autres articles, j'ai choisi de faire une n-iéme explication, à ma sauce, et toujours en essayant d'être le plus clair possible pour les néophytes.

En pré-requis, il faut maîtriser quelques notions de base sur ce que sont un ordinateur et un système d'exploitation. Bien que l'article en question soit bien plus large dans son objet, vous pouvez utilement lire cet article : Le B-A BA de l'assemblage (hardware)

Disque, Partition, Formatage, Système de fichier

Disque physique et disque logique


Un ordinateur est équipé de un ou plusieurs disques : un  ou plusieurs disques sont installés dans le boitier et connectés sur la carte mère (et au bloc d'alimentation électrique).  Un disque est découpé en un certain nombre de secteurs de taille fixe (512 Octets généralement).



Un disque pour être utilisable doit subir une opération appelée partitionnement ; cette opération consiste à organiser l'espace disponible sur le disque en une ou plusieurs partitions. Une partition s'étend sur un certain nombre de secteurs (plus il y a de secteurs, plus la partition est grande).

Chaque partition sera vue par le système d'exploitation comme un disque distinct, comme si chaque partition était un disque distinct. Pour cette raison on appelle souvent les partitions des disques (ou unités) logiques (par opposition au disque ou unité physique).

Pourquoi partitionner ? Pour de multiples raisons d'ordre pratique. Déjà, il faut séparer le système d'exploitation et les données pour la performance et surtout la maintenance du système (on peut ainsi réinstaller le système en cas de problème, sans toucher aux données). Ensuite, on peut avoir des partitions  de données dédiées à des usages distincts : une pour les vidéos, une pour les fichiers sérieux par exemple, ainsi on pourra sauvegarder de façon distincte l'une et l'autre. Enfin, pour des usages plus avancés comme la mise en oeuvre de systèmes RAID ou de file system distincts selon l'utilisation de la partition (file system expliqué plus loin).

Sous Windows, une lettre est affectée à chaque partition : A et B sont réservés pour des lecteurs de disquettes et ne sont plus utilisés de nos jours (car plus personne n'utilise de tels périphériques totalement dépassés et sans intérêt depuis qu'il existe des clés USB), la première partition reçoit la lettre C, la seconde la lettre D etc... Certaines partitions spéciales n'ont pas de lettre attribuée et sont donc inutilisables pour l'utilisateur (usage spécial pour le démarrage et parfois pour conserver une copie de secours du système permettant de restaurer une machine endommagée).

On voit ici que le vocabulaire utilisé couramment est source de confusion car on parle sous Windows de disque C, disque D, disque E etc. alors qu'il s'agit en fait de partitions. Nous utiliserons dans cet article le bon vocabulaire ; disque pour un disque physique, partition pour un disque logique.

Sous Unix ou Linux, le fonctionnement est différent, l'utilisateur ne voit pas les partitions. Chaque partition est en fait associée à un répertoire (on parle de point de montage) et quand l'utilisateur se déplace dans ce répertoire, il change de partition sans s'en rendre compte. C'est totalement invisible, seul l'administrateur de la machine est au fait du partitionnement.

Formatage, Système de fichier (fs)

Chaque partition dispose de ce qu'on appelle un système de fichier, ou file système, FS en abrégé. Pour faire simple, c'est le système de rangement des fichiers dans la partition. Il en existe différents selon le système d'exploitation utilisé, l'usage qui est fait de le partition, et l'ancienneté de la technologie. Sous Windows, on a eu successivement FAT et FAT32, aujourd'hui la norme est NTFS. Sous Linux/Unix, on a ext3, ext4, swap etc...

Le choix du système de fichier utilisé sur une partition est effectué au moment du formatage de la partition (et non du disque comme on entend tout le temps). Le formatage est une opération qui prépare la partition pour son utilisation et elle est obligatoire pour pouvoir l'utiliser.

Pourquoi autant de fs distincts ? Les fs les plus anciens géraient leur index, c'est à dire la liste de vos fichiers et répertoires (un numéro étant associé à chacun) avec des entrées de petite taille qui étaient largement suffisantes à l'époque où un disque dur de 10 Mo (oui, oui vous avez bien lu 10 Mo) faisait l'admiration des foules et dont l'achat nécessitait un emprunt à la Banque de France. Aujourd'hui, on trouve couramment de disques de 4 To pour des prix très raisonnables. Du coup, l'index de ces fs était incapable de les gérer, et il a fallu à plusieurs reprises créer de nouveaux fs pour pouvoir s'adapter à l'évolution du matériel. En outre, les fs modernes ont des caractéristiques plus évoluées et bénéficient des progrès des technologies ces 30 dernières années.

Pourquoi vous ne savez pas tout ça ? Aujourd'hui les disques sont vendus avec une partition unique déjà créée et déjà formatée en NTFS, car c'est l'usage principal qui en est fait par le grand public (sous Windows donc). Ceci ne convient pas à tous les usages, en particulier pour utiliser le disque sous Linux, ou dans le cas où on assemble un PC et qu'on veut découper le disque en partitions suivant selon les bonnes pratiques (séparation système et données etc.).


Table de partition, MBR,GPT

Par défaut un programme (je dirais uniquement les programmes de très bas niveau : bootloader et os, le bootloader étant un programme chargé de charger l'os au démarrage de l'ordinateur) n'a aucun moyen de savoir de quelle façon un disque a été découpé en partitions. Il faut lui fournir cette information d'une façon normalisée afin qu'il puisse en prendre connaissance.

Cette information c'est ce qu'on appelle la table de partition. C'est simplement un fichier présent sur chaque disque et qui liste les partitions avec quelques informations ; où elles commencent sur le disque (à quelle adresse de secteur), quelle est leur longueur, quel est leur système de fichier, et quelques indications complémentaires (on parle de flags ou drapeaux). En particulier, on a un flag "bootable" qui indique si la partition sert à stocker les fichiers du système d'exploitation (cette information sera nécessaire à l'allumage du PC).

Où ça devient amusant, façon de parler, c'est qu'il existe deux type de tables de partitions (en fait bien plus mais je me limite à ceux utilisés sur les ordinateurs compatible PC). 

Le plus ancien s'appelle MBR (Master Boot Record, le nom est très mal choisi et source de confusion) et est utilisé depuis l'origine des PC ; il a un certain nombre de limites qui ont fini par devenir trop gênantes, raison pour laquelle il n'est plus utilisé sur les ordinateurs récents. Il a été remplacé par GPT (Global Unique IDentifier Partition Table), mais ce changement est encore récent et comme l'ancien a existé pendant plus de 30 ans on en trouve encore des traces partout.

Les principales limites de MBR étaient qu'on ne pouvait avoir que 4 partitions ; cependant, pour dépasser cette limite, il avait été inventé le concept tordu de partition primaire et de partition étendue : en déclarant une des 4 partitions comme "étendue", on pouvait à son tour la découper en n partitions, au prix de quelques gymnastiques. Mais surtout, MBR ne pouvait pas gérer des partitions d'une taille supérieure à 2.2 To (car la zone dans laquelle il rangeait ses informations était trop petite, même punition que pour les anciens fs).

Les lecteurs assidus de de blog feront peut être le lien avec la limitation de taille maximale de disque à 2.2 To levée par l'adoption de la norme UEFI en lieu et place du bon vieux BIOS. En fait, la norme GPT a été élaborée seule dans un premier temps puis a été incorporée dans la norme UEFI, ceci explique donc cela.

Et là, je ne suis pas totalement sur de moi, mais j'aurais très fortement tendance à penser que l'utilisation de MBR ou de GPT dépend du fait que votre carte mère est équipée d'un BIOS (vieille techno, il utilisera MBR), ou d'un UEFI (techno moderne, il utilisera par défaut GPT, sachant qu'il offre la possibilité de fonctionner en MBR par un mode de compatibilité appelé CSM - Module de support de la compatibilité -).  Je suppose que le mode de compatibilité permet de brancher sur une carte mère moderne (UEFI) des disques déjà partitionnés en MBR pour diverses raisons (réutilisation de disques d'une ancienne machine par exemple, pouvoir les partitionner en MBR car c'est un pré-requis pour le système d'exploitation qu'on veut installer sur la machine car il ne sait pas lire GPT).

En fait, c'est le firmware embarqué dans le BIOS/UEFI qui doit être capable de lire la table de partition afin de pouvoir initialiser le chargement du système d'exploitation à l'allumage de la machine (je prévois un article dédié sur le sujet, c'est très amusant à comprendre, mais très bas niveau et donc assez complexe). Ca semble assez logique car le code à charger en mémoire (pour que le processeur puisse l'exécuter) est stocké sur un disque et que pour pouvoir accéder au disque, il faut en connaitre les partitions et donc pouvoir lire la table des partitions (CQFD).

Les informations de la table de partition sont lues également par le système d'exploitation. Il doit donc savoir lire le format MBR ou GPT. Or, GPT est plus récent. De ce fait, il ne sera pas possible d'installer un système trop ancien (genre Windows XP sauf erreur de ma part) sur un disque partitionné selon la norme GPT. L'inverse ne posera pas de problème car les systèmes modernes savent fonctionner aussi bien avec une table MBR que GPT (selon le grand principe de compatibilité ascendante qui veut que les nouvelles versions restent compatibles avec les vieux trucs, du moins le plus longtemps possible, ce qui nous complique bien la tâche).

Voilou, c'est une explication un peu lapidaire mais l'essentiel est là je pense.

Pour l'explication de ce qui se passe au démarrage d'un PC, voir ici :
Comment démarre un ordinateur

Quelques compléments 

Si cette petite introduction vous a donné faim, voici un très bon article en Anglais un peu plus détaillé sur l'utilisation des partitions étendues pour dépasser la limite de 4 partitions en MBR (orienté Linux mais peu importe).