Je mets à jour le kernel dans Debian 9.0 Stretch pour le kernel à 4.9.0-1-amd64.
Le package est installé, cependant, à la fin de la procédure j'ai eu l'erreur cryptique:
device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy Command failed
Je suis également inquiet de le redémarrer, et il ne démarre pas correctement.
L'exécution de dpkg-reconfigure linux-image-4.9.0-1-amd64
produit également la même erreur.
Assez curieusement, à /etc/fstab
je n'ai pas de partition sda2
, et la procédure utilisée pour fonctionner jusqu'à présent. Il a juste cessé de fonctionner après les dernières mises à niveau du package (en fait je pourrais jurer que j'ai vu l'erreur après la dernière mise à jour du package udev
vers 232-18). Les machines virtuelles avec Jessie fonctionnent toujours bien.
Donc fstab
est:
$cat /etc/fstab /dev/sda1 / ext3 errors=remount-ro,noatime 0 1 /dev/sda3 none swap sw 0 0
Cependant, en exécutant blkid
, je me souviens maintenant /dev/sda2
est la partition de journalisation ext3:
/dev/sda1: UUID="43dcd715-1914-4da8-8e55-27879705920a" EXT_JOURNAL="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="ext3" PARTUUID="8aac691c-01" /dev/sda2: LABEL="j-my-dev" UUID="b153f326-cb4e-491b-9b38-f9750dcf5165" LOGUUID="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="jbd" PARTUUID="8aac691c-02" /dev/sda3: UUID="a04c0b69-07d5-40e1-8c80-6914118f6df4" TYPE="swap" PARTUUID="8aac691c-03"
Après avoir enquêté un peu plus, j'ai aussi trouvé un file suspendu mentionnant toujours l'ancienne sda2
(car cette machine virtuelle a été migrée depuis un server avec LVM il y a plusieurs lunes)
Le contenu de /etc/blkid.tab
était le suivant:
<device DEVNO="0x0802" TIME="1414777337.116803" UUID="B24u3l-mvwB-vyxK-GRNw-vc6o-r2sS-NDgVru" TYPE="LVM2_member">/dev/sda2</device>
Je l'ai supprimé, mais il ne fait probablement aucune différence car le bon blkid.tab
est comme prévu à /var/run/blkid/blkid.tab
<device DEVNO="0x0801" TIME="1487991512.317454" UUID="43dcd715-1914-4da8-8e55-27879705920a" EXT_JOURNAL="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="ext3" PARTUUID="8aac691c-01">/dev/sda1</device> <device DEVNO="0x0802" TIME="1487991415.63466" LABEL="j-my-dev" UUID="b153f326-cb4e-491b-9b38-f9750dcf5165" LOGUUID="b153f326-cb4e-491b-9b38-f9750dcf5165" TYPE="jbd" PARTUUID="8aac691c-02">/dev/sda2</device> <device DEVNO="0x0803" TIME="1487991512.507280" UUID="a04c0b69-07d5-40e1-8c80-6914118f6df4" TYPE="swap" PARTUUID="8aac691c-03">/dev/sda3</device>
L'exécution de la dpkg-reconfigure
précédente donne toujours la même erreur.
J'ai aussi réussi à identifier l'erreur de upgrade-grub
à upgrade-grub
étant appelée dans dpkg-reconfigure
. Exécuter séparément:
#update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.9.0-1-amd64 Found initrd image: /boot/initrd.img-4.9.0-1-amd64 device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy Command failed done
stracing upgrade-grub
, il est évident que cela se passe à /etc/grub.d/30_os-prober
, et en lisant ce script, la command offensive est os-prober
.
Donc en cours d'exécution:
#os-prober device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy Command failed
L'erreur provient de l'appel os-prober
:
#/usr/bin/linux-boot-prober /dev/sda2 device-mapper: reload ioctl on osprober-linux-sda2 failed: Device or resource busy Command failed
En regardant 30_os-prober
j'apprends aussi à propos de GRUB_OS_PROBER_SKIP_LIST
.
if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2 continue fi
Googling around a trouvé cet article: Faire grub2 ignorer une certaine partition , ce qui m'a conduit à mettre dans /etc/default/grub
:
GRUB_OS_PROBER_SKIP_LIST="b153f326-cb4e-491b-9b38-f9750dcf5165@/dev/sda2"
Cependant, l'erreur persiste et la mise en mode debug du script 30_os-prober
indique que le bloc de code responsable de la gestion de GRUB_OS_PROBER_SKIP_LIST
n'est pas exécuté. par exemple, il n'atteint même pas la ligne if
affichée ci-dessus.
Ma version de GRUB est 2.02~beta3-5
. Que faire?
UPDATE: selon la request @ GaD3R, libmapper-dev est 1.02.1
Étant donné que GRUB_OS_PROBER_SKIP_LIST
n'est apparemment pas utilisé (bug?), J'ai dû configurer GRUB / os-prober pour ne pas scanner le operating system dans chaque partition.
Donc, il a été ajouté à /etc/default/grub
la ligne:
GRUB_DISABLE_OS_PROBER=true
Maintenant, les commands dpkg-reconfigure linux-image-4.9.0-1-amd64
et update-grub
fonctionnent correctement.
Le server en question a également été redémarré avec le kernel 4.9.0-1-amd64
avec succès.
Une question connexe, que j'ai trouvée après tout le debugging et la solution, ici , préconise également la suppression complète os-prober
comme une alternative. Cette solution fonctionnera également lorsque les scripts vérifieront l'existence du binary avant de l'invoquer.
Je soupçonne os-prober
est seulement nécessaire pour grub multi-OS, ce qui n'est pas mon cas.
Après le commentaire de @Ferenc Wágner sur les problèmes historiques avec os-prober
, et aussi l'opinion que cela ne fait pas mal de le supprimer, je l'ai effectivement supprimé de mes machines virtuelles.