En finir avec l'erreur Virtualbox VERR_VD_IMAGE_READ_ONLY

19/11/2014

Au travail, on est sur des poste Windows 7… et comme on veut bosser on a des VM Linux :) bref, qui dit Windows dit “anti-virus”, et qui dit “anti-virus” dit un foutoir dans les lock… Vous avez souvent, comme moi, une erreur VERR_VD_IMAGE_READ_ONLY qui vous empêche de démarrer votre VM ? vous n’arrivez pas à trouver quel processus a locker vos disques ? moi j’y ai remédié avec Python :)

Au travail, c’est ce bon vieux McAfee (toutes blagues avec Mac à Fille sera rejeté) qui avait la fâcheuse tendance à me verrouiller mes disques virtuels pour ma VM sur VirtualBox. J’ai trouvé, de ci, de là, des commentaires dans des forums qui disent “ouiiiin j’ai une tâche qui lock ma VM, je l’ai trouvé et killé et hop ça marche”. Bha un tour dans le gestionnaire de tâche (et services) de Windows 7 m’a juste fait chialé.

Et ne parlons pas des commandes de base dans “cmd”, un équivalent de base de “lsof” vous le trouverez pas. Par contre, Microsoft propose des outils à télécharger. Genre: http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

Vous pouvez donc récupérer “Handle.exe” et le placer dans un dossier facilement accessible.

Reste à faire un script pour cmd.exe, c’est tellement puissant, tellement facile de traiter des chaines… non de déconne. Installez donc python 2.7 https://www.python.org/downloads/windows/ installez tout ça.

Tiens une super astuce de la mort pour “forcer Windows à mettre à jour les variables d’environnement”, accrochez-vous c’est jouissif !

  • ouvrir le gestionnaire de tâche
  • killez le processus “explorer.exe”
  • créez une nouvelle tâche “explorer.exe”

C’est pratique hein ? (un corbeau passe derrière ma tête)

reste à placer ce script python sur le bureau:

# -*- encoding: utf-8 -*-
import subprocess
import re

HANDLE = "c:\Users\pferlet\Handle.exe"

# bon oui, changez les chemins pour que ce soit en accord avec votre installation
vids = ["\Users\pferlet\VirtualBox VMs\Viperr\Viperr.vdi",
    "\Users\pferlet\VirtualBox VMs\Viperr\Viperr2.vdi"]
reg = re.compile(r"pid: (\d+)",re.MULTILINE|re.IGNORECASE)

for vid in vids:
    ret = subprocess.check_output([HANDLE, vid], shell=True)

    pids = reg.findall(ret)
    if len(pids) > 0:
        for pid in pids:
            subprocess.call("taskkill /F /PID %d" % int(pid))

Nommez le “unlock.py” par exemple, et pour l’exécuter, faites simplment un clique droit dessus et “ouvrir avec…”, cherchez “python.exe” et le tour est joué.

Quand ma VM se trouve locké, je lance ce script, ça explose un vieux pet moisi devant le nez de McAfee qui fuit aux toilettes pour vomir. Le temps qu’il revienne, la VM peut démarrer.

Voilà pour le coté “vous devriez tous avoir python sur vos postes Windows 7” et la question “Mac et Linux incluent Python, pourquoi pas Windows ? ha oui c’est vrai… licence tout ça…”

Ça peut vous intéresser aussi


Python en mode one liner

Python, c’est cool, c’est fun, c’est lisible ...


Serveur RSTP avec gstreamer et python

Avec mon petit raspberry-pi je me suis lancé le défit ...


OpenOffice en mode serveur

Il est parfois compliqué de créer des documents dignes de ...


Didacticiel Python Part 1

Je me suis développé un petit outil de load-balancing en ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.