Arreglando la instalación no arrancable en la raíz LVM desde Desktop LiveCD


9

Acabo de hacer una instalación desde 10.10 Desktop LiveCD, haciendo que el volumen raíz sea un LVM LV.

Aparentemente esto no es compatible; Lo logré siguiendo estos pasos antes de iniciar la aplicación de instalación de la GUI:

  • Instalar el lvm2paquete en el sistema en ejecución
  • crear una partición de tipo LVM en el disco duro del sistema
  • crear un volumen físico, un grupo de volúmenes y un LV raíz utilizando las herramientas LVM. También creé un segundo LV para /var; Esto no creo que sea relevante.
  • creando un sistema de archivos (ext4) en cada uno de los dos LV.

Después de seguir estos pasos, el instalador de la GUI ofreció los dos LV como objetivos de instalación; Acepté con gusto, también poner /bootuna partición primaria separada de la partición LVM.

La instalación pareció funcionar sin problemas, y he verificado que tanto el volumen raíz como el volumen var contienen estructuras de directorio de aspecto aceptable.

Sin embargo, el arranque falla; si entendí correctamente lo que sucedió, me dejaron caer en un busybox que se ejecuta en el sistema de archivos initrd.

Aunque todavía no he trabajado en la totalidad de los documentos de grub2, parece que la entrada que intenta iniciar mi nuevo sistema es correcta:

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
}

Tenga en cuenta que $ VARS se reemplazan en el real grub.cfgcon sus valores correspondientes.

Reinicié nuevamente en el livecd y descomprimí la imagen initrd en un directorio temporal. Parece que la imagen initrd carece de la funcionalidad LVM. Por ejemplo, si estoy leyendo /usr/share/initramfs-tools/hooks/lvm2(instalado con lvm2el sistema arrancado con livecd, no presente en el instalado) correctamente, lvmdebería ubicarse un ejecutable en /sbin; ese no es el caso.

¿Cuál es la mejor manera de remediar esta situación? Me doy cuenta de que sería más fácil usar el CD de instalación alternativo, que aparentemente admite LVM, pero no quiero esperar a que se descargue y luego tener que volver a instalarlo.

Respuestas:


9

Llegaste al problema en la cabeza: initramfs no tiene soporte LVM. Aquí se explica cómo solucionarlo:

  1. Inicie el LiveCD nuevamente
  2. Instalar lvm2nuevamente en el entorno Live
  3. Abra el grupo de volúmenes (si -ay no funciona, intente -a sí)

    vgchange -a y
    
  4. Obtenga el LV raíz, / boot y / dev montados bajo un árbol separado

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Copie los paquetes necesarios en el árbol / newroot

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Chroot en el nuevo árbol e instalar los paquetes

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

En este punto, las cosas deberían volver a la normalidad (ya que initramfs se regenerará cuando se instale lvm2). Si no, puedes jugar corriendo update-initramfs -udentro del chroot.


¿Cuál es la razón para bind-mount / dev?
intuido

Agregué / dev en caso de que grub se volviera a ejecutar y quisiera averiguar dónde estaban ubicadas las unidades de arranque. Usé dpkg en el caso de que la red no esté activa o sea extraña dentro del chroot. Si la red funciona, recomiendo "apt-get" sobre "aptitude", ya que en la actualidad tiene una mejor resolución de dep.
Kees Cook

Gracias por el consejo apt-get, es difícil hacer un seguimiento de qué es qué. ¿Tienes un enlace para obtener más información al respecto?
intuido

1

Después de instalar el sistema en el disco duro, debe instalar lvm2 en ese sistema antes de que pueda arrancar. Si instaló lvm2 en el livecd, los paquetes seguirán en / var / cache / apt / archives. Cambie a ese directorio, monte el disco duro e instale los paquetes en el disco duro usando dpkg --root = / mnt * .deb. En su caso, necesita montar la raíz fs en / mnt, y también la var fs en / mnt / var.

Tampoco necesita la partición / boot separada, y una partición / var separada es cuestionable.


Bien ... eso es más fácil que chroot... Sin aptitudeembargo, supongo que esto no se registrará en la base de datos de paquetes que se instalaron explícitamente, por lo que probablemente debería instalar lvm2y sus dependencias de esta manera. ¿Alguna desventaja de usar un separado /var? ¿Aparte de la cuestión de tener que asignar espacio extra 'flojo'? Me gustaría poder capturarlo, así que no quiero mezclarlo con otros archivos grandes variables; Estoy planeando hacer un enlace simbólico o montar en bind mi directorio de inicio en un directorio en un /datavolumen separado que crearé después de que el sistema esté en funcionamiento, para contener música y demás.
intuido

Además: también tendré que montar el arranque fs en /mnt/boot, ¿no? Supongo que lvm2construye un nuevo initrd en la instalación.
intuido

@intuited no, se grabará como instalado manualmente como siempre. Sí, también necesita / arranque montado si tiene uno separado de esos. Tener un / var separado no ayuda a hacer instantáneas.
psusi

Una /varpartición separada no ayudará con las instantáneas, no, pero ayudará, por ejemplo, a evitar que la raíz fs se llene inesperadamente. ¿Estás diciendo que introducirá problemas al tomar instantáneas? Oh, espera, ese eres tú en el otro hilo de comentarios de preguntas. No importa ..
intuido

1

Terminé haciendo principalmente lo que Kees Cook presenta muy bien, con algo de ayuda de la sección final de este tutorial . Sin embargo:

  • No me até a la montura /dev. Parece que esto causó algunos mensajes de error más tarde; vea abajo.
  • Monté mi /varvolumen en la nueva raíz además de /boot.
  • No copié las debs en la /tmpraíz nueva. En cambio, corrí # apt-get install aptitude; aptitude install lvm2después de chrooting.

    • Hice esto para registrar estas acciones en la base de datos de apt: por ejemplo aptitude, y quizás también apt-get, rastreará qué paquetes se instalaron explícitamente y cuáles se instalaron automáticamente como dependencias.
    • Como en realidad obtengo mis paquetes a través de un proxy apt local (en ejecución apt-cacher-ng), ni siquiera tuve que esperar a que se descarguen nuevamente. Tuve que hacer un archivo en /etc/apt/apt.conf.d/02proxycontener Acquire::http::Proxy "http://local-apt-proxy-server:3142";antes de ejecutar apt-get. Había hecho lo mismo antes de comenzar a instalar paquetes mientras ejecutaba el LiveCD antes de realizar la instalación.
    • Recibí un mensaje de error o advertencia un par de veces, 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.

Estoy aceptando mi propia respuesta porque funcionó bien para mí; vea la respuesta de Kees para una solución similar que puede ser más confiable en algunas situaciones.
intuido
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.