Je viens de mettre en place un système de base Gentoo (ce qui signifie que je peux démarrer et me connecter et faire des choses avec lui maintenant). Ma partition racine se trouve dans un groupe virtuel LVM2 (avec une /boot
partition séparée ). Pour démarrer, je dois transmettre les paramètres ci-dessous au noyau:
root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm
Apparemment, il utilise un ramdisk initial pour faire quelque chose (je suppose charger les choses LVM) avant de monter root. Existe-t-il un moyen de mettre ce code dans le noyau lui-même afin qu'aucun initrd ne soit nécessaire? Sinon, comment puis-je faire l'initrd moi-même?
Il pourrait être utile d'ajouter que j'avais essayé de compiler le noyau pour une racine non LVM, sans initrd et cela fonctionnait parfaitement. Ensuite, j'ai essayé de mettre le tout sous LVM et je n'ai pas pu démarrer la machine (je suppose que cela ne peut pas gérer les choses LVM). Ensuite, j'ai utilisé l' genkernel
outil avec l' --lvm
option et il crée le noyau de travail et initrd que j'utilise actuellement.
Maintenant, je veux sauter genkernel
et tout faire par moi-même, de préférence sans initrd pour que la machine démarre un peu plus vite (je n'ai pas besoin de la flexibilité de toute façon).
Réponses:
Réponse simple: Non. Si vous voulez LVM, vous avez besoin d'un initrd.
Mais comme d'autres l'ont déjà dit: les LVM ne ralentissent pas votre système ou ne font rien de mal d'une autre manière, ils vous permettent simplement de créer un environnement qui permet à votre noyau de se charger et de faire son travail.
L'initrd permet de charger votre noyau: Si votre noyau est sur un lecteur LVM, tout l'environnement LVM doit être établi avant que le binaire qui contient le noyau puisse être chargé.
Consultez l'entrée Wikipedia sur initrd qui explique ce que fait l'initrd et pourquoi vous en avez besoin.
Autre remarque: je vois votre intérêt à vouloir faire les choses vous-même mais vous pouvez vous salir les mains même avec genkernel. Utilisez genkernel --menuconfig all et vous pouvez tout configurer comme si vous construisiez votre noyau complètement sans prise en charge d'outils, genkernel ajoute simplement le make bzImage, make modules et make modules_install lines pour vous et fait ce truc initrd méchant.
Vous pouvez évidemment construire l'initrd vous-même comme il est indiqué ici pour initramfs ou ici pour initrd .
la source
linuxrc
script dans initrd effectue cette tâche.edit: je viens de réaliser que vous essayez de démarrer sur LVM, je n'ai jamais configuré de LVM, je n'en ai jamais eu besoin, donc l'approche ici peut ne pas fonctionner
Voici les règles de base que vous devez faire pour créer un noyau sans initrd (à partir de la mémoire, je ne me souviens pas exactement):
Recompilez votre noyau, assurez-vous de l'intégrer dans le noyau (IMPORTANT: pas en tant que module!):
Device Drivers
)/
,/etc/*
et/lib/modules/*
(sousFile systems
)Fondamentalement, le noyau doit être capable de monter le système de fichiers racine, de lire le fichier / etc / fstab, de charger d'autres modules de pilote (si nécessaire) et de monter d'autres systèmes de fichiers non root pour terminer le reste du processus de démarrage. Si vous avez un processus de démarrage plus complexe, par exemple un démarrage réseau, vous devez également intégrer ces pilotes.
Désactivez initrd depuis le noyau "Configuration générale> Prise en charge des systèmes de fichiers RAM initiaux et du disque RAM (initramfs / initrd)" aka CONFIG_BLK_DEV_INITRD = n.
Modifiez la configuration de GRUB, vous n'avez plus besoin d'init = et de realroot =, et de configurer root = pour qu'il pointe vers le périphérique du système de fichiers racine.
Je pense que c'est tout. N'oubliez pas de conserver un noyau de sauvegarde et une bonne copie d'un Live CD amorçable, au cas où quelque chose se produirait.
Choses qui pourraient mal tourner: si vous avez compilé dans les mauvais pilotes ou si vous compilez les pilotes de base en tant que module, le noyau ne peut pas lire le système de fichiers. Redémarrez avec un nouveau noyau ou avec un Live CD et recompilez un noyau avec les bons pilotes.
La seule partie difficile consiste à déterminer quel pilote est pertinent pour votre matériel. Vous pouvez utiliser
lspci
etlshw
pour aider à identifier votre matériel. Si vous n'avez pas déjà ces outils, alorsemerge lshw pciutils
.la source
lsmod
à partir d'un noyau en cours d'exécution est également utile.Oui, vous avez besoin d'un initrd. Voici pourquoi:
Le processus de démarrage normal commence par le chargeur de démarrage, qui en sait juste assez sur votre système pour trouver le noyau et l'exécuter. (GRUB2 est assez intelligent pour trouver un noyau situé sur une partition LVM2 ou RAID, mais GRUB1 ne l'est pas, il est donc généralement recommandé de créer / démarrer en tant que partition séparée avec une disposition simplifiée.) Une fois qu'il est chargé, le noyau a besoin pour pouvoir trouver le système de fichiers racine, afin qu'il puisse démarrer le processus de démarrage. Cependant, LVM ne peut pas démarrer sans être déclenché par certains outils de l'espace utilisateur, qui existent sur le système de fichiers racine, qui ne peuvent pas être chargés sans les outils LVM, qui existent sur le système de fichiers racine ...;)
Pour briser ce cycle, un initrd ou initramfs est un système de fichiers compressé qui est stocké avec le noyau (soit dans / boot, soit à l'intérieur du noyau lui-même), qui contient juste assez de système Linux pour démarrer des services tels que LVM ou MD ou quoi que ce soit d'autre tu veux. C'est un système de fichiers temporaire, et agit uniquement comme votre système de fichiers racine assez longtemps pour que la vraie racine soit chargée.
En ce qui concerne la création, la plupart de la documentation sur le sujet est incroyablement obsolète - lvm2create_initrd, par exemple, ne fonctionne même plus sur Gentoo. (J'ai installé la même chose il y a quelques mois, et je devais tout sauf réécrire le script avant d'en avoir un initrd fonctionnel.) Créer vos propres initramfs peut être amusant, et c'est le seul moyen d'obtenir un démarrage absolument minimal processus (et apprendre les tenants et aboutissants sur la façon dont Linux démarre dans le processus), mais c'est beaucoup de travail.
La réponse courte: utilisez Dracut. C'est un nouveau framework qui est en cours de création pour générer un initramfs de manière principalement automatisée, et il est en portage. La documentation est un peu clairsemée, mais il y en a suffisamment pour comprendre les choses, et c'est de loin le moyen le plus simple d'obtenir un initramfs solide et une racine LVM.
la source
Bien qu'il ne soit pas possible de ne pas utiliser une sorte d'initrd, il est possible de ne pas utiliser de fichiers initrd séparés. (Je n'ai jamais utilisé genkernel, je ne peux donc pas donner d'instructions à ce sujet).
Par exemple, j'ai défini l'option:
Où
/usr/src/initrd.contents
dans mon cas ressemble (j'ai LVM + tuxonice + fbsplash):Et
/usr/src/init
c'est:la source
Oui, ça l'est.
Les complications résultant de la création et de la gestion des initrds sont rendues inutiles si vous installez et utilisez grub2. Le wiki grub2 http://grub.enbug.org/LVMandRAID décrit comment vous pouvez avoir votre / boot sur lvm avec rien de plus qu'un insmod lvm dans grub.cfg, le fichier de configuration grub, donc pas besoin d'initrd.
grub2 maintenant à la version 1.98 mais toujours dans la branche expérimentale de gentoo. Cependant, il peut être installé dans un autre emplacement et est parfaitement utilisable.
Prendre plaisir!
la source