Behebung einer nicht bootfähigen Installation im LVM-Stammverzeichnis von Desktop LiveCD

9

Ich habe gerade eine Installation von der 10.10 Desktop LiveCD durchgeführt und das Root-Volume zu einem LVM-LV gemacht.

Anscheinend wird dies nicht unterstützt; Ich habe es geschafft, indem ich die folgenden Schritte ausgeführt habe, bevor ich die GUI-Installations-App gestartet habe:

  • Installieren des lvm2Pakets auf dem laufenden System
  • Erstellen einer LVM-Partition auf der Systemfestplatte
  • Erstellen eines physischen Volumes, einer Volume-Gruppe und eines Root-LV mit den LVM-Tools. Ich habe auch eine zweite LV für erstellt /var; das halte ich nicht für relevant.
  • Erstellen eines Dateisystems (ext4) auf jedem der beiden LVs.

Nach diesen Schritten bot das GUI-Installationsprogramm die beiden LVs als Installationsziele an. Ich habe es gerne akzeptiert und auch /booteine primäre Partition eingerichtet, die von der LVM-Partition getrennt ist.

Die Installation schien reibungslos zu verlaufen, und ich habe überprüft, dass sowohl das Root- als auch das Var-Volume akzeptabel aussehende Verzeichnisstrukturen enthalten.

Das Booten schlägt jedoch fehl. Wenn ich richtig verstanden habe, was passiert ist, wurde ich in eine Busybox fallen gelassen, die im initrd-Dateisystem ausgeführt wird.

Obwohl ich noch nicht alle grub2-Dokumente durchgearbeitet habe, sieht es so aus, als ob der Eintrag, der versucht, mein neues System zu starten, korrekt ist:

menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos3)'
    search --no-floppy --fs-uuid --set $UUID_OF_BOOT_FILESYSTEM
    linux   /vmlinuz-2.6.35-22-generic root=/dev/mapper/$LVM_VOLUME_GROUP-root ro   quiet splash
    initrd  /initrd.img-2.6.35-22-generic
}

Beachten Sie, dass $ VARS im Ist grub.cfgdurch die entsprechenden Werte ersetzt werden.

Ich habe wieder in die Live-CD gestartet und das initrd-Image in ein temporäres Verzeichnis entpackt. Es sieht so aus, als ob dem initrd-Image die LVM-Funktionalität fehlt. Wenn ich beispielsweise richtig lese /usr/share/initramfs-tools/hooks/lvm2(installiert mit lvm2auf dem livecd-gebooteten System, nicht vorhanden auf dem installierten), lvmsollte sich eine ausführbare Datei in befinden /sbin. das ist nicht der Fall.

Was ist der beste Weg, um diese Situation zu beheben? Mir ist klar, dass es einfacher wäre, nur die alternative Installations-CD zu verwenden, die anscheinend LVM unterstützt, aber ich möchte nicht warten, bis sie heruntergeladen ist, und dann neu installieren müssen.

intuitiv
quelle

Antworten:

9

Sie haben das Problem direkt auf den Kopf getroffen: Das initramfs unterstützt LVM nicht. So beheben Sie das Problem:

  1. Starten Sie die LiveCD erneut
  2. Installieren Sie lvm2erneut in der Live-Umgebung
  3. Rufen Sie die Volume-Gruppe auf (wenn -ay nicht funktioniert, versuchen Sie -a yes).

    vgchange -a y
    
  4. Holen Sie sich das Root-LV, / boot und / dev unter den separaten Baum

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Kopieren Sie die benötigten Pakete in den / newroot-Baum

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Chroot in den neuen Baum und installieren Sie die Pakete

    chroot /newroot
    cd /tmp
    dpkg -i *.deb
    

Zu diesem Zeitpunkt sollten die Dinge wieder normal sein (da die initramfs bei der Installation von lvm2 neu generiert werden). Wenn nicht, können Sie mit dem Laufen update-initramfs -uin der Chroot spielen.

Kees Cook
quelle
Was ist der Grund für Bind-Mounting / Dev?
Intuitiert
Ich habe / dev hinzugefügt, falls grub erneut ausgeführt wird, und wollte herausfinden, wo sich die Startlaufwerke befinden. Ich habe dpkg für den Fall verwendet, dass das Netzwerk in der Chroot nicht aktiv oder auf andere Weise seltsam ist. Wenn das Networking funktioniert, empfehle ich "apt-get" gegenüber "aptitude", da es heutzutage eine bessere Dep-Auflösung bietet.
Kees Cook
Vielen Dank für den Tipp apt-get, es ist schwer zu verfolgen, was was ist. Haben Sie einen Link zu weiteren Informationen dazu?
Intuition
1

Nach der Installation des Systems auf der Festplatte müssen Sie lvm2 auf diesem System installieren, bevor es gestartet werden kann. Wenn Sie lvm2 auf der Live-CD installiert haben, befinden sich die Pakete weiterhin in / var / cache / apt / archives. Wechseln Sie in dieses Verzeichnis, hängen Sie die Festplatte ein und installieren Sie die Pakete mit dpkg --root = / mnt * .deb auf der Festplatte. In Ihrem Fall müssen Sie die Root-Fs in / mnt und die Var-Fs in / mnt / var mounten.

Außerdem benötigen Sie keine separate / boot-Partition, und eine separate / var-Partition ist fraglich.

psusi
quelle
Schön ... das ist einfacher als chroot-ing. Ich denke, dies wird nicht in aptitudeder Datenbank der Pakete registriert , die explizit installiert wurden, also sollte ich wahrscheinlich nur installieren lvm2und seine Abhängigkeiten auf diese Weise. Irgendwelche Nachteile bei der Verwendung eines separaten /var? Abgesehen von dem Problem, zusätzlichen "freien" Platz zu reservieren? Ich möchte in der Lage sein, einen Schnappschuss zu erstellen, damit ich ihn nicht mit anderen großen variablen Dateien mischen kann. Ich plane, mein Home-Verzeichnis mit einem Verzeichnis in einem separaten /dataVolume zu verknüpfen oder zu binden , das ich nach der Inbetriebnahme des Systems erstellen werde, um Musik und dergleichen zu speichern.
Intuition
Außerdem: Ich muss auch die Boot-Fs an montieren /mnt/boot, nein? Ich habe festgestellt, dass lvm2bei der Installation eine neue Initrd erstellt wird.
Intuition
@intuited nein, es wird wie immer als manuell installiert aufgezeichnet. Ja, Sie müssen / boot auch mounten, wenn Sie einen separaten haben. Ein separates / var hilft nicht beim Erstellen von Schnappschüssen.
Psusi
Eine separate /varPartition hilft bei Snapshots nicht, nein, aber sie verhindert beispielsweise, dass sich die Root-Fs unerwartet füllen. Wollen Sie damit sagen, dass es Probleme beim Aufnehmen von Schnappschüssen geben wird? Oh, warte, das bist du im Kommentarthread der anderen Frage. Nevermind ..
Intuition
1

Am Ende habe ich hauptsächlich das getan, was Kees Cook gut dargelegt hat, mit Hilfe des letzten Abschnitts dieser exemplarischen Vorgehensweise . Jedoch:

  • Ich habe nicht gebunden /dev. Es sieht so aus, als hätte dies später einige Fehlermeldungen verursacht. siehe unten.
  • Ich habe mein /varVolume zusätzlich auf dem neuen Root gemountet /boot.
  • Ich habe die Debs nicht in /tmpdie neue Wurzel kopiert . Stattdessen lief ich # apt-get install aptitude; aptitude install lvm2nach chrooting.

    • Ich habe dies getan, um diese Aktionen in der apt-Datenbank zu registrieren: Zum Beispiel aptitudeund möglicherweise auch apt-get, um zu verfolgen, welche Pakete explizit installiert wurden und welche automatisch als Abhängigkeiten installiert wurden.
    • Da ich meine Pakete tatsächlich über einen lokalen apt-Proxy (laufend apt-cacher-ng) erhalte , musste ich nicht einmal warten, bis sie erneut heruntergeladen wurden. Ich musste vor dem Ausführen eine Datei mit /etc/apt/apt.conf.d/02proxyenthalten erstellen . Ich hatte dasselbe getan, bevor ich mit der Installation von Paketen begonnen hatte, während ich von der LiveCD lief, bevor ich die Installation durchführte.Acquire::http::Proxy "http://local-apt-proxy-server:3142";apt-get
    • Ich habe ein paar Mal eine Fehlermeldung oder Warnung erhalten

      Can not write log, openpty() failed (/dev/pts not mounted?)
      

** mount -o bind / dev / pts / mnt / YouNameIt / dev / pts

    This did not prevent the appropriate lines from being added to `/var/log/dpkg.log`.

    I suspect that this issue could have been averted by bind-mounting `/dev`, but I don't really understand what it means, i.e. I don't know what log it's referring to, or why it would need to access a pty in order to write to a log.
intuitiv
quelle
Ich akzeptiere meine eigene Antwort, weil es für mich gut funktioniert hat. Siehe Kees 'Antwort für eine ähnliche Lösung, die in einigen Situationen zuverlässiger sein kann.
Intuited