Correzione dell'installazione non avviabile sulla radice LVM dal Desktop LiveCD


9

Ho appena eseguito un'installazione dal Desktop LiveCD 10.10, rendendo il volume principale un LVM LV.

Apparentemente questo non è supportato; L'ho gestito seguendo questi passaggi prima di avviare l'app di installazione della GUI:

  • installazione del lvm2pacchetto sul sistema in esecuzione
  • creazione di una partizione di tipo LVM sul disco rigido del sistema
  • creando un volume fisico, un gruppo di volumi e un LV radice usando gli strumenti LVM. Ho anche creato un secondo LV per /var; questo non penso sia rilevante.
  • creando un filesystem (ext4) su ciascuno dei due LV.

Dopo aver seguito questi passaggi, il programma di installazione della GUI ha offerto i due LV come target di installazione; Ho accettato volentieri, anche mettendo /bootsu una partizione primaria separata dalla partizione LVM.

L'installazione sembrava procedere senza problemi e ho verificato che sia i volumi root che var contengono strutture di directory dall'aspetto accettabile.

Tuttavia, l'avvio non riesce; se avessi capito bene cosa sarebbe successo, sarei stato lasciato cadere in una scatola occupata nel filesystem initrd.

Anche se non ho ancora lavorato sull'intera documentazione di grub2, sembra che la voce che tenta di avviare il mio nuovo sistema sia corretta:

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
}

Si noti che $ VARS vengono sostituiti nell'effettivo grub.cfgcon i loro valori corrispondenti.

Ho riavviato il programma in livecd e ho decompresso l'immagine initrd in una directory temporanea. Sembra che l'immagine initrd manchi di funzionalità LVM. Ad esempio, se sto leggendo /usr/share/initramfs-tools/hooks/lvm2(installato con lvm2sul sistema livecd-booted, non presente su quello installato) correttamente, lvmdovrebbe essere situato un eseguibile /sbin; Questo non è il caso.

Qual è il modo migliore per porre rimedio a questa situazione? Mi rendo conto che sarebbe più semplice utilizzare il CD di installazione alternativo, che a quanto pare supporta LVM, ma non voglio aspettare il download e quindi reinstallare.

Risposte:


9

Colpisci il problema direttamente sulla testa: initramfs non ha il supporto LVM. Ecco come risolverlo:

  1. Avviare nuovamente il LiveCD
  2. Installa di lvm2nuovo nell'ambiente Live
  3. Visualizza il gruppo di volumi (se -ay non funziona, prova -a sì)

    vgchange -a y
    
  4. Ottieni il root LV, / boot e / dev montato sotto l'albero separato

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Copia i pacchetti necessari nella struttura / newroot

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Chroot nel nuovo albero e installa i pacchetti

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

A questo punto, le cose dovrebbero tornare alla normalità (poiché initramfs verrà rigenerato quando è installato lvm2). Altrimenti, puoi giocare correndo update-initramfs -udentro il chroot.


Qual è la ragione per il bind-mount / dev?
intuito il

Ho aggiunto / dev nel caso in cui grub venisse rieseguito e volessi capire dove si trovavano le unità di avvio. Ho usato dpkg nel caso in cui la rete non sia attiva o comunque strana all'interno del chroot. Se il collegamento in rete funziona, consiglio "apt-get" su "aptitude" dato che al giorno d'oggi fa una risoluzione dep migliore.
Kees Cook,

Grazie per la segnalazione apt-get, è difficile tenere traccia di cosa sia cosa. Hai un link per maggiori informazioni a riguardo?
intuito il

1

Dopo aver installato il sistema sul disco rigido, è necessario installare lvm2 in quel sistema prima che possa avviarsi. Se hai installato lvm2 su livecd, i pacchetti saranno ancora in / var / cache / apt / archives. Passare a quella directory, montare il disco rigido e installare i pacchetti sul disco rigido usando dpkg --root = / mnt * .deb. Nel tuo caso, devi montare la radice fs su / mnt e anche la var fs su / mnt / var.

Inoltre non è necessaria la partizione separata / boot e una partizione separata / var è discutibile.


Bello .. è più facile del chrootniente. Immagino che questo non si registri nel aptitudedb di pacchetti che sono stati esplicitamente installati, quindi probabilmente dovrei semplicemente installare lvm2e le sue dipendenze in questo modo. Qualche svantaggio di utilizzare un separato /var? A parte il problema di dover allocare spazio "allentato" in più? Mi piacerebbe essere in grado di snapshot, quindi non voglio mescolarlo con altri file variabili di grandi dimensioni; Sto programmando di collegare in modo simbolico o associare la mia home directory a una directory in un /datavolume separato che creerò dopo che il sistema è attivo e funzionante, per contenere musica e così via.
intuito il

Inoltre: dovrò anche montare il boot fs su /mnt/boot, no? Ho capito che lvm2crea un nuovo initrd all'installazione.
intuito il

@intuited no, verrà registrato come installato manualmente come sempre. Sì, hai anche bisogno / avvio montato se ne hai uno separato. Avere un / var separato non aiuta a fare istantanee.
psusi,

Una /varpartizione separata non aiuterà con gli snapshot, no, ma aiuterà, ad esempio, a impedire che il root fs si riempia inaspettatamente. Stai dicendo che introdurrà problemi con lo scatto di istantanee? Oh, aspetta, sei tu sull'altro thread di commenti delle domande. Nevermind ..
intuito il

1

Ho finito per fare principalmente quello che Kees Cook espone piacevolmente, con un po 'di aiuto dall'ultima sezione di questa procedura dettagliata . Però:

  • Non ho vincolato /dev. Sembra che ciò abbia causato in seguito alcuni messaggi di errore; vedi sotto.
  • Ho montato il mio /varvolume sulla nuova radice in aggiunta a /boot.
  • Non ho copiato i detriti nella /tmpnuova radice. Invece, ho corso # apt-get install aptitude; aptitude install lvm2dopo chrooting.

    • L'ho fatto per registrare queste azioni nel database apt: ad esempio aptitude, e forse anche apt-get, seguirò quali pacchetti sono stati installati esplicitamente e quali sono stati installati automaticamente come dipendenze.
    • Dato che sto effettivamente ricevendo i miei pacchetti tramite un proxy apt locale (in esecuzione apt-cacher-ng), non ho nemmeno dovuto aspettare che si scaricassero di nuovo. Ho dovuto fare un file alla /etc/apt/apt.conf.d/02proxycontenente Acquire::http::Proxy "http://local-apt-proxy-server:3142";prima di eseguire apt-get. Avevo fatto la stessa cosa prima di iniziare l'installazione dei pacchetti mentre eseguivo il LiveCD prima di eseguire l'installazione.
    • Ho ricevuto un messaggio di errore o un avviso un paio di volte, indicando

      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.

Sto accettando la mia risposta perché ha funzionato bene per me; vedere la risposta di Kees per una soluzione simile che può essere più affidabile in alcune situazioni.
intuito il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.