J'ai Linux (Debian Jessie) installé sur un disque dur. Drive - sda1
, ext4fs et sda2
- swap
J'ai un /chroot
dossier. Il est installé un autre système, dans le /chroot
dossier.
Question:
Comment dire au gestionnaire de démarrage de démarrer non pas le système principal (principal, Debian Jessie), mais le système dans / chroot ? Probablement, changer /menu.lst
et /chroot/etc/fstab
? ( vmlinuz root=/dev/sda1/chroot
?)
Ou une autre variante de question: est-il possible, d'avoir linux installé non pas dans le répertoire racine de la partition, mais dans le dossier? ( /another_linux/bin
, /another_linux/home
, /another_linux/etc
, ...)
vmlinuz root=/dev/sda1/chroot
ne fonctionnera pas. On pourrait probablement simuler cela avec une méthode similaire à celle utilisée dansinitrd
. Voir par exemple ici . Vous montez/new_root
comme décrit ici, puis au lieu decd /new_root
fairecd /new_root/chroot
et de continuer.Réponses:
Cela ne peut pas être fait par le chargeur de démarrage ou le noyau. Le paramètre de l'
root
option du noyau tel que dansroot=/dev/sda1
ressemble à un chemin d'accès Unix standard, mais ces chemins d'accès sont interprétés en fonction du système de fichiers actuellement monté. Au moment où l'root
option est interprétée, il n'y a pas de système de fichiers monté. Enfin, presque rien. Au moment de l'initialisation du noyau, il existe une instance d'unramfs
système de fichiers minimal appelérootfs
monté en tant que racine pour le processus initial en cours d'exécutionstart_kernel()
. L'interprétation réelle duroot
paramètre d'option se fait dans une routine appeléename_to_dev_t()
. L'une des syntaxes prises en charge est le/dev/name
format, où le nom est interprété en effectuant un montage temporaire dusysfs
système de fichiers dans lerootfs
root, et en recherchant une entrée de périphérique de bloc correspondant au nom sous/sys/block
. Ce processus est expliqué plus en détail ici .La configuration telle que décrite devrait être effectuée en démarrant d'abord dans un environnement minimal tel que celui fourni par an
initrd
, montez le véritable système de fichiers racine à partir/dev/sda1
d'un point de montage temporaire, par exemple/mnt/rootfs
, puis changez le répertoire racine en/mnt/rootfs/chroot
utilisantpivot_root(8)
.Ceci est quelque peu similaire à la configuration des systèmes de fichiers racine pour les conteneurs LinuX ( LXC ). LXC est une implémentation de virtualisation au niveau du système d'exploitation pour Linux. La virtualisation au niveau du système d'exploitation est couramment utilisée dans les environnements d'hébergement virtuels comme alternative légère à la virtualisation complète gérée par un hyperviseur. Dans la virtualisation au niveau du système d'exploitation, un seul noyau de système d'exploitation est partagé entre plusieurs instances d'espace utilisateur isolées. Chaque instance, souvent appelée conteneur, prison, serveur privé virtuel (VPE) ou environnement virtuel (VE), est essentiellement une installation de système d'exploitation distincte hébergée dans son propre répertoire sur le système hôte.
la source
Je suis tombé sur le même problème et j'ai fini par écrire ceci pour le faire fonctionner sans douleur sur différents systèmes (debian, ubuntu actuellement):
Exécutez le
make_chroot_initrd
script pour créer une nouvelle image initrd compatible chroot à partir de l'image existante:La nouvelle image sera exactement la même, sauf qu'elle peut désormais gérer un
chroot=
paramètre de démarrage.Avec grub2 comme chargeur de démarrage, vous pouvez ajouter une entrée à
/boot/grub/grub.cfg
:(ou peut-être mieux
/etc/grub.d/40_custom
)(modifiez les fichiers / partitions en fonction des vôtres)
Installation à l'échelle du système
Une fois que vous en êtes satisfait, vous pouvez rendre les modifications permanentes
(jusqu'à ce que le package initramfs-tools soit mis à niveau).
Dans le système chrooté:
À partir de maintenant, l'image initrd normale prendra en charge le démarrage chroot.
Pas besoin d'utiliser un initrd.chroot séparé qui pourrait alors se désynchroniser avec lui.
Voir boot_chroot pour plus de détails.
la source
Oui, vous pouvez faire l'affaire en utilisant des sous-volumes Btrfs .
Vous devez d'abord convertir ext4 en btrfs comme décrit ici .
Convertissez votre chroot en sous-volume s'il ne l'est pas encore:
Vous avez maintenant un sous-volume nommé path / to / chroot . Vous pouvez le vérifier avec
sudo btrfs subvol list /
Vous pouvez maintenant créer un enregistrement de démarrage vers un sous-volume dans grub. Ajoutez simplement
rootflags=subvol=path/to/chroot
à la chaîne de chargement du noyau linux dans l'élément de menu grub ou utilisez -le pour sonder automatiquement.la source