Comment réparer boot en invite initramfs et "mount: ne peut pas lire '/ etc / fstab': Aucun file ou directory" et "No init found"?

Installation d'un nouveau système à l'aide d'un disque partitionné GPT dédié à une partition unique, ext4 formaté, extlinux (version 4.05) comme bootloader, Ubuntu Core version 13.10 amd64 comme rootfs et Ubuntu linux-image-3.11.0-18- et extlinux-update pour générer la configuration du bootloader.

Le résultat après le redémarrage (toujours à l'intérieur d'une machine virtuelle basée sur KVM) est une invite (initramfs) et ces messages:

mount: can't read '/etc/fstab': No such file or directory mount: mounting /dev on /root/dev failed: No such file or directory mount: mounting /sys on /root/sys failed: No such file or directory mount: mounting /proc on /root/proc failed: No such file or directory The filesystem doesn't have requested /sbin/init. No init found. Try passing init= bootarg. 

BusyBox est v1.20.2.

Régression:

  • le système de files a été vérifié avec fsck.ext4

Vérifiez l'existence de la racine

 (initramfs) ls -l /dev/[hs]da* ls: /dev/[hs]da*: No such file or directory 

Argument de démarrage racine

 (initramfs) cat /proc/cmdline initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic 

Vérifier les modules chargés

 (initramfs) cat /proc/modules e1000 145368 0 - Live 0xffffffffa0000000 

/ contenu du dossier de démarrage

 $ sudo ls -l boot -rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic -rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic -rw-r--r-- 1 root root 163258 Feb 18 22:37 config-3.11.0-18-generic drwxr-xr-x 2 root root 4096 Mar 17 20:13 extlinux -rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic -rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic 

Comment faire démarrer ce système à l'invite bash attendue par défaut?

Modifiez le paramètre de démarrage du kernel en définissant l'option root=/dev/sdaX . sdaX serait votre / votre partition root . Lors du démarrage la prochaine fois, vous verrez que votre initramfs tente de monter la partition avant d'essayer d'accéder à /etc/fstab et de monter les filesystems.

Voir la question " Est-ce que initramfs utilise / etc / fstab? " Pour plus de détails.

Ce que vous devez comprendre sur initramfs est qu'il s'agit d'un système de files. Depuis le kernel 2.6, il s'agit essentiellement du seul système de files imposé par le kernel (en laissant de côté VFS, qui est sans doute aussi un système de files) sur votre machine. Votre initramfs image est une image disque.

Au sein de votre initramfs image seront les files que votre dissortingbution a décidé étaient assez cruciaux pour nécessiter avant que votre disque racine ne soit trouvé. Habituellement, c'est Busybox et les modules du kernel dont vous avez besoin pour find et monter votre périphérique racine. Cela ne fonctionne pas pour vous.

Il n'y a pas vraiment de mystère ici, tout count fait. Si vous pouvez find votre path autour d'une invite de terminal, vous pouvez naviguer dans le initramfs. Mais d'abord, tu dois le démystifier.

Tout d'abord et encore une fois – c'est juste /. C'est la racine Linux qui fait des choses de type racine Linux. En fait, s'il est dans un file séparé de votre kernel, c'est déjà votre deuxième périphérique racine. Chaque kernel Linux contient un kernel essentiellement vide qu'il doit d'abord monter avant de initramfs. votre initramfs.

Quoi de plus initramfs est la vraie racine. C'est là que le kernel Linux initialise l'espace user en exécutant init puis en renonçant à toute responsabilité pour tout problème que vous pourriez rencontrer par la suite. Votre init semble être Busybox, comme beaucoup, ce qui signifie que le contrôle de ses actions devrait être aussi simple que l'édition de ses scripts shell.

Alors pourquoi l'erreur de ne pas find init? Presque certainement cela fait reference à un programme nommé init qui a été init votre init via le script shell pour s'exécuter.

Le plus frappant pour moi est que les filesystems de pseudo kernel – dev sys proc – ne montent pas. C'est soit très troublant ou un très bon indice. Vous mentionnez KVM, ce qui m'amène à interroger les capacités du kernel, mais avant de descendre cette route sombre et défoncée, pouvons-nous d'abord essayer autre chose?

 cd /root || mkdir /root 

Il me frappe que le message d'erreur est à plusieurs resockets:

Aucun file ou directory de ce nom

A défaut, vous devez rebuild votre image initramfs . Démarrez sur un disque live pour le faire et exécutez n'importe quel outil que votre dissortingbution fournit pour accomplir cette fin. Oh, et assurez- vous que ce disque live est chargé en mode EFI .

Donc, voici la seule chose vraiment hors de l'ordinaire à propos de initramfs - switchroot.

Le kernel Linux fournit un syscall très spécial destiné aux users débutants et gérant le passage d' initramfs à votre périphérique de disque racine. Il fonctionne en montant d'abord votre disque racine dans un sharepoint assembly dans initramfs , puis en y faisant pivoter le système de files racine. Je suppose que initramfs's sharepoint assembly cible de votre initramfs's est basé sur la façon dont il gémit à ce sujet. Pourquoi ne pas vous assurer qu'il est là?

Pour plus d'enquête, vous allez avoir besoin d'get un peu graveleux. Ajustez votre bootloader pour passer …

 init=/bin/sh 

… comme paramètre du kernel.