2010-11-16 35 views
4

J'étudie le processus de démarrage sous Linux. Je suis tombé sur cette phrase "RAM est plusieurs ordres de grandeur plus rapide qu'une disquette, donc le fonctionnement du système est rapide à partir d'un ramdisk"Pourquoi le système de fichiers racine est-il chargé dans un disque virtuel?

Le noyau va de toute façon charger le système de fichiers racine dans la RAM pour l'exécuter. Donc, ma question pourquoi avons-nous besoin d'un ramdisk pour charger le système de fichiers racine, si le noyau charge le système de fichiers racine en RAM?

+0

BTW, ramdisks init (comme dans les périphériques _block_ à base de RAM), également connu sous le nom de initrds, ne sont pas vraiment utilisés avec les versions modernes du noyau. Ils ont été remplacés par un système de fichiers basé sur RAM (ramfs). – thkala

Répondre

8

Le documentation pour SUSE Linux fournit une bonne explication des raisons pour lesquelles Linux est démarré avec un disque virtuel:

Dès que le noyau Linux a été démarré et le système de fichiers racine (/) monté, programmes peut être exécuté et modules de noyau supplémentaires peuvent être intégré pour fournir des fonctions supplémentaires . Pour monter le fichier racine , certaines conditions doivent être satisfaites. Le noyau a besoin des pilotes correspondants pour accéder au dispositif sur lequel se trouve le système de fichiers racine (en particulier les pilotes SCSI ). Le noyau doit également contenir le code nécessaire pour lire le fichier système (ext2, reiserfs, romfs, etc.). Il est également concevable que le système de fichiers racine est déjà crypté. Dans ce cas, un mot de passe est requis pour monter le système de fichiers.Pour le problème des pilotes SCSI, un nombre de nombre de solutions différentes est possible. Le noyau pourrait contenir tous les pilotes imaginables , mais cela pourrait être un problème parce que les pilotes différents pourraient entrer en conflit les uns avec les autres. En outre, le noyau deviendrait très grand à cause de cela. Une autre possibilité est de fournir différents noyaux, chacun contenant contenant seulement un ou quelques pilotes SCSI . Cette méthode a le problème qu'un grand nombre de différents noyaux sont requis, un problème alors augmenté par les noyaux différemment optimisés (optimisation Athlon, SMP). L'idée de charger le pilote SCSI comme un module conduit au problème général résolu par le concept d'un initial ramdisk: l'exécution des programmes de l'espace utilisateur même avant que le système de fichiers racine est monté .

Cela empêche une situation potentielle de la poule ou l'œuf où le système de fichiers racine ne peut pas être chargé jusqu'à ce que l'appareil sur lequel il se trouve est accessible, mais ce dispositif ne peut pas être accessible jusqu'à ce que le système de fichiers racine a été chargé:

Le disque virtuel initial (également appelé initdisk ou initrd) permet de résoudre précisément les problèmes décrits ci-dessus. Le noyau Linux offre la possibilité de charger un petit système de fichiers sur un disque RAM et d'y exécuter des programmes avant de monter le système de fichiers racine. Le chargement de initrd est géré par le chargeur de démarrage (GRUB, LILO, etc.). Les chargeurs d'amorçage n'ont besoin que de routines BIOS pour charger les données à partir du support de démarrage. Si le chargeur de démarrage est capable de charger le noyau, il peut également charger le disque virtuel initial. Les pilotes spéciaux ne sont pas requis.

Bien sûr, un RAMDisk n'est pas strictement nécessaire pour le processus de démarrage doit avoir lieu. Par exemple, vous pouvez compiler un noyau contenant tous les pilotes matériels et modules nécessaires au démarrage. Mais apparemment, c'est trop de travail pour la plupart des gens, et le RAMDisk s'est avéré être une solution plus simple et plus évolutive.

5

La raison pour laquelle la plupart des distributions Linux utilisent un ramfs (initramfs) lors du démarrage est que son contenu peut être inclus dans le fichier noyau ou fourni par le bootloader. Ils sont donc disponibles immédiatement au démarrage, sans que le noyau doive les charger quelque part.

Cela permet au noyau d'exécuter des programmes d'espace utilisateur, par ex. configurez les périphériques, chargez les modules, configurez cette bonne matrice RAID qui contient tous les systèmes de fichiers ou demandez même à l'utilisateur le mot de passe de son système de fichiers racine chiffré.

Lorsque cette configuration est terminée, le premier script s'appelle simplement exec() s/sbin/init à partir du système de fichiers racine (maintenant configuré et disponible).

J'ai vu un certain nombre de systèmes où les pilotes eux-mêmes pour les contrôleurs de disque et les rootfs sont chargés via des modules dans un initramfs, plutôt que d'être inclus dans l'image du noyau.

Vous n'avez pas strictement besoin un initramfs à démarrage - si l'image de votre noyau contient tous les pilotes nécessaires pour accéder aux rootfs et vous ne nécessite aucune configuration spéciale ou l'entrée d'utilisateur (comme les tableaux RAID ou les systèmes de fichiers cryptés) pour monter Dans ce cas, il est souvent possible de lancer directement/sbin/init depuis le rootfs.

Voir aussi:

http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

http://www.kernel.org/doc/Documentation/initrd.txt

Comme une note de côté, certains systèmes (disques de secours, embarqués et autres) peuvent utiliser un ramfs comme système de fichiers racine lorsque le système de fichiers racine réelle est dans un support qui peut être supprimé ou non accessible en écriture (CD, MTD Flash, etc.).