Evitar pantalla azul en Windows 7 al iniciar una VM de Virtualbox

Si al iniciar una máquina virtual (VM – Virtual Machine) con Windows 7 el proceso comienza normalmente y a los segundos obtenemos la pantalla azul de Windows (BSOD – Blue Screen of Death), existe la chance de que el antivirus Avast! esté instalado y sea la causa.

De ser así, abrimos la interfaz de usuario de Avast! y a continuación

  1. Menú > Opciones (Settings)
  2. General > Resolución de problemas (Troubleshooting)
  3. Desmarcar la opción “Activar virtualización asistida por hardware” (Enable Hardware-Assisted Virtualization)
  4. Reiniciar el equipo, tal como se indica en el detalle de esa opción

Volvemos a probar iniciar la VM y con suerte funcionará (como me pasó a mí)

OBS: Es posible que la opción que estamos desactivando haga menos seguro el sistema, pero es lo que me permite usar la máquina virtual.


Basado en: (secuencia de links que seguí, parece que esto vuelve a pasar cada cierto tiempo)

https://www.virtualbox.org/ticket/16866
Turns out that you have Avast installed. See #15135.

https://www.virtualbox.org/ticket/15135
Do you have Avast installed on your system? If so, is “Enable Hardware-Assisted Virtualization” checked?

https://forums.virtualbox.org/viewtopic.php?f=6&t=76191
The only change I’m aware of was Avast Antivirus update, so I uninstalled it, rebooted the computer and after that, VirtualBox was working again.
After that, just to double check, I re-installed Avast and yes, it broke VirtualBox.
In Avast, under the Troubleshooting Options page, Uncheck Enable Hardware-Assisted Virtualization.
Seems Avast must be running something in the background to create their “Sandbox” feature, and it locks up the virtualization features from being used by VirtualBox. Once I Unchecked that box and rebooted, my VBox VMs start right up!

https://forum.avast.com/index.php?topic=182778.0
Why did they need to turn on this option by default and not ask user? Average user might not need virtualization but I need that for working. I was really stressed yesterday, imagine if I was on tight deadline and this happen.

https://forum.avast.com/index.php?topic=182778.0
1. Settings -> Troubleshooting
2. Unmark/disable ‘Enable hardware-assisted virtualization’ and reboot.
That seems to release Avasts hold of the hardware virtualizations resources VirtualBox is missing to run 64-Bit Guests.
Despite disabling this feature seems unsafe, this did the trick.

Anuncios

Elegir sintaxis por defecto para archivos con cierta extensión en Sublime Text

En Sublime Text, para configurar que todos los archivos de cierta extensión sean presentados automáticamente resaltando la sintaxis de un determinado lenguaje, debemos hacer lo siguiente.

  1. abrir un archivo con la extensión deseada en Sublime Text
  2. elegir desde el menú superior: View > Syntax > Open all with current extension as …
  3. seleccionar el lenguaje cuya sintaxis se desea utilizar por defecto al abrir uno de estos archivos

Cambiar la prioridad de los procesos en Linux

Si bien es posible lanzar procesos indicando la prioridad en Linux, existen casos en los que necesitamos cambiar la prioridad de un proceso en ejecución. Para eso existe el comando renice.

renice [-n] <niceness> [-p|-g|-u] <identificadores>

donde identificadores se corresponde con:

  • un conjunto de ids de proceso (pid) si no se especifica parámetro o se precede por -p
  • un conjunto de id de grupo de proceso si se precede por -g
  • un conjunto de usuarios si se precede por -u.

Los usuarios que no sean el superusuario sólo pueden bajar la prioridad de sus procesos, es decir, aumentar su niceness (en el rango de 0 a 19). El superusuario (root) puede ajustar la prioridad de cualquier proceso usando un valor nice del rango completo (-20 a 19).

Ejemplo

Suponiendo que se está importando una base de datos y este proceso está consumiendo mucha CPU, obtenemos su PID (process id) mediante top o pgrep, y le bajamos la prioridad ejecutando desde la consola

$ renice +5 2119
2119 (process ID) old priority 0, new priority 5

Podemos repetir la operación, si la prioridad establecida no fuera suficientemente baja:

$ renice +7 2119
2119 (process ID) old priority 5, new priority 7

De esta manera, es posible que el proceso demore un poco más en terminar su ejecución, pero al mismo tiempo, otros tendrán más CPU disponible.


Ahora bien, si después de un rato vemos que no se concretara, podríamos intentar incrementar su prioridad haciendo:

$ renice 0 2119
renice: failed to set priority for 2119 (process ID): Permission denied

Esta acción falla debido a que para bajar el valor nice es necesario ser superusuario:

$ sudo renice 0 2119
2119 (process ID) old priority 10, new priority 0

Solo con el superusuario podemos establecer un niceness < 0:

$ sudo renice -5 2119
2119 (process ID) old priority 0, new priority -5

También te puede interesar:

Cambiar la prioridad de un proceso en Windows

Prioridades en Linux

Cuando ejecutamos un proceso, es el sistema operativo quien determina la planificación y asignación de recursos al mismo, entre ellos, el tiempo de CPU.

Mendiante el comando top podemos ver los procesos en ejecución

 PID USER  PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 838 us1   20   0  479476 117116  56872 S  4,7  5,7   1:02.12 Xorg   
1867 us1   20   0 1808172 255376 129456 S  2,0 12,5   0:11.70 firefox
2211 us1   20   0  751108  45624  30484 S  1,7  2,2   0:00.63 gedit  
 627 root  20   0    4552    840    776 S  0,3  0,0   0:00.01 acpid  
2226 us1   20   0   51184   4232   3604 R  0,3  0,2   0:00.13 top    
   1 root  20   0  159892   8956   6528 S  0,0  0,4   0:01.76 systemd

De toda la información presentada nos enfocamos en 2 columnas:

NI (niceness): valor de prioridad vinculado al usuario. El rango del valor nice comprende desde -20 (el mayor) a +19 (el menor).

PR (priority): prioridad del proceso para el kernel del linux. El rango de prioridades comprende desde  0 a 139, siendo

  • de 0 a 99 para tiempo real (‘rt’ en la salida de top)
  • de 100 a 139 para los usuarios (rango 0 a 39 en la salida de top)

La relación entre ambos es la siguiente:

PR = 20 + NI

Es por ello que el rango de PR = 20 + (-20 a +19) es 0 a 39.

El valor de nice, por defecto, para un proceso es heredado de su padre, y por lo general, es 0 (la prioridad correspondiente es 20). Es posible especificar un valor de nice para cambiar la prioridad de un proceso en ejecución o bien lanzar un proceso con una prioridad diferente.

Basado en:

https://askubuntu.com/questions/656771/process-niceness-vs-priority

Alternativa a UPDATE ON DUPLICATE KEY DELETE en MySQL

Lamentablemente, la sentencia expuesta en el título de esta publicación no existe en Mysql. No es posible borrar el registro luego de un UPDATE que genere un duplicado, en la misma sentencia.

La alternativa disponible es utilizar UPDATE IGNORE y luego ejecutar DELETE sobre los registros que fueron ignorados.

Ejemplo

Supongamos que existe la tabla ‘insumos_rubros’ con la asociación entre cada insumo y los rubros a los que pertenece, la cual posee una clave primaria compuesta por los 2 campos: id_insumo y id_rubro.

Al intentar cambiar todos los insumos de un rubro a otro se puede generar un registro duplicado, dado que algunos de ellos podrían haber estado asociados previamente al rubro destino:

mysql> UPDATE insumos_rubros SET id_rubro = 26 WHERE id_rubro = 13;
ERROR 1062 (23000): Duplicate entry '9-26' for key 'PRIMARY'

Rápidamente se nos viene a la mente un intento de solución:

mysql> UPDATE insumos_rubros SET id_rubro = 26 WHERE id_rubro = 13
    -> ON DUPLICATE KEY DELETE;

el cual hubiera generado un error de sintaxis debido a ‘ON DUPLICATE KEY DELETE’.

Aplicando la alternativa de UPDATE IGNORE y luego DELETE sobre los registros que fueron ignorados

mysql> UPDATE IGNORE insumos_rubros SET id_rubro = 26 WHERE id_rubro = 13;
Query OK, 65 rows affected (0.00 sec)

mysql> DELETE FROM insumos_rubros WHERE id_rubro = 13;
Query OK, 3 rows affected (0.00 sec)

logramos el objetivo deseado.

Basado en:

Utilizar los valores indicados en INSERT dentro de ON DUPLICATE KEY UPDATE en MySQL

Una de las alternativas para tratar los registros duplicados en un INSERT de MySQL es utilizar INSERT … ON DUPLICATE KEY UPDATE.  En ciertos casos es necesario actualizar los registros duplicados a partir de los valores que se han indicado en el INSERT, especialmente en una sentencia INSERT de múltiples registros (BULK INSERT).

Para ello existe la función VALUES(columna) que aplicada dentro de la cláusula UPDATE, en el caso de duplicate key, referencia al valor de ‘columna’ que habría sido insertado si no hubiera ocurrido el conflicto.

Ejemplo

Suponiendo que la tabla ‘stock’ posee la cantidad de cada item que se vende en una tienda y tiene un índice UNIQUE por el campo ‘insumo’, al agregar registros:

mysql> INSERT INTO stock (insumo,cant) VALUES ('pañuelos',4), ('corbatas',2)
     -> ON DUPLICATE KEY UPDATE cant=cant+VALUES(cant);

en caso de que ya existiera uno previo para cierto item, se incrementa su stock en la cantidad indicada.

Atención: La función VALUES() solo tiene significado dentro de sentencias INSERT... UPDATE y retorna NULL en cualquier otro caso.

Recuperar espacio en disco en Windows

Windows almacena mucha información de uso y de copias de seguridad que rara vez utilizamos. Siempre es bueno contar con un respaldo en caso de que algo falle, pero con el paso del tiempo el consumo de espacio en disco se hace excesivo y es entonces cuando podemos aplicar una limpieza.

La herramienta que Windows provee para ello es el Liberador de espacio en disco, el cual podemos lanzar desde Inicio > Ejecutar… escribiendo:

cleanmgr

Entre las opciones que provee, las que más consumen espacio son

  • Archivos temporales de Internet
    • utilizados por Internet Explorer
  • Papelera de reciclaje
    • Todo lo que vamos borrando
  • Archivos de copia de seguridad del Service Pack
    • generados a partir de una actualización del sistema con un Service Pack
  • Archivos temporales
    • generados por instalación y uso de diferentes aplicaciones
  • Archivos de Informes de error de Windows
    • Registros de errores que en algún caso podrían asistir a diagnóstico de problema

Ninguna de ellas es esencial para el uso del sistema y se pueden recuperar valiosos bytes para otras tareas.