web-dev-qa-db-fra.com

Correction d'une installation non amorçable sur la racine LVM à partir de Desktop LiveCD

Je viens de faire une installation à partir du 10.10 Desktop LiveCD, en transformant le volume racine en LVM LV.

Apparemment, cela n'est pas supporté. Je l'ai géré en prenant les mesures suivantes avant de lancer l'application du programme d'installation graphique:

  • installation du package lvm2 sur le système en cours d'exécution
  • création d'une partition de type LVM sur le disque dur du système
  • créer un volume physique, un groupe de volumes et une LV racine à l'aide des outils LVM. J'ai également créé un deuxième LV pour /var; Je ne pense pas que cela soit pertinent.
  • créer un système de fichiers (ext4) sur chacun des deux volumes logiques.

Après avoir suivi ces étapes, l’installateur graphique a proposé les deux LV comme cibles d’installation; J'ai volontiers accepté, en mettant aussi /boot sur une partition principale distincte de la partition LVM.

L'installation semblait se dérouler sans heurts et j'ai vérifié que les volumes racine et var contenaient tous deux des structures de répertoires acceptables.

Cependant, le démarrage échoue. si j'ai bien compris ce qui s'est passé, j'ai été déposé dans une busybox s'exécutant dans le système de fichiers initrd.

Bien que je n'aie pas encore parcouru l'intégralité de la documentation grub2, il semble que l'entrée qui tente de démarrer mon nouveau système est correcte:

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
}

Note que $ VARS est remplacé dans le grub.cfg par les valeurs correspondantes.

J'ai redémarré dans le livecd et ai décompressé l'image initrd dans un répertoire temporaire. Il semble que l'image initrd manque de fonctionnalité LVM. Par exemple, si je lis /usr/share/initramfs-tools/hooks/lvm2 (installé avec lvm2 sur le système démarré par livecd, absent de celui installé), un exécutable lvm devrait se trouver dans /sbin; Ce n'est pas le cas.

Quel est le meilleur moyen de remédier à cette situation? Je me rends compte qu'il serait plus facile d'utiliser simplement le CD d'installation alternatif, qui prend apparemment en charge LVM, mais je ne veux pas attendre qu'il soit téléchargé puis réinstallé.

9
intuited

Vous frappez le problème droit dans la tête: initramfs ne prend pas en charge LVM. Voici comment y remédier:

  1. Redémarrez le LiveCD
  2. Installez à nouveau lvm2 dans l'environnement en direct
  3. Afficher le groupe de volumes (si -a y ne fonctionne pas, essayez -a oui)

    vgchange -a y
    
  4. Obtenez la racine LV,/boot et/dev montés sous l'arborescence séparée

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Copiez les paquetages nécessaires dans l'arborescence/newroot

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Chroot dans la nouvelle arborescence et installez les packages

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

À ce stade, les choses devraient revenir à la normale (puisque initramfs sera régénéré lorsque lvm2 sera installé). Sinon, vous pouvez jouer avec update-initramfs -u dans le chroot.

9
Kees Cook

Après avoir installé le système sur le disque dur, vous devez installer lvm2 sur ce système avant de pouvoir démarrer. Si vous avez installé lvm2 sur le livecd, les packages seront toujours dans/var/cache/apt/archives. Accédez à ce répertoire, montez le disque dur et installez les packages à l'aide de dpkg --root =/mnt * .deb. Dans votre cas, vous devez monter la fs racine sur/mnt, ainsi que la fs var dans/mnt/var.

De plus, vous n'avez pas besoin de la partition/boot séparée, et une partition/var séparée est discutable.

1
psusi

J'ai fini par faire la plupart du temps ce que Kees Cook a joliment présenté, avec l'aide de la dernière section de cette procédure pas à pas . Toutefois:

  • Je n'ai pas lié-monter /dev. Il semble que cela ait causé des messages d'erreur plus tard. voir ci-dessous.
  • J'ai monté mon volume /var sur la nouvelle racine en plus de /boot.
  • Je n'ai pas copié les debs dans le /tmp de la nouvelle racine. Au lieu de cela, j'ai exécuté # apt-get install aptitude; aptitude install lvm2 après chrooting.

    • Je l’ai fait pour enregistrer ces actions dans la base de données apt: par exemple, aptitude, et peut-être aussi apt-get, suivra les paquets qui ont été installés explicitement et ceux qui ont été installés automatiquement en tant que dépendances.
    • Comme je reçois en fait mes paquets via un proxy local apt (exécutant apt-cacher-ng), je n'ai même pas eu à attendre qu'ils soient téléchargés à nouveau. J'ai dû créer un fichier à /etc/apt/apt.conf.d/02proxy contenant Acquire::http::Proxy "http://local-apt-proxy-server:3142"; avant d'exécuter apt-get. J'avais fait la même chose avant de commencer à installer des packages tout en exécutant le LiveCD avant de procéder à l'installation.
    • J'ai reçu un message d'erreur ou un avertissement à quelques reprises, indiquant

      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.
1
intuited