Archive

Archive for the ‘Uncategorized’ Category

Test

June 30th, 2010 admin No comments

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a nisl augue. Etiam et auctor eros. Curabitur vehicula blandit imperdiet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget orci vel massa adipiscing accumsan a quis turpis. Aliquam ac massa a nibh vehicula condimentum. Cras ac justo ac mauris pellentesque accumsan eu nec purus. Praesent varius, ante et porta dignissim, dui purus egestas elit, a malesuada urna leo nec orci. Phasellus volutpat imperdiet pretium. Curabitur a diam eu nisi aliquet tempus.

Donec vitae velit id est dignissim lobortis sit amet sodales felis. Aliquam tristique ultrices dui a sagittis. Etiam vehicula nibh ut elit ultrices sed dapibus ipsum sagittis. Integer volutpat metus sed elit fermentum quis faucibus dui tincidunt. Proin pharetra pulvinar ultricies. Ut rhoncus massa id risus ornare eu porttitor velit lacinia. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed scelerisque nunc id sem interdum convallis. Vestibulum sollicitudin feugiat luctus. Mauris tristique nisl sit amet enim aliquam suscipit. Duis tortor tellus, elementum in placerat id, rutrum sed est. Sed non metus a sem convallis sodales. Nunc interdum, nibh vel lobortis ultrices, nisl augue aliquet massa, eu rutrum justo metus vel erat.

Categories: Uncategorized Tags:

MySQL: Increment an exisitng value

January 31st, 2010 admin No comments

This slick MySQL syntax allows you to increment or decrement an existing number in a table without first having to read the value. This is a nice way to increment an access counter.


To increment the value ‘counter’ by one for the row in table ‘images’ where ‘image_id’ is ‘15′, use:

UPDATE images SET counter=counter+1 WHERE image_id=15

To decrement the value, use ‘counter=counter-1′ instead. Incrementing or decrementing by other values (or using whatever valid arithmetic arm flexing you need) will work, too.

Categories: Uncategorized Tags:

Recuperar datos de un disco con I/O errors con dd

January 31st, 2010 admin No comments

Recuperar datos de un disco con I/O errors con dd

Recientemente un amigo se encontró con un disco en fallo en un servidor sin RAID. Vamos a ver como realizar una copia de los datos que se puedan aún leer llenando de ceros los bloques con I/O errors.

Los errores que veríamos serian similares a estos:

end_request: I/O error, dev sda, sector 9672
Buffer I/O error on device sda, logical block 959
end_request: I/O error, dev sda, sector 9672
Buffer I/O error on device sda, logical block 959
end_request: I/O error, dev sda, sector 9672
Buffer I/O error on device sda, logical block 959

Primero de todo deberemos apagar el sistema y probar sacando y volviendo a meter el disco, a veces es tan simple como esto. Si no da resultado deberemos proceder a recuperar el sistema usando un LiveCD.

Cuando lo tengamos arrancado y con un disco destino preparado podremos empezar a copiar los datos con dd. Mediante if indicamos el dispositivo origen (en este caso, sda) y con of el dispositivo destino (sdb).

Por otro lado, para evitar que se pare al encontrar un error de lectura deberemos añadir las siguientes opciones al parámetro conv (indicamos opciones de como se realiza la copia de datos):

  • noerror: Continuar en caso de error
  • sync: Llenar con ceros el bloque leído hasta el tamaño de bloque destino

Finalmente deberemos escoger un tamaño de bloque adecuado. Aquí es donde debemos ajustar según interese. Los bloques corruptos de disco como mínimo serán de 512 bytes, pero de 512 en 512 vamos a tardar mucho. Por el contrario, si usamos un tamaño grande y nos encontramos un error de lectura al principio, llenaremos de ceros todos los demás hasta llegar al tamaño del bloque (bs). Es un compromiso entre velocidad y datos a recuperar. Podemos usar por ejemplo el 512k:

dd if=/dev/sda of=/dev/sdb conv=sync,noerror bs=512k

Por ejemplo, usando un HP proLiant DL360 con un solo disco, conectando otro a la controladora tardó 8 horas para 250G con bloques de 512 bytes (tamaño físico de los bloques de disco). Con un bloque (bs) más grande (512k por decir algo) hubiera ido más rápido pero se hubiera perdido más información.

Para no desesperar en el tiempo que tarda a copiar los datos, mediante SIGUSR1 podremos ir viendo el progreso del dd.

Categories: Uncategorized Tags:

Hello world!

January 28th, 2010 admin 1 comment

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

Categories: Uncategorized Tags: