Monthly Archive:: julio 2008

Script para recuperar archivos que se han perdido

Si tratas de entrar a un archivo y no se abre porque se ha estropeado existe una forma de poder recuperarlo.

Si el archivo era realmente importante lo que se puede hacer es escanear el disco duro por bloques buscando la informacion que contiene, alguna palabra que sea lo suficientemente especifica como para estar solo en el archivo que acabas de perder.

El script es el siguiente:

#!/usr/bin/python
 
import os
for i in range(0,1000):
print "Pasada por el bucle:"
print i
print "=========================="
seek = i * 100000
os.system('rm /fich%s' % str(i-1))
os.system('dd if=/dev/sda3 of=/fich%s bs=512 count=100000 skip=%i' % (str(i), seek,) )
os.system("grep --binary-files=text -A 200 -B 200 -b '<span style="font-weight: bold;">palabra que sabes que esta en el fichero y que no crees que vaya a estar en otro</span>' /fich%s &gt;&gt; <span style="font-weight: bold;">results.txt</span>" % str(i))
os.system('rm /fich%s' % str(i))
os.system('sync')

Programita para dar formato (identacion…) a archivo xml

Con este programa podemos conseguir dar un formato legible a un archivo xml que esté sin identaciones, todo el código seguido.

#!/usr/bin/python
from xml.dom.ext import PrettyPrint
from xml.dom.ext.reader.Sax import FromXmlFile
import sys
doc = FromXmlFile(sys.argv[1])
PrettyPrint(doc, sys.stdout)

Hay que indicarle el archivo de entrada y redirigirlo a otro de salida.

Error de loop añadiendo un dispositivo a maquina virtual

Al tratar de añadir una dispositivo a una máquina virtual xen, con CenOS, concretamente un disco duro de 20GB, da un error

Error starting domain: virDomainCreate() failed La operación POST falló: xend_post: error from xen daemon: (xend.err ‘Device 768 (vbd) could not be connected. Failed to find an unused loop device’)

Traceback (most recent call last):
File “/usr/share/virt-manager/virtManager/engine.py”, line 481, in run_domain
vm.startup()
File “/usr/share/virt-manager/virtManager/domain.py”, line 379, in startup
self.vm.create()
File “/usr/lib64/python2.5/site-packages/libvirt.py”, line 237, in create
if ret == -1: raise libvirtError (‘virDomainCreate() failed’, dom=self)
libvirtError: virDomainCreate() failed La operación POST falló: xend_post: error from xen daemon: (xend.err ‘Device 768 (vbd) could not be connected. Failed to find an unused loop device’)

El problema era que estaban limitados el número de loops del sistema operativo en 8, y necesitaba más (2 por cada máquina virtual).

Solución: Crear más loops a mano con:

# mknod -m660 /dev/loopXX b 7 8

Para la próxima vez que se inicie el servidor se crearan 64loops en total porque he modificado el archivo /boot/grub/menu.lst añadiendo en el arranque de XEN la siguiente linea:

# module /boot/vmlinuz-2.6.20.18-0.2-xen root=/dev/hda1 ro console=tty0 max_loop=64