Je lis un texte relativement ancien sur les partitions et les systèmes de fichiers Linux (la LPIC 1 Certification Bible). Ça dit:
Certaines versions des chargeurs de démarrage Linux ne peuvent pas accéder à un noyau situé en dehors des 1024 premiers cylindres d'un disque. En plaçant la partition/boot au début du lecteur, vous pouvez être assuré de ne pas avoir de problème lors de l'accès au noyau au démarrage. Ce problème se manifeste le plus souvent dans les cas de double démarrage de Linux avec un autre système d'exploitation qui se trouve sur la première partition.
Pourquoi un chargeur de démarrage aurait "pas d'accès au noyau en dehors des 1024 premiers cylindres sur un disque"?
De plus, que signifie "placer la partition/boot au début du lecteur"?
Il s'agit d'une limitation imposée par le fait d'avoir un BIOS et un chargeur de démarrage très anciens plutôt que Linux lui-même. Le BIOS ne pourrait accéder qu'aux 1024 premiers cylindres du disque (voir ici pour plus d'informations sur ce que sont les cylindres/têtes/secteurs). Cette limitation s'étendrait aux chargeurs de démarrage qui, en raison de leur nature simple, n'auraient pas leurs propres pilotes de disque et utiliseraient les services du BIOS pour accéder au disque.
Cela signifiait que le chargeur de démarrage et le noyau (car c'est le travail du chargeur de démarrage de le charger) devraient être dans les 1024 premiers cylindres sur les systèmes avec cette limitation. Une façon simple de le faire était de créer une partition /boot
Séparée contenant le noyau et de le placer au début du lecteur (généralement juste en en faisant la première partition). Cela signifie qu'il résiderait physiquement dans les 1024 premiers cylindres, à condition bien sûr que la partition ne soit pas trop grande.
La limitation n'est plus un problème car elle ne s'applique qu'aux anciens BIOS. De plus, de nombreux chargeurs de démarrage modernes (par exemple GRUB) ont leurs propres pilotes de disque et n'ont donc pas besoin de s'appuyer sur les services du BIOS. Les chargeurs de démarrage modernes peuvent utiliser /boot
À d'autres fins, mais il n'est plus nécessaire d'être à la fois sur une partition distincte et dans les 1024 premiers cylindres (bien qu'il existe de nombreux cas où il est nécessaire d'avoir /boot
sur une partition séparée).
/boot
contient des fichiers qui ne sont pas utilisés par le système d'exploitation, mais par son bootloader . Vous trouverez les deux fichiers du chargeur de démarrage lui-même (comme /boot/grub/*
pour Grub) et le noyau Linux (/boot/vmlinuz*
) et souvent un initrd ou initramfs associé.
Sur un PC avec BIOS hérité (par opposition au plus récent UEFI trouvé sur les ordinateurs les plus récents), le logiciel de ROM charge les 512 premiers octets du disque de démarrage en mémoire (le secteur de démarrage ). Avec seulement 512 octets (qui ne contiennent même pas tous du code: certains contiennent des données telles que comme la table de partition), le code ne peut pas faire grand-chose - il ne peut pas y avoir de pilote de disque réel. Tout ce qui peut être fait dans un espace aussi limité est d'utiliser une interface BIOS pour charger plus de code. Cette interface fournit un pour charger le Nième secteur sur le disque - et la taille de N est limitée, donc seul le début du disque peut être atteint de cette façon.
L'interface du BIOS a n peu évolué au cours des trois décennies environ, mais ses limites de taille ont eu du mal à suivre la taille des disques, ce qui a provoqué des BIOS et des chargeurs de démarrage plus anciens à 32 Mo, 512 Mo , 2 Go, 8 Go (et peut-être d'autres seuils dont je ne me souviens pas). Le chargeur de démarrage doit pouvoir utiliser l'interface du BIOS pour charger toutes les pièces nécessaires pour accéder directement au lecteur de disque. Les chargeurs de démarrage ne contiennent généralement pas de pilotes pour tous les contrôleurs de disque, donc tout jusqu'au chargement du noyau Linux (et initrd/initramfs) doit utiliser l'interface du BIOS et doit donc tenir au début du disque.
Notez qu'il s'agit d'une limitation du BIOS ou du chargeur de démarrage, pas de Linux lui-même ou d'une distribution.
/boot
aujourd'huiSur un système avec un BIOS récent et un chargeur de démarrage récent, ou avec UEFI, les limitations de taille ne sont plus pertinentes: les tailles de disque ont maintenant beaucoup de temps à rattraper. Cependant, il existe d'autres cas d'utilisation qui font un /boot
partition utile. Il permet au système principal d'être sur un périphérique RAID que le chargeur de démarrage ne prend pas en charge, ou sur un type de système de fichiers que le chargeur de démarrage ne prend pas en charge. Il permet au système principal d'être sur un appareil chiffré, que Linux peut déchiffrer mais pas le chargeur de démarrage.
Si aucune de ces limitations et de ces cas d'utilisation ne s'appliquent à vous, conservez /boot
comme partition séparée n'est pas utile. Mais elles affectent suffisamment de personnes que la plupart des distributeurs la soutiennent.
Une autre raison à côté du problème de BIOS mentionné est qu'une partition /boot
Distincte permet l'utilisation d'un système de fichiers pour le volume /
Que le chargeur de démarrage ne comprend pas (sans être limité au chargement de la liste de blocage comme avec lilo
).
Amorcer ... eh bien ... c'est vraiment la partie la plus difficile. Chaque fois qu'un ordinateur démarre, il se retrouve fondamentalement à nouveau. Il se familiarise avec ses différentes parties et, pour chacune qu'il rencontre, il gagne en capacité. Mais il doit se relever par ses propres bootstraps, pour ainsi dire, de la case départ à chaque fois.
Lors de la conception d'un processus de démarrage, l'astuce consiste à mettre la machine en place par étapes. Votre démarrage doit être rapide et fiable, et ce doit être les deux choses dans un environnement complètement inconnu à chaque fois. Je ne m'aventurerai même pas dans une conversation en mode réel/protégé (ce qui ne veut pas dire que je pourrais même le faire), mais il se passe beaucoup de choses au démarrage. À mesure que l'ordinateur assimile ses divers composants à chaque fois, il le fait par étapes progressives. Le plus crucial d'entre eux est probablement le passage de l'exécution de code intégré à l'exécution de code sur disque, ou, en d'autres termes - l'exécutif du noyau. C'est alors que le firmware (ostensiblement) se rend au système d'exploitation.
Il y a de nombreuses années, ce n'était pas tellement le cas. Auparavant, le BIOS était vraiment le Basic In/Out - des programmes réguliers faisaient des appels au firmware pour des choses comme dessiner l'écran et accéder au disque. Celles-ci étaient appelées interruptions - les anciens chapeaux se souviendraient peut-être mieux d'eux pour les frissons de plaisir qu'ils trouvaient souvent en attribuant des IRQ pour leur nouvelle matrice à points ou USR.
C'est la série de fonctions interruption ( ou INT
dans le jargon d'assemblage ) 13H que le BIOS offre en tant que services d'accès au disque. Ceux-ci sont même encore utilisés aujourd'hui pour les systèmes BIOS dans le processus de démarrage pour passer du micrologiciel au disque.
Un système BIOS vérifiera les premiers octets de chaque disque qu'il trouvera et recherchera un modèle qu'il reconnaît comme un Master Boot Record ( ou MBR
). Il s'agit d'une norme de facto vieille de plusieurs décennies et qui comprend un peu de binaire brut exécutable qui est écrit sur la tête du disque. Le MBR marque un disque BIOS comme amorçable. Il cessera de vérifier quand il en trouvera un, et donc pratiquement tout est tout ce que vous obtenez sans une astuce intelligente. Quand il en trouve un, il le mappe en mémoire et l'exécute (en mode réel, mais je n'y vais toujours pas).
Le MBR exécuté n'est certainement pas votre noyau système - 512 octets (donner ou prendre) serait assez inutile dans ce département. Il s'agit probablement d'un bootloader - un programme spécialement conçu pour surmonter un des nombreuses limitations d'adressage du BIOS - spécifiquement qu'il ne comprend aucun type de système de fichiers à tout.
Lorsque le chargeur de démarrage lit dans le noyau réel et exécute it en mémoire (comme nous le prions tous à chaque fois), il le fera probablement en demandant au BIOS via un INT13H
interrompre l'appel. Et si ce n'est pas le cas - de nombreux chargeurs de démarrage plus sophistiqués monteront des systèmes de fichiers dans le sens conventionnel et exécuteront le code d'une autre manière - alors il est très peu probable que le chargeur de démarrage soit si sophistiqué sans INT13H
ou deux. Souvent, les chargeurs de démarrage doivent se charger en chaîne - ou divers étapes d'eux-mêmes - car les 512 octets qui leur ont été alloués en premier ne répondent même pas à leurs besoins.
Tout cela est une façon détournée de discuter du disque, je sais, mais à ce stade, il devrait être très clair que le problème principal - on pourrait l'appeler un poulet et œuf type - accède au disque contenant les instructions du programme sur comment accéder aux disques. La clé de ce problème est firmware - et continue d'être de manière très différente même sur les systèmes EFI - et, le plus faible ou non, le firmware est le maillon le plus important de la chaîne de démarrage.
Vous voyez, une fois le noyau exécuté, et toutes ses innombrables routines d'accès et de contrôle du matériel, tous ces problèmes disparaissent en quelque sorte (ou, au moins, changent quelque peu), parce que moderne Les systèmes d'exploitation prennent le contrôle total d'un système, mais jusqu'à ce qu'ils le fassent, les limites du système ne s'étendent que dans la mesure où le micrologiciel le permet. Cela en dit long - le BIOS n'a pas beaucoup changé depuis le 8086. Le INT13H
call est un original 8086. Oui, il y a eu (myriade) extensions et hacks bien sûr, mais des innovations ...?
La plupart des modifications apportées au BIOS ne sont au mieux que de simples bandages. Il s'agissait d'un disque dur qui devait être physiquement mappé - divers aspects spécifiques de sa géométrie étaient mentionnés lorsque les données y étaient stockées ou récupérées. Finalement, le disque dur conventionnel a atteint une taille qui l'interdisait. Même juste la carte abstraite était trop informations pour un BIOS à gérer. Comme il ne peut fonctionner qu'en mode réel, le BIOS est limité à 1 Mo par registre de mémoire. Faites gonfler la carte des cylindres plus grande que cela, ou augmentez l'une de ses propriétés plus que ce qui peut être adressé en autant de bits, et le BIOS est littéralement perdu - hors des limites.
Cette barrière a été rencontrée et brisée beaucoup fois. Chaque fois que la carte a résumé et encodé d'une manière plus récente, intelligente et moins précise. Et de nos jours, il est littéralement impossible pour un BIOS de mapper avec précision un lecteur. Adressage de bloc logique est la norme de facto maintenant, bien que certains Cylindre/Culasse/Secteur (ou CHS) des traductions sont encore nécessaires. Ce que le microprogramme de la carte mère a perdu en précision/responsabilité, ces extensions ont résumé et ajouté aux responsabilités du microprogramme de disque pour combler les lacunes.
C'est ce jeu de chat et de souris qui est référencé dans votre question. Lorsque le BIOS ne parvient pas à comprendre un disque au-delà d'un certain point en raison de sa taille, alors toutes les données que vous voudrez peut-être qu'il récupère pour vous au démarrage - comme un chargeur de démarrage ou un noyau - feraient probablement mieux de ne pas être situées au-delà de ce point. C'est ici que /boot
venait de.
De nos jours, de telles choses sont, heureusement, rendues inutiles par la disparition du BIOS. Cela faisait 30 ans, mais il a été largement remplacé ces dernières années par le UEFI (ou EFI 2.0) = standard. UEFI fournit un mount dès la première minute, il s'initialise en mode protégé, il incorpore son propre chargeur de démarrage, il fournit un stockage variable de mémoire flash persistant au redémarrage, il est spécifié pour gérer une multitude de zétaoctets ou quoi que ce soit par disque ... et bien d'autres choses. Il est loin d'être parfait, mais c'est une amélioration considérable par rapport à son prédécesseur.
Même les arguments pour des chargeurs de démarrage spécialisés impliquant le chiffrement de disque ou des systèmes de fichiers en couches tombent à plat lorsque vous considérez que tous ces éléments doivent être gérés par le noyau du système d'exploitation de toute façon, et si vous disposez d'un mount au démarrage , vous avez toujours une idée claire de son exécution (surtout si l'on considère que le noyau Linux, dans sa configuration par défaut, est un exécutable EFI qui lui est propre).
Et donc un /boot
la partition ne devrait probablement pas trop vous inquiéter, et si vous êtes sur un système EFI, vous avez probablement déjà déjà un analogue dans la partition du système EFI, car c'est une condition requise pour démarrer le mode EFI.
Qu'il y a un /boot
le répertoire est historiquement déterminé et à partir de là "fixe" dans le Filesystem Hierarchy Standard . Le fait d'avoir une telle norme permet aux programmes (et aux administrateurs système) d'attendre certains fichiers à certains emplacements. Dans ce cas, les fichiers associés au processus de démarrage.
Avoir un /boot
la partition au début d'un disque était logique pour les BIOS plus anciens qui n'étaient pas en mesure d'indexer les blocs/secteurs dans la gamme complète des lecteurs disponibles. De ce fait, les informations à charger doivent se trouver sur un secteur pouvant être indexé, d'où une partition distincte (avec des numéros de secteur faibles) pour /boot
à partir duquel le BIOS pouvait charger des données/programmes supplémentaires (qui étaient à leur tour capables d'adresser toute la plage de disques sans utiliser le BIOS).
Il peut également être très ordonné d'avoir une partition/boot séparée. Sur ma machine, j'ai de nombreuses distributions et sauvegardes, chacune dans leurs propres partitions, mais elles partagent toutes la même partition/boot, où résident tous les noyaux pour tous les systèmes d'exploitation. De plus, toutes les distributions pointent vers ma seule et unique copie de lilo.conf qui est également dans/boot, donc je n'ai jamais à deviner ce qui se passe quand j'ajoute des noyaux, ajoute des distributions, peu importe. Voici un extrait de mon lilo.conf:
image = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root = "LABEL=y5--5-Debian1"
label = y5:D1:16.0-4
image = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root = "LABEL=y8--5-Debian2"
label = y8:D2:16.0-4
image = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root = "LABEL=y11-5-Debian3"
label = y11:D3:16.0-4
image = /boot/vmlinuz-3.16.0-4-686-pae
initrd = /boot/initrd.img-3.16.0-4-686-pae
root = "LABEL=w5--5-Debian1"
label = w5:D1:16.0-4
... c'est juste mes sauvegardes Debian sur deux disques. Voyez comme il est facile de garder une trace des noyaux? (en ce moment, toutes les sauvegardes utilisant le même noyau).
Bien que sur les systèmes modernes, les secteurs d'un fichier soient accessibles n'importe où sur un disque, il est toujours logique de confiner les matériaux de démarrage à leur propre partition de démarrage, simplement en partant du principe de "ne pas mettre tous les œufs dans le même panier".
Supposons que le système de fichiers principal soit corrompu de telle sorte qu'un chargeur de démarrage de niveau inférieur ne soit pas capable de lire correctement le niveau suivant. Si, à la place, les matériaux du chargeur de démarrage se trouvent dans leur propre partition, le noyau peut alors fonctionner correctement avec la partition racine corrompue via fsck. Cela peut être lui-même dans sa propre partition.
La partition de démarrage peut vous donner des options de "sauvetage", comme monter une partition racine alternative. De plus, que se passe-t-il si vous démarrez plusieurs systèmes d'exploitation dans différentes partitions? Ensuite, les matériaux de démarrage n'appartiennent à aucun de ces systèmes. Il est raisonnable qu'il ait sa propre partition. Vous pouvez remplacer n'importe quelle partition du système d'exploitation par un système d'exploitation différent, mais être en mesure de démarrer les systèmes d'exploitation restants.
Et si vous souhaitez utiliser pour votre partition principale un système de fichiers que le chargeur de démarrage ne comprend pas du tout? Ou, par exemple, pour lequel le support côté chargeur de démarrage est juste expérimental? Dans de telles situations, un fichier de démarrage peut toujours être utilisé s'il existe une carte de secteur (et le chargeur de démarrage prend en charge une telle chose: le bon vieux chargeur de démarrage Linux LILO utilisait des cartes de secteur, et n'avait donc pas à comprendre le système de fichiers structure du tout). Mais les cartes sectorielles sont intrinsèquement floconneuses. Si le système de fichiers est réorganisé, les secteurs se déplacent et les cartes de secteurs deviennent donc incorrectes et doivent être régénérées, sinon le système ne peut pas redémarrer.
Enfin, il y a le principe d'organisation selon lequel même si vous n'avez pas de partition réelle, c'est toujours une bonne idée que tout le matériel de démarrage soit au moins sous /boot
, et pas dispersé ailleurs.
Ce n'était pas une limitation de la distribution Linux, mais c'était une limitation des BIOS plus anciens. À l'époque, pour garantir que Linux pouvait démarrer, tous les fichiers liés au démarrage ont été placés dans leur propre partition, qui a été créée comme première partition sur le disque dur pour garantir que le chargeur de démarrage se situe dans les 1024 premiers cylindres. Créez une partition plus petite que la taille de 1024 cylindres (varie d'un disque dur à l'autre). Mais si vous créez une première partition plus grande que cette limite, il est possible que les fichiers du chargeur de démarrage se trouvent à l'extérieur de 1024 cylindres et que le BIOS ne puisse pas les charger.
Vous pouvez également obtenir le même effet en créant deux petites partitions, toutes deux situées dans les 1024 premiers cylindres, et en plaçant tous les fichiers du chargeur de démarrage sur le second.
Une autre raison de bootpartition ces jours-ci est: