Grub in verschlüsselten System bootot nach Wiederherstellung der Kernel nicht

Mansinthe

New member
Themenstarter
Registriert
3 Aug. 2014
Beiträge
33
Hallo zusammen,

nachdem ich beim Löschen alter Kernel durch einen Schreibfehler alle Kernel gelöscht und mittels chroot wiederhergestellt habe, findet grub ubuntu--vg-root nicht.
Es geht um 14.04 und die linux-image-generic wurden aufgespielt.
Mit sudo mount /dev/mapper/ubuntu--vg-root /mnt wurde die verschlüsselte Partition gemountet und der Kernel installiert.
Wie genau sage ich jetzt aber grub, was geladen werden soll?

sudo parted -l gibt (nach einbinden und decrypten) folgendes aus: http://paste.ubuntuusers.de/419482

Grub lädt erst normal und stellt mir mehrere Optionen zur Auswahl:
Ubuntu
Advanced options for Ubuntu
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)



Wenn ich nun Ubuntu anwähle, kommt:

Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait for long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls dev)
ALERT! /dev/mapper/ubuntu--vg-root does not exist. Dropping to a shell!

BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) built-in shell (ash)
Enter 'help' for a listof built-in commands.

(initramfs)



Vielen Dank für die Unterstützung.

Mansinthe
 
Ich denke, dass kann drei Ursachen haben:
- Du hast doch keinen Kernel installiert sondern z.B. nur das Metapaket oder nur die Extras oder Headers
- Es wurde keine Init-RD erstellt
- Die Ramdisk wurde nicht in Grub eingetragen.

In allen drei Fällen musst du wohl zunächst wieder in die chroot-Umgebung. Lade dir Ubuntu 14.04 Desktop runter. 32 oder 64 Bit - je nachdem, was jetzt installiert ist. Muss die gleiche sein.
Die Chroot-Umgebung baust du dir so auf: http://wiki.ubuntuusers.de/GRUB_2/Reparatur#Reparatur-mittels-Desktop-CD.
Die verschlüsselten Partitionen musst du natürlich vorher mit cryptsetup öffnen. Falls Cryptsetup im Livesystem nicht enthalten ist, hilft "sudo apt-get install cryptsetup"
Wenn du dann per chroot in deinem "kaputten" System bist, tipp mal ein "apt-get remove linux-" und drücke 2x Tab. Jetzt bekommst du das Ergebnis, was an Paketen installiert ist. Unter meiner 14.04.1-Server-Installation kommt folgende Liste dabei raus:
Code:
linux-firmware
linux-generic
linux-headers-generic
linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-image-generic
linux-image-3.13.0-32-generic
linux-image-extra-3.13.0-32-generic
linux-libc-dev
Ist das bei dir auch vorhanden?

Dann erstelle mal die initiale Ramdisk neu, dazu in der chroot-Umgebung "sudo update-initramfs -u -k all" eintippen.

Am Ende Grub updaten. Installiert sollte Grub ja noch sein, ansonsten kannst du das mit "sudo grub-install /dev/sdX" nachholen. sdX durch deine HDD ersetzen natürlich. Das updaten der Grub-Config-Files geschieht dann durch "sudo update-grub".

Aus der Chroot-Umgebung rausgehen und den Rechner neu starten. Bootet er jetzt wieder?
 
Hi,

zeig mal bitte im Live-System (nach cryptsetup, vgchange, mount, chroot):
Code:
mount
sudo lvdisplay
sudo blkid
cat /etc/crypttab
cat /boot/grub/grub.cfg
ls -l /boot
dpkg -l | grep linux

EDITH fragt: hattest Du nach dem
Code:
sudo mount /dev/mapper/ubuntu--vg-root /mnt
auch noch dein /boot nach /mnt/boot gemountet, also
Code:
sudo mount /dev/sda1 /mnt/boot
?

Ansonsten ist ein Teil der Kernelinstallation nämlich im virtuellen Abseits gelandet.

In dem Fall den Mount nachholen und die Kernelpakete nochmal entfernen und neu installieren.
 
Zuletzt bearbeitet:
Danke für die schnellen Antworten,

Kernel habe ich im decrypteten installiert mit:
apt-get -y install linux-image-generic

apt-get remove linux- liefert folgende Ausgabe:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux



/boot war mit folgendem Befehl gemountet:
sudo mount /dev/sda1 /mnt/boot

mount
sudo lvdisplay
sudo blkid
cat /etc/crypttab
cat /boot/grub/grub.cfg
ls -l /boot
dpkg -l | grep linux


liefert folgende Ausgabe:
http://paste.ubuntuusers.de/419487
 
Zu "apt-get remove linux-": nicht ausführen! Nur 2x tab drücken!

Zu /boot: Also in der Mount-Tabelle kommt es nicht vor, sicher, dass es gemountet ist?

Zu "dpkg -l | grep linux" (macht das gleiche wie die "apt-get remove linux-"+2xtab-Lösung, nur in sauber): bitte auch ausführen, nicht nur eintippen ;)
 
Ja, im chroot sieht man den /boot-Mount nicht.

Dann müssen wir uns mal den Inhalt des Initramfs anschauen. Im chroot:
Code:
mkdir /tmp/initramfs
cd /tmp/initramfs
cp /boot/initrd.img-3.13.0-32-generic /boot/initrd.img-3.13.0-32-generic.save
zcat /boot/initrd.img-3.13.0-32-generic | cpio -i
cat conf/conf.d/cryptroot

ps. die parted-Ausgabe hilft uns nicht, bei LVM-Volumes bekommt er eh Schluckauf ...

Zu "dpkg -l | grep linux" (macht das gleiche wie die "apt-get remove linux-"+2xtab-Lösung, nur in sauber): bitte auch ausführen, nicht nur eintippen
Bitte lass es einfach. Dein Kommando ist nicht zweckmässig, dafür aber gefährlich ... ;)

EDITH: Typo und Cut&Paste-Fehler in den Kommandos ...
 
Zuletzt bearbeitet:
zcat /boot/initrd.img-3.13.0-32-generic | cpio -i
liefert : http://paste.ubuntuusers.de/419502/
die Ausgabe ist leider zu groß für das Terminal, xclip klappt aus einem mir nicht ersichtlichen Grund nicht (Pakete installiert).

cat conf/conf.d/cryptroot
gibt Folgendes aus:
root@ubuntu:/tmp/initramfs# cat conf/conf.d/cryptroot
cat: conf/conf.d/cryptroot: No such file or directory
 
die Ausgabe ist leider zu groß für das Terminal
Eigentlich sollte da gar keine Ausgabe kommen. Du hast anscheinend das Auspacken zweimal gemacht, das gibt Mecker weil die Dateien schon da sind.

cat: conf/conf.d/cryptroot: No such file or directory
Das ist die Ursache deines Boot-Problems.

Die Datei sollte basierend auf den Infos aus Post #4 folgenden Inhalt haben:
target=sda5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,rootdev,lvm=ubuntu--vg-root,discard
target=sda5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,lvm=ubuntu--vg-swap_1,discard

Du packst also das Initramfs aus wie in Post #7 beschrieben (falls die Maschine noch in dem Zustand steht natürlich nicht) und erzeugst die Datei per:
Code:
echo "target=sda5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,rootdev,lvm=ubuntu--vg-root,discard" > /tmp/initramfs/conf/conf.d/cryptroot
echo "target=sda5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,lvm=ubuntu--vg-swap_1,discard" >> /tmp/initramfs/conf/conf.d/cryptroot

Dann packst Du das geänderte Initramfs wieder ein:
Code:
cd /tmp/initramfs/
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /boot/initrd.img-3.13.0-32-generic

Abschliessend versuchst Du zu booten ... :)
 
Hallo zusammen,
also ich habe es gemacht, wie du gesagt hast. Einfach wieder gechrootet, die Befehle wie in Post #7 eingegeben und dann die Befehle aus Post #9.
Wenn ich nun boote, lädt grub bis ich das Password eingeben soll. Ich gebe das Password ein (habe es mindestens 5 mal versucht) und er sagt mir, es ist falsch. Wenn ich wieder über den Live-Stick rein gehe, kann ich die Partition einfach decrypten...

Edit: Vielleicht habe ich die Fehlerursache gefunden: Seit dem letzten reboot über Live-USB, ist der Stick sda und die eigentliche Festplatte sdb. Kann ich die Befehle von oben einfach nocheinmal ausführen und sda überall gegen sdb austauschen oder konkurrieren dann zwei Anweisungen oder handelt es sich nun eventuell um kommplett unterschiedliche Adressen?
(Wie ist es eigentlich möglich, dass sich die Partitionsliste einfach so ändert?)

also:
echo "target=sdb5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,rootdev,lvm=ubuntu--vg-root,discard" > /tmp/initramfs/conf/conf.d/cryptroot
echo "target=sdb5_crypt,source=UUID=fce06fc1-34c3-481f-abb9-1bda4817c373,key=none,lvm=ubuntu--vg-swap_1,discard" >> /tmp/initramfs/conf/conf.d/cryptroot
 
Zuletzt bearbeitet:
target=sdb5_crypt
Ja, das könnte man vermuten, trifft aber nicht zu. Was hinter "target=" steht, ist einfach nur ein symbolischer Name, der übereinstimmen muss mit dem ersten String in /etc/crypttab. Ursprünglich ist das natürlich abgeleitet vom Device der Partition.

Du kannst jetzt noch probieren, das Initramfs neu aufzubauen - im chroot:
Code:
update-initramfs -u -k 3.13.0-32-generic

Es könnte aber auch sein, dass das Initramfs-System (sporadisch) mit US-Keyboard-Layout unterwegs ist. Versuch doch mal dein Verschlüsselungspasswort zu "übersetzen" auf das andere Layout.
 
Jetzt bootet wieder nicht richtig, sondern gibt mir wieder die alte Ausgabe, wenn ich in grub Ubuntu auswähle:

Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait for long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls dev)
ALERT! /dev/mapper/ubuntu--vg-root does not exist. Dropping to a shell!

BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) built-in shell (ash)
Enter 'help' for a listof built-in commands.

(initramfs)

Mein pw habe ich jetzt mal "übersetzt". Ist identisch...


Edit: Ich habe das ThinkPad jetzt nochmal hochgefahren, gechrootet (jetzt ist die Partitionsliste wieder "normal") und wollte nochmal probieren Initramfs neu aufzubauen:
root@ubuntu:/# update-initramfs -u -k 3.13.0-32-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-32-generic
cryptsetup: WARNING: invalid line in /etc/crypttab for luks-fce06fc1-34c3-481f-abb9-1bda4817c373 -
cryptsetup: WARNING: invalid line in /etc/crypttab for luks-fce06fc1-34c3-481f-abb9-1bda4817c373 -


Edit Nr. 2: Langsam verlässt mich der Kampfgeist. Ich habe die home-Partition auf eine externe kopiert und würde das System dann heute Abend plattmachen, wenn niemandem mehr was einfällt.
 
Zuletzt bearbeitet:
Hi,

in einem laufenden System ist es anscheinend völlig egal ob das Initramfs eine gültige conf/conf.d/cryptroot enthält. update-initramfs legt sie stets wieder an, kann sich aber in einem chroot natürlich anders verhalten. Früher war update-initramfs dagegen deutlich zickiger, daher kenne ich diese ganzen Details ...

Probier nochmal im chroot das Initramfs ganz neu zu erzeugen:
Code:
update-initramfs [B]-c[/B] -k 3.13.0-32-generic

Ansonsten denke ich auch, dass Neuaufsetzen ökonomischer ist.
 
root@ubuntu:/# update-initramfs -c -k 3.13.0-32-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-32-generic
cryptsetup: WARNING: invalid line in /etc/crypttab for luks-fce06fc1-34c3-481f-abb9-1bda4817c373 -
cryptsetup: WARNING: invalid line in /etc/crypttab for luks-fce06fc1-34c3-481f-abb9-1bda4817c373 -
 
Ich weiss nicht was ihn an der crypttab stört. Dort hast Du nichts verändert, oder?

Kannst ja mal versuchen zu booten (sobald dein Backup durch ist). Es ist ja schließlich nur eine "WARNING" ... :D

EDITH hat noch eine Idee woran es liegen könnte: beim Aufschliessen im Livesystem musst Du wahrscheinlich den zur /etc/crypttab passenden Namen sda5_crypt angeben, also:
Code:
sudo cryptsetup luksOpen /dev/sda5 [B]sda5_crypt[/B]
Statt /dev/sda5 eventuell /dev/sdb5
 
Zuletzt bearbeitet:
habe das jetzt auch probiert:

ubuntu@ubuntu:~$ sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
Enter passphrase for /dev/sda5:
Cannot use device /dev/sda5 which is in use (already mapped or mounted).


Im crypttab habe ich nichts geändert.
/home ist kopiert. Ich probiere noch einmal zu booten und dann ... bye bye
 
Zweimal aufschliessen geht natürlich nicht, da wäre vorher ein
Code:
cryptsetup luksClose xxxxxx
nötig. Da ich aber nicht weiss wie Du es genannt hast, hilft booten.
 
Ich habe Ubuntu platt gemacht und neu aufgesetzt. Da ist zuerst dergleiche Fehler aufgetreten, dass der Computer beim booten mein pw nicht genommen hat (ich habe wirklich alles komplett platt gemacht). Dann habe ich die Installation noch einmal durchgeführt und als Sprache Deutsch gewählt. Mit einem Mal klappt alles. Etwas ominös.

Vielen Dank für die Hilfe an alle, insb. an linrunner!
 
wenn du das tastaturlayout nicht vor der installation auf deutsch stellst, wird das amerikanische genommen! dadurch sind nicht nur y und z vertauscht, sondern auch ziemlich viele andere tasten. wenbn du so eine in deiner passphrase hast, musst du beim booten die taste drücken, die auf einer us-tastatur das gewünschte zeichen enthält.
wenn du erst nach der installation in der gui das tastatur-layout auf deutsch stellst, gilt das nur für die gui, nicht für den bootvorgang und somit auch nicht für die passphrase der hdd-verschlüsselung.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben