Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Recuperar fotos borradas – Undelete FAT

Me ha ocurrido ya un par de veces que algún amigo me llama diciendo “he borrado sin querer las fotos de mi cámara ¿puedes hacer algo?”.
Y como la respuesta es sí, aquí dejo los pasos básicos para recuperar ficheros de particiones FAT (undelete fat).

Lo primero es no tocar más la partición donde se han borrado los archivos, en este caso la tarjeta donde se han borrado las fotos. No probar a hacer nuevas fotos, por ejemplo.
Después conectamos la tarjeta o lápiz en nuestro lector. Si tenemos en marcha un sistema gráfico lo normal es que automáticamente lo monte y nos ofrezca ver/importar fotos o algo así.
Averiguamos el dispositivo asignado a la tarjeta:
$ mount

[...]
/dev/sdg1 on /media/SAMSUNG type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=1000)

Otra opción es:
$ dmesg | tail

Instalamos testdisk, una magnífica herramienta de recuperación de datos:
# aptitude install testdisk
Lo más cómodo es ir al directorio en el que queremos que se recuperen las fotos (en un dispositivo diferente a aquel del que queremos recuperar fotos. Por ejemplo vamos al directorio $HOME de un usuario, como /home/guimi. Con el dispositivo montado lanzamos ‘photorec’ como superusuario:
# photorec

Este programa nos lleva paso a paso a recuperar fotos, vídeos y demás.
– primero pregunta por el dispositivo desde el que recuperar fotos, en el ejemplo /dev/sdg.

– después pregunta el tipo de tabla de particiones: para las tarjetas de memoria o lápices USB normales “Intel”

– después elegimos la partición (generalmente solo hay una) en el ejemplo “1”

– Opcionalmente en esta misma pantalla podemos elegir los tipos de archivo a recuperar, por ejemplo solo jpg.

– después pregunta por el tipo de partición que había cuando borramos: generalmente “Other”

– después pregunta si deseamos buscar por toda la partición o solo por el espacio libre: yo recomiendo “Whole”

– por último pregunta en qué directorio queremos recuperar las fotos (NO debe estar en el mismo dispositivo del que estamos recuperando archivos)

con eso photorec empieza a recuperar archivos.

Dependiendo de la capacidad de la tarjeta y de los archivos a recuperar puede invertir más o menos tiempo, pero lo bueno es que va indicando el progreso de trabajo para poder ir viendo cómo va y cuánto le queda.

Aviso: Si recuperas de un disco externo muy grande, se puede llenar fácilmente el disco dónde estás guardando los archivos recuperados.

undelete, recuperar archivos borrados, photorec, testdisk, FAT, FAT32

Tarjeta CardOS M4 en GNU/Linux

Las tarjetas CardOS M4 son tarjetas criptográficas fabricadas por Siemens y emitidas, entre otros, por la Comunidad Valenciana (a través de la ACCV) y la Junta de Andalucía.

Para utilizarlas hace falta tener un lector de tarjetas instalado, por ejemplo el lector del DNI-e.

Además hace falta tener instalado el controlador de la tarjeta para que el lector sepa trabajar con ella. Y aquí viene el problema, porque el driver que hay tiene restricciones de distribución, además de ser viejo y estar desactualizado.
Al final se puede hacer funcionar con unos pocos pasos… el problema es averiguarlos. Tras mucho buscar, un post de Andalinux me dió las pistas correctas. Este post se debe a aquel (y copia descaradamente algunas partes).

¿Dónde obtener los drivers (sólo binarios) para la tarjeta?
Pues aunque cuesta encontrarlos en Internet (por las restricciones de distribución impuestas por Siemens) hay varias formas de conseguirlos:

  1. En el cdrom de los lectores Omnikey 3121 y 3021.
  2. En la web de la Autoritat de Certificatió de la Comunitat Valenciana.
  3. En el paquete HiPath SIcurity CardOS smart cards API que aparece en los repositorios de Guadalinex.

¿Cómo instalar los drivers?
Yo he utilizado el paquete de Guadalinex, por lo que basta un:

sudo dpkg -i guadalinex-hipath-sicurity-card-api_3.1-2_i386.deb

En teoría ahora bastaría con cargar el módulo en Firefox, pero no os molestéis, no va a funcionar.

¿Y qué tripa se le ha roto al módulo? Preguntemos:

ldd /usr/local/lib/libsiecap11.so
	linux-gate.so.1 =>  (0xb7794000)
	libz.so.1 => /lib/libz.so.1 (0xb76f1000)
	libsiecap15.so => /usr/local/lib/libsiecap15.so (0xb76c8000)
	[...]
	libpcsclite.so.0 => not found
	[...]

¡Ahí está!

Sin embargo tampoco nos basta con instalar esa librería (igual incluso ya está instalada):

sudo aptitude install libpcsclite1

Porque el problema es que el paquete no instala la librería dónde la busca el módulo.
¡Marchando un enlace simbólico!

sudo ln -s /lib/libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so.0

Y ahora sí podemos cargar en Firefox el módulo “/usr/local/lib/libsiecap11.so” que nos leerá la tarjeta.

Para más detalles sobre cómo instalar el módulo en Firefox se puede consultar la instalación del DNI-e.

CardOS M4, Siemens, DNIe

tsclient y rdesktop “recv:Connection Reset by Peer”

El cliente de Terminal Services más utilizado en GNU/Linux es tsclient.
Este programa es solo un “front-end” o interfaz gráfica de otros programas.

Para conectar con un servidor Windows de Terminal Services utiliza rdesktop.

Puede ocurrir que tras llevar un tiempo funcionando un día deje de funcionar y arroje el siguiente error:
recv:Connection Reset by Peer

Hay que tener en cuenta que generalmente antes del error indica:
Autoselected keyboard map xx
Esto es solo una indicación de que se ha seleccionado el teclado, pero no tiene nada que ver con el error.

El error que nos ocupa puede deberse a varias cosas, pero básicamente indica que el servidor ha rechazado la conexión.
Para conocer la causa de este rechazo hay que acudir al visualizador de eventos del servidor, ya que no es el cliente el que no ha podido conectar.

En todo caso la causa más habitual es que la licencia otorgada al cliente ha caducado (en principio dura 90 días).
Desinstalar tsclient (y rdesktop) no sirve de mucho, ni siquiera purgando y borrando los directorios de configuración (.tsclient y .rdesktop).

La solución pasa por decirle al servidor que somos otro cliente diferente y que nos otorgue una nueva licencia.
Con rdesktop se puede hacer con el parámetro -n . Con tsclient se puede indicar en una casilla al efecto que aparece en la pestaña principal (“General”) y se llama “Nombre del ordenador Cliente” (o similar según la traducción).

Otro error común, pero totalmente diferente del que nos ocupa en este artículo, tiene que ver con el sonido (basta ir a “Recursos locales” y marcar “No reproducir” en “Sonido del ordenador remoto”).

terminal server, tsclient, rdesktop

Ordenar archivos en sistemas de ficheros FAT

El sistema de ficheros FAT es uno de lo más antiguos todavía en uso. Su actual popularidad se debe a que la mayoría de teléfonos móviles, lectores de MP3, cámaras de fotos, radios, etc. solo reconocen este sistema, por lo que las memorias USB, las tarjetas SD, MMC, etc. vienen formateadas con FAT.

El problema es que estos dispositivos no suelen ordenar los ficheros y directorios que encuentran, sino que muesrtan los archivos tal y como están grabados. Esto hace que muchas veces, tras pasar varias horas ordenando tu colección de música, molestándote en ponerles nombres tipo “01-titulo-artista.mp3” y demás, te encuentras con que el reproductor lista las canciones aleatoriamente.

Para evitar esto basta con “ordenar” los ficheros en el sistema FAT. En GNU/Linux, como es habitual, es muy sencillo hacerlo (el dispositivo debe estar desmontado):
sudo fatsort (dispositivo)

Para que esto funcione bien, primero hay que instalar fatsort, lo que a su vez tambien es muy sencillo:
sudo aptitude install fatsort
Se puede obtener información sobre la patición con:
sudo fatsort -i (dispositivo)

FAT, sort, fatsort, ordenar ficheros, sort files

PDF Editor

Recientemente he descubierto “PDF Editor”, un programa GPL para GNU/Linux que permite editar PDFs.
Hasta ahora me limitaba a trabajar con pdfs desde el prompt o incluso con GIMP.
PDF Editor no es que funcione maravillosamente, aún está un poco verde, da algunos errores de funcionamiento… pero al final sirve para lo que promete: editar ficheros PDFs.
Funciona en modo gráfico y comando y además está en los repositorios de Debian, Ubuntu…
$ sudo aptitude install pdfedit

PDF Editor, PDF, pdfedit
 

Postinstalación de Ubuntu 9.04 Jaunty Jackalope

Hay múltiples recetas de qué hacer tras instalar Ubuntu 9.04 Jaunty Jackalope (por ejemplo esta receta de “Cosas a hacer despues de instalar Ubuntu 9.04 Jaunty Jackalope“).
Hay que decir que ha día de hoy ya ha salido la nueva versión (Karmic Koala).

Tras consultar varias de esas guías para instalar Ubuntu a un amigo, me he quedado con esto:

sudo wget http://www.medibuntu.org/sources.list.d/jaunty.list --output-document=/etc/apt/sources.list.d/medibuntu.list
sudo aptitude update && sudo aptitude install medibuntu-keyring && sudo aptitude update && sudo aptitude upgrade
sudo aptitude install build-essential linux-headers-`uname -r`
sudo aptitude install gparted scribus blender inkscape gthumb
sudo aptitude install k3b kde-i18n-es k3b-i18n
sudo aptitude install dia gftp
sudo aptitude install gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-ffmpeg
sudo aptitude install virtualbox-ose wine
sudo aptitude install ubuntu-restricted-extras
sudo aptitude install unrar rar p7zip-full unace unzip msttcorefonts
sudo aptitude install libdvdcss2 libdvdread4
sudo aptitude install w32codecs non-free-codecs flashplugin-nonfree-extrasound

Después configuré Firefox y el explorador de archivos (Nautilus) para que se comportase más a mi gusto y en las propiedades de las imágenes indiqué “Abrir con” gthumb.

Postinstalación, instalación, Ubuntu, Jaunty Jackalope

Firmar imágenes

Para firmar imágenes automáticamente podemos usar ImageMagick. Llamo firmar una imagen a incorporarle un marco con el autor y la licencia de la misma. Ejemplo de imagen firmada:
delfines

Primero generamos una imagen de firma, por ejemplo:
firma

Después utilizamos el siguiente comando (el tamaño de bordes que muestro es el que utilizo para imágenes de 2448×3264):
$ convert imagen.jpg firma.png -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0x10 imagen_firmada.jpg.

Si además queremos conservar la información de la cabecera exif podemos utilizar el comando jhead:
$ jhead -te imagen.jpg imagen_firmada.jpg.
Otro uso muy práctico de jhead lo vimos en el post “Renombrar fotos en base a la fecha de la cabecera Exif“.

Para agilizar la firma podemos hacer dos cosas básicas, una es crear un script como este (que nos firma todas las imágenes del directorio en que nos encontramos):

#!/bin/bash
#
# firma_imagenes.sh
# Por Guimi 2009/08 - http://www.guimi.net
#

##########################
# ERRORES
E_NOPARAM=64        # Numero de parametros incorrecto

##########################
# PARAMETROS
FIRMA="../cc-by-sa-guimi-70.png"
DIR="./firmadas"
TMP="tmp.$$"

if [ $# -gt 1 ]; 
then
	echo "Use firma_imagenes [imagen_firma]"
	exit $E_NOPARAM
else
	if [ $# -eq 1 ]; 
	then
		FIRMA="$1"
	fi
fi

mkdir $DIR

echo -n "Firmando fotos..."
for x in `ls *.jpg`
do
	echo -n "."
	convert $x $FIRMA -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0x10 $TMP
	jhead -te $x $TMP > /dev/null
	mv $TMP $DIR/$x
done
echo ""

 
Otra opción muy comoda es configurar gThumb (el visor que recomiendo para gnome) para que permita firmar imágenes.
Para ello nos vamos a “Editar->Preferencias->Teclas rápidas” y en una de las casillas libres (la primera suele ser el 6) escribimos:
convert %f ~/firma.png -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0x10 %n-firmada%e; jhead -te %f %n-cc-by-sa%e

A partir de ese momento mientras estamos viendo una imagen si pulsamos el 6 del teclado numérico nos generará una copia firmada.

Podemos ver otros usos de ImageMagick en un post llamado trabajar con imágenes desde el prompt.

Si tienes curiosidad por ver algunas de mis fotos puedes ver mi perfil en flickr o en mi perfil en picasa (me gusta más el servicio de flickr pero da más espacio picasa).

ImageMagick, Marco, firmar imagen, crear marco, gthumb

Pasar de Access a MySQL

Tengo unos compañeros que se empeñan en utilizar Ms-Access, que es de los pocos programas que no funcionan de manera alguna en GNU/Linux (solo queda el recurso de usar una máquina virtual, como VirtualBox).
Por ello cuando necesito trabajar con ella (o ellos necesitan hacer consultas rápidas y como no saben me lo piden a mi) utilizo un pequeño script para pasar las tablas de Ms-Access a MySQL.
Y dice así:

#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#

# DATOS DEL FICHERO MDB
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

# DATOS DE MYSQL
bbdd=xxx
usuario=xxx
clave=xxx

# FICHERO TEMPORAL
tmp="tmp.$$"

echo "Exportando desde mdb..."
mdb-schema $mdb -S > sql-creacion_mdb$$.sql
mdb-export $mdb $TABLA1 -S -I > sql-datos_mdb$$.sql
mdb-export $mdb $TABLA2 -S -I >> sql-datos_mdb$$.sql

echo "Modificando ficheros exportados..."
# Hay que añadir "IF EXISTS" al "DROP TABLE"
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
# Hay que cambiar "Long Integer" por "Integer"
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

# Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-
sed -e s/.$/\)\;/g sql-datos_mdb$$.sql > $tmp
mv $tmp sql-datos_mdb$$.sql

echo "Cargando datos en MySQL..."
mysql -D $bbdd -u $usuario --password=$clave < sql-creacion_mdb$$.sql
mysql -D $bbdd -u $usuario --password=$clave < sql-datos_mdb$$.sql

echo "Borrando ficheros temporales..."
rm sql-creacion_mdb$$.sql
rm sql-datos_mdb$$.sql


A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).

Mostrar la versión del fichero mdb:
$ mdb-ver xxx.mdb

Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):
$ mdb-tables -1 xxx.mdb

Generar un fichero C con un Array con los datos de una tabla:
$ mdb-array xxx.mdb TABLA

Access, mdb, mysql, script, prompt, Ms-Access, mdbtools

Instalar un SAI (UPS) en GNU/Linux

Instalaremos como ejemplo un SAI Yukai PowerMust 600 con conexión al puerto serie y conexión USB.
 

Instalamos el sistema nut (Network UPS Tools):
# aptitude install nut

 
Si instalamos el SAI en un puerto USB, además:
# aptitude install nut-usb

Si instalamos el SAI en un puerto serie autorizamos al usuario nut el acceso al mismo:
# adduser nut dialout

 
Configuramos el demonio nut:
# vi /etc/default/nut

# start upsd
START_UPSD=yes

# set upsd specific options. use "man upsd" for more info
UPSD_OPTIONS=""

# start upsmon
START_UPSMON=yes

# set upsmon specific options. use "man upsmon" for more info
UPSMON_OPTIONS=""

Consultamos el controlador que necesitamos para nuestro SAI en la web de Network UPS Tools. Para el SAI del ejemplo necesitamos el controlador “megatec”.
 
Indicamos al sistema la existencia de nuestro SAI:
# vi /etc/nut/ups.conf

[yukai]
	driver = megatec
	# si usamos puerto serie
	# port = /dev/ttyS0
	# si usamos puerto USB
	# port = auto
	port = xxxxxx
	desc = "Yukai PowerMust 600"

Indicamos al demonio los permisos sobre el SAI (permiso local):
# vi /etc/nut/upsd.conf

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32

ACCEPT localhost
REJECT all

Creamos un usuario para gestionar el SAI:
# vi /etc/nut/upsd.users

[yukai_admin]
password = mi_clave
allowfrom = localhost
actions = SET
instcmds = ALL

Y por último configuramos el monitor:
# vi /etc/nut/upsmon.conf

MONITOR yukai@localhost 1 yukai_admin mi_clave master
RUN_AS_USER nut
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE "UPS: Normal state"
NOTIFYMSG ONBATT "UPS: On battery"
NOTIFYMSG LOWBATT "UPS: Battery low"
NOTIFYMSG FSD "UPS: Starting shutdown"
NOTIFYMSG COMMOK "UPS: Communication restored"
NOTIFYMSG COMMBAD "UPS: Communication lose"
NOTIFYMSG SHUTDOWN "UPS: Shutting down"
NOTIFYMSG REPLBATT "UPS: Replace battery"

NOTIFYFLAG ONLINE SYSLOG
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL
NOTIFYFLAG COMMOK SYSLOG
NOTIFYFLAG COMMBAD SYSLOG
NOTIFYFLAG SHUTDOWN SYSLOG
NOTIFYFLAG REPLBATT SYSLOG

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 0

Modificamos los permisos de los ficheros:

  • # chown root:nut /etc/nut/*
  • # chmod o-r /etc/nut/*

Reiniciamos el servicio:
# /etc/init.d/nut restart

Y verificamos que todo funciona correctamente:
# upsmon status

Network UPS Tools upsmon 2.2.2
UPS: yukai@localhost (master) (power value 1)
Using power down flag file /etc/killpower

 
Verificamos los procesos en marcha:
# ps aux | grep ups

nut       8513  0.0  0.0   2012   512 ?        Ss   12:01   0:00 /sbin/upsd
root      8515  0.0  0.0   2020   652 ?        Ss   12:01   0:00 /sbin/upsmon
nut       8516  0.0  0.0   2020   688 ?        S    12:01   0:00 /sbin/upsmon

# ps aux | grep nut

nut       8511  0.0  0.0   2012   576 ?        Ss   12:01   0:00 /lib/nut/megatec -a yukai
nut       8513  0.0  0.0   2012   512 ?        Ss   12:01   0:00 /sbin/upsd
nut       8516  0.0  0.0   2020   688 ?        S    12:01   0:00 /sbin/upsmon

Y verificamos que todo funciona correctamente:
$ upsc yukai@localhost

battery.charge: 97.5
battery.voltage: 13.60
battery.voltage.nominal: 12.0
driver.name: megatec
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS0
driver.version: 2.2.2
driver.version.internal: 1.5.14
input.frequency: 49.9
input.frequency.nominal: 50.0
input.voltage: 209.5
input.voltage.fault: 209.5
input.voltage.maximum: 215.2
input.voltage.minimum: 208.6
input.voltage.nominal: 220.0
output.voltage: 209.5
ups.beeper.status: enabled
ups.delay.shutdown: 0
ups.delay.start: 2
ups.load: 27.0
ups.mfr: unknown
ups.model: unknown
ups.serial: unknown
ups.status: OL
ups.temperature: 25.0
ups.type: standby

Podemos mostrar solo parte de la información:
$ upsc yukai@localhost ups.status

OL

OL indica “On Line power”. Podría indicar por ejemplo OB (“On Battery”) o LB (“Low Battery”).

$ upsc yukai@localhost battery.charge

97.5

 
En escritorios gráficos es útil -y muy sencilla- la herramienta “knutclient” que permite monitorizar el SAI:
knutclient
knutclient
 

Referencia

instalar un sai (ups) en Linux, configurar sai en Linux, instalar UPS en GNU/Linux

Cómo virtualizar una partición Windows ya existente

Este es un artículo escrito por el administrador de kriptopolis con licecia CC.

Al final del artículo incluyo como solucionar algunos problemas a los que me he enfrentado siguiendo este tutorial.

Artículo original en Kriptopolis del 21. Junio 2007 – 14:08.
Actualización a Junio de 2009: Llevo un tiempo probando VirtualBox, y lo recomiendo, ya que es software libre y funciona igual de bien que VMWare (más rápido en algunas cosas, más lento en otras).

La situación de partida más común es la siguiente: dispones de un sistema con arranque dual (Windows, Linux) y aunque utilizas habitualmente Linux, de vez en cuando aún necesitas ejecutar algo en Windows. En un tutorial anterior ya explicamos cómo utilizar para ello una copia virtualizada, pero ahora vamos un paso más lejos: lo que utilizaremos virtualizado será nuestra propia partición windows real, de forma que las modificaciones que realicemos quedarán guardadas en él, y no en una simple copia. Además, si VMware algún día nos fallara, siempre seguiríamos disponiendo de la posibilidad de arrancar nuestro Windows nativo tal y como veníamos haciendo.

Para este tutorial he utilizado VMware Workstation 6 para Linux, un programa comercial con 30 días de prueba.También es posible virtualizar la partición Windows con VMware Player, pero éste carece -si no me equivoco- de la posibilidad de instalar posteriormente las VM Tools, lo que obliga a realizar unas cuantas maniobras más para lograr nuestro objetivo, y a ello quizás dediquemos otro tutorial. Es posible que este tutorial pueda seguirse también con VMware Server, que sí es gratuito; espero que algún lector que lo utilice pueda confirmar o desmentir este extremo…

PRECAUCIONES PREVIAS

Es muy probable que al arrancar Linux vengas montando automáticamente tu partición Windows para disponer de acceso a ella. Lo primero es desmontarla y desactivar ese montaje automático comentando la línea correspondiente en tu fichero /etc/fstab. De lo contrario podría ocurrir que intentaras acceder desde dos sistemas diferentes a la misma partición, con resultados imprevisibles, pero probablemente desastrosos. Por tanto, comienza con un umount /mnt/windows (o lo que corresponda en tu caso) y escribe el carácter almohadilla en la línea de fstab que hace referencia a tu partición windows.

Otra posibilidad que podría llevarnos a un desastre aún peor (porque podría destruir tu sistema Linux) sería elegir Linux por error desde el menú de arranque de la máquina virtualizada, lo que equivaldría a intentar arrancar Linux desde dentro de Linux. Para prevenir este otro posible desastre lo mejor es comentar de momento el timeout del fichero menu.lst de grub y seleccionar Windows como el sistema de arranque por defecto.

PREPARAR WINDOWS

La idea aquí es crear un nuevo perfil de hardware (que puedes denominar “virtual” o “vmware”) con un Windows tan “limpio” como sea posible, eliminando dispositivos o controladores que puedan resultar conflictivos. No puedo darte normas generales, excepto que crees un nuevo perfil virtual y le des un nombre, aunque sólo sea una copia exacta del actual. En cualquier caso también es buena idea establecer la opción que permite esperar hasta que se seleccione un perfil de hardware y colocar el perfil virtual como opción por defecto.

En mi caso (insisto, disco Serial ATA) fue imprescindible desinstalar los controladores IDE y sustituirlos por controladores estándar. En este caso -y otros similares- existen diferencias entre el controlador IDE que utiliza Windows y el de la máquina virtual. El diagnóstico es fácil: al tratar de arrancar la máquina virtual, nos da un error de BOOT.INI y el intento de arranque entra en un ciclo sin fin. Si estás en un caso similar, aquí tienes instrucciones más detalladas:

Arrancamos Windows XP nativo.

Panel de Control -> Sistema -> Hardware -> Perfiles de Hardware

Copiar el perfil actual como vmware.

Arrancar de nuevo seleccionando el perfil vmware

Panel de Control -> Sistema -> Hardware -> Gestor de dispositivos -> Controladores IDE ATA/ATAPI

Haz clic derecho en uno de ellos y elige Actualizar controlador. Arranca el Asistente para actualizar el hardware. Elige “No, no esta vez” y Siguiente. Elige la opción avanzada y siguiente. Elige “No buscar.Elegiré el controlador a instalar” y siguiente. Selecciona el driver IDE estándar y Finalizar. No reinicies.

Ahora has de repetir el proceso con el Canal IDE Primario y el Secundario, eligiendo siempre el controlador estándar.

CREAR NUEVA MÁQUINA VIRTUAL

A continuación te muestro el proceso en imágenes:

Este paso es muy importante. No olvides elegir la partición donde tienes tu Windows (por supuesto) y también aquella desde la que arrancas (donde has instalado el grub):

Continuamos.

Y así queda nuestra máquina (de momento):

Al arrancar Windows así en mi caso (disco Serial ATA) acabo en una pantalla azul de la muerte. Si cambio “buslogic” por “ide” en Windows XP.vmdk, vmware me avisa y si acepto acabo también igual, con otro BSOD:

Lo que hago es editar Windows XP.vmx y la línea scsi0.present = “TRUE” la cambio a “FALSE”. También cambio las tres líneas que comienzan por scsi0:0 a ide0:0. A partir de ese momento ya no tuve problemas.

Tras arrancar aparece el menú de grub:

Elegimos Windows y nuestro nuevo perfil virtual:

Vamos por buen camino:

Cuando arranques por primera vez tu Windows dentro de VMware es posible que te comience a detectar nuevo hardware y te pida instalarlo. Contesta a todo que no. Otro posible problema es que tu copia de Windows pida ser reactivada; por lo que se dice en Internet eso no parece ocurrir, pero nunca se sabe y desde luego no me atrevo a poner la mano en el fuego en ese tipo de asuntos.

REMATES FINALES

Ahora que todo funciona (o debería) coincidiréis conmigo en que sería muy bueno que no volviera a presentarse el menú de arranque de Grub, para prevenir definitivamente el posible error fatal de tratar de arrancar el sistema equivocado. Disponer de este lujo nos supondrá un pequeño esfuerzo adicional, pero creo que merece la pena, porque después de eso siempre arrancará Windows sin más riesgos ni complicaciones.

Arrancamos VMware y nos vamos a “Edit virtual machine settings” -> Hardware -> Floppy

Seleccionamos “Use a floppy image” y “Connect at power on”. Le damos el nombre “bootdisk.img” y pulsamos “Create”. Lo guardamos en el directorio de vmware para nuestra nueva máquina Windows.

Ahora añadiremos grub al fichero de imagen de disco:

# cd /home/xxxx/vmware/Windows\ XP/

En Arch Linux*:

# dd if=/usr/lib/grub/i386-pc/stage1 of=bootdisk.img count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 5,3224e-05 s, 9,6 MB/s

# dd if=/usr/lib/grub/i386-pc/stage2 of=bootdisk.img seek=1
196+1 records in
196+1 records out
100586 bytes (101 kB) copied, 0,0023119 s, 43,5 MB/s

NOTA*: La localización de los ficheros stage varía en cada distribución. En Ubuntu están en /lib/grub/i386-pc. En Gentoo, en /usr/lib/, etc.

Haremos también una copia de seguridad así:

# cp bootdisk.img grubdisk.img

Echa un vistazo al fichero menu.lst de tu grub para ver con qué opciones arrancas tu Windows real. En mi caso:

# cat /boot/grub/menu.lst

Y la parte que necesito es ésta:

title Windows XP
rootnoverify (hd0,3)
makeactive
chainloader +1

Ahora arrancaré mi máquina virtual y al llegar al menú de Grub teclearé lo siguiente:

grub> root (hd0,3)
grub> chainloader +1
grub> boot

Lo que debe hacer que arranque Windows. Ten cuidado al teclear porque es posible que las teclas no respondan exactamente a lo esperado (en mi caso los paréntesis había que teclearlos con la tecla que ocupa una posición a la derecha de los originales y el signo + con el teclado numérico):

Windows arrancó correctamente, así que ahora configuraremos nuestra imagen de disco para que no haga falta volver a teclear esos comandos, sino que arranque Windows automáticamente. No apagues la máquina virtual; desde dentro de tu Windows virtualizado vas a formatear el disquete virtual con las opciones por defecto. Desde Mi PC : Unidad A: -> Formatear. Cierra la máquina virtual.

Teclearemos ahora unos cuantos comandos más desde Linux:

# mount bootdisk.img /mnt -o loop
# mkdir -p /mnt/boot/grub
# cp /boot/grub/stage[12] /boot/grub/fat_stage1_5 /boot/grub/menu.lst /mnt/boot/grub
# vi /mnt/boot/grub/menu.lst

Aquí comentaremos (o borraremos) todo lo que queramos, hasta dejar sólo lo imprescindible. En mi caso:

timeout  0
default  0
color light-blue/black light-cyan/blue
title Windows XP
rootnoverify (hd0,3)
makeactive
chainloader +1

Seguimos tecleando comandos:

# chmod -R a-w /mnt/boot
# umount /mnt

Arrancamos VMware y vamos de nuevo a Edit virtual machine settings. En la opción floppy seleccionamos la copia de seguridad grubdisk.img que creamos en un paso anterior. Haz un ls -l sobre el directorio de tu máquina Windows en vmware para asegurarte de que grubdisk.img pertenece a tu usuario y no a root. Si no es así, utiliza chown para cambiarlo.

Al arrancar de nuevo tu máquina debes llegar al prompt de grub, pero esta vez no teclees nada. Selecciona VM en el menú de VMware Workstation y cambia el floppy a bootdisk.img de nuevo.

Resetea después la máquina virtual pulsando “Reset”. Si todo fue bien, ya no trata de arrancar desde el disco duro, sino desde la imagen de disquete. En cuanto tengas tu windows virtualizado y en marcha no olvides instalar las VM Tools desde el correspondiente menú de VMware. Eso te permitirá aumentar la resolución de pantalla y algunos “lujos” más.

Como ya ha desaparecido el riesgo de arrancar con grub el sistema equivocado podemos volver a editar nuestro menú de arranque original del disco duro para restaurar el timeout que quitamos al inicio del tutorial.

Con esto hemos acabado y espero que con éxito. Como siempre (y esta vez quizás más) surgirán montones de dudas. Por mi parte baste decir que este tutorial, aunque tal vez no lo parezca, es el que más horas me ha llevado. De hecho, tras haber bebido en múltiples fuentes (que me hicieron perder mucho tiempo, sólo para llegar a soluciones insatisfactorias) acabé por ver la luz en este sitio, que ha sido finalmente mi guía para sistematizar un poco todo el proceso.

Como siempre vuestros comentarios acabarán de despejar las dudas y elevarán -espero- este tutorial a la categoría de algo verdaderamente útil. Gracias anticipadas a todos por vuestras aportaciones.



Algunos problemas habituales y sus soluciones

  • INSTALACION VMWARE
  • USO VMWARE
    • Problemas de acceso al disco
      • Incluir el usuario en el grupo que tenga acceso a los discos (ls -ld /dev/xxx) generalmente disk
    • El disco se creo como SCSI y lo intentas usar como IDE
      • Además de modificar el vmx como indica el tutorial, modificar el vmdk quitando las lineas ddb.geometry.biosxxxx y poniendo ddb.adapterType = “ide”
    • Error, tabla de particiones invalida
      • Debe ser windows el ultimo que escriba en la tabla de particiones, un modo de conseguirlo es eliminar desde windows la particion swap y volver a crear la particion. Despues desde linux se modifica -sin eliminar y volver a crear- la ‘nueva’ particion para volver a tener swap
    • Windows XP pide activacion
      • O bien arrancar nativamente windows y volver a activar
      • O bien seguir el ayudante de activacion que aparece

Cómo virtualizar una partición Windows ya existente, virtualiza windows, vmware