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

9

Je viens de faire une installation à partir du LiveCD 10.10 Desktop, faisant du volume racine un LVM LV.

Apparemment, cela n'est pas pris en charge; Je l'ai géré en suivant ces étapes avant de démarrer l'application d'installation GUI:

  • installation du lvm2package 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éation d'un volume physique, d'un groupe de volumes et d'un LV racine à l'aide des outils LVM. J'ai également créé un deuxième LV pour /var; cela ne me semble pas pertinent.
  • créer un système de fichiers (ext4) sur chacun des deux LV.

Après avoir suivi ces étapes, le programme d'installation de l'interface graphique a proposé les deux LV comme cibles d'installation; J'ai accepté avec plaisir, en mettant également /bootune partition principale distincte de la partition LVM.

L'installation a semblé se dérouler sans problème et j'ai vérifié que les volumes racine et var contiennent des structures de répertoires d'aspect acceptable.

Cependant, le démarrage échoue; si j'ai bien compris ce qui s'est passé, j'ai été déposé dans une boîte occupée fonctionnant dans le système de fichiers initrd.

Bien que je n'aie pas encore parcouru l'intégralité des documents grub2, il semble que l'entrée qui tente de démarrer mon nouveau système soit 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
}

Notez que $ VARS sont remplacés dans le réel grub.cfgpar leurs valeurs correspondantes.

J'ai redémarré dans le livecd et j'ai décompressé l'image initrd dans un répertoire temporaire. Il semble que l'image initrd manque de fonctionnalités LVM. Par exemple, si je lis correctement /usr/share/initramfs-tools/hooks/lvm2(installé avec lvm2sur le système démarré par livecd, non présent sur celui installé), un lvmexécutable devrait être situé dans /sbin; Ce n'est pas le cas.

Quelle est la meilleure façon 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éinstaller.

intuition
la source

Réponses:

9

Vous frappez le problème directement sur la tête: les initramfs ne prennent pas en charge LVM. Voici comment y remédier:

  1. Redémarrez le LiveCD
  2. Réinstaller lvm2dans l'environnement Live
  3. Affichez le groupe de volumes (si -ay ne fonctionne pas, essayez -a oui)

    vgchange -a y
    
  4. Obtenez le 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 packages nécessaires dans l'arborescence / newroot

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

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

À ce stade, les choses devraient revenir à la normale (puisque les initramfs seront régénérés lorsque lvm2 sera installé). Sinon, vous pouvez jouer en courant update-initramfs -uà l'intérieur du chroot.

Kees Cook
la source
Quelle est la raison du montage de bind / dev?
intuition
J'ai ajouté / dev au cas où grub serait relancé et je voudrais savoir où se trouvaient les disques de démarrage. J'ai utilisé dpkg dans le cas où la mise en réseau n'est pas active ou autrement bizarre à l'intérieur du chroot. Si le réseautage fonctionne, je recommande "apt-get" plutôt que "aptitude" car il fait une meilleure résolution dep de nos jours.
Kees Cook
Merci pour l'astuce apt-get, il est difficile de savoir ce qui est quoi. Avez-vous un lien vers plus d'informations à ce sujet?
intuition
1

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 sur le disque dur à l'aide de dpkg --root = / mnt * .deb. Dans votre cas, vous devez monter le fs racine dans / mnt, ainsi que le var fs 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.

psusi
la source
Bien .. c'est plus facile que chroot-ing. Je suppose que cela ne s'enregistrera pas dans aptitudela base de données de packages qui ont été explicitement installés, donc je devrais probablement simplement installer lvm2et ses dépendances de cette façon. Des inconvénients à utiliser un autre /var? Autre que la question de devoir allouer de l'espace «mou» supplémentaire? J'aimerais pouvoir le prendre en photo, donc je ne veux pas le mélanger avec d'autres gros fichiers variables; Je prévois de /datacréer un lien symbolique ou de monter par montage mon répertoire personnel vers un répertoire dans un volume distinct que je créerai après la mise en service du système, pour contenir de la musique, etc.
intuitif
Aussi: je devrai également monter le fs de démarrage sur /mnt/boot, non? Je suppose que cela lvm2construit un nouvel initrd lors de l'installation.
intuitif
@intuited non, il sera enregistré comme installé manuellement comme toujours. Oui, vous devez également monter / boot si vous en avez un séparé. Avoir un / var séparé n'aide pas à faire des instantanés.
psusi
Une /varpartition séparée n'aidera pas avec les instantanés, non, mais cela aidera, par exemple, à empêcher le root fs de se remplir de façon inattendue. Êtes-vous en train de dire que cela entraînera des problèmes avec la prise de clichés? Oh, attendez, c'est vous sur l'autre fil de commentaire de question. Peu importe ..
intuition
1

J'ai fini par faire surtout 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 monté de liaison /dev. Il semble que cela ait provoqué des messages d'erreur plus tard; voir ci-dessous.
  • J'ai monté mon /varvolume sur la nouvelle racine en plus de /boot.
  • Je n'ai pas copié les debs dans /tmpla nouvelle racine. Au lieu de cela, j'ai couru # apt-get install aptitude; aptitude install lvm2après chrooting.

    • J'ai fait cela afin d'enregistrer ces actions dans la base de données apt: par exemple, aptitudeet peut-être aussi apt-get, suivra quels packages ont été installés explicitement et lesquels ont été installés automatiquement en tant que dépendances.
    • Étant donné que j'obtiens mes packages via un proxy apt local (en cours d'exécution apt-cacher-ng), je n'ai même pas eu à attendre qu'ils soient à nouveau téléchargés. J'ai dû créer un fichier /etc/apt/apt.conf.d/02proxycontenant Acquire::http::Proxy "http://local-apt-proxy-server:3142";avant de courir apt-get. J'avais fait la même chose avant de commencer à installer des packages tout en exécutant le LiveCD avant de faire l'installation.
    • J'ai reçu un message d'erreur ou un avertissement à plusieurs reprises, déclarant

      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.
intuition
la source
J'accepte ma propre réponse parce qu'elle a bien fonctionné pour moi; voir la réponse de Kees pour une solution similaire qui peut être plus fiable dans certaines situations.
intuition