En finir avec l'erreur Virtualbox VERR_VD_IMAGE_READ_ONLY

Publié le 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…”

comments powered by Disqus