viernes, 26 de agosto de 2011

Breve historia de Steve Jobs

Pese a que no soy un fan de Apple, o de Steve Jobs, hay que reconocer que fue emprendedor con temple y un gran visionario de negocios. Y aparte de su monopolio, y la dudosa privacidad del usuario en sus sistemas, hay que darle mención especial por su mejor invento :

Yeahhh, el ipod cigarrera


Aquí coloco un video chino muy raro que trata, de una manera no muy biográficamente correcta, de contar la historia de Jobs :


lunes, 8 de agosto de 2011

Respaldo de equipos Cisco usando Perl (Por Telnet)

Saludos Sres,

En este breve blog, les ensare como usar Perl para acceder a los routers Cisco, y guardar la configuracion en un archivo de texto.

Antes que todo, para poder hacer esta tarea desde Perl, es necesario instalar el modulo de perl Net::Telnet::Cisco. Para instalarlo, ejecutamos la siguiente linea:

perl -MCPAN -e 'install Net::Telnet::Cisco'.

Una vez hecho esto, estamos listos para poder hacer respaldos de nuestros dispositivos haciendo uso de nuestro programa en Perl.


####SCRIPT####


#!/usr/local/bin/perl -w
use Net::Telnet::Cisco;

########
# Main #
########

#Nombre del archivo donde se va a guardar la configuracion del router
my $file_name= "192.168.58.51";

#Creamos nuestro objeto!, '192.168.58.51' es la direccion del router a donde vamos a acceder
my $session = Net::Telnet::Cisco->new(Host => '192.168.58.51');

#Nos conectamos a neustro router, "themadfaceblog" es el nombre de usuario del router, "blogspot" es la clave de ese usuario.
$session->login('themadfaceblog', 'blogspot');

#Entramos al modo privilegiado, "password0101010101010" es la clave para entrar al modo privilegiado.

if ($session->enable("password0101010101010") ) {
my @output = $session->cmd('show run');

#Abrimos un archivo e imprimimos la configuracion del router en ese archivo

open FH, ">$file_name" or die "can't open '$file_name': $!";
foreach ( @output )
{
print FH $_;
}
close FH;

#En caso de que no podemos entrar al modo de configuracion privilegiada, dinos la razon por la cual no se pudo
} else {
warn "Can't enable: " . $session->errmsg;
}


####FIN SCRIPT####




Para ejecutar este script, lo hacemos de la siguiente manera

themad@face:~/perl$ chmod +x script.pl
themad@face:~/perl$ ./scrip.pl


Luego, para leer la configuracion de nuestro router
themad@face:~/perl$ less 192.168.58.51
Building configuration...

Current configuration : 71536 bytes
!
version 12.3
service timestamps debug datetime localtime
service timestamps log datetime localtime
service password-encryption
!
hostname THEMADFACE
!
boot-start-marker
boot system flash disk2:c7200-spservicesk9-mz.122-33.SRD2.bin
boot-end-marker
!
...
...
...


:)

Espero que les haya sido util,

Si tienen algun problema con sus Scripts, no duden en escribirnos, que con todo el gusto del mundo los ayudaremos!


Hasta la proxima! >:)

lunes, 1 de agosto de 2011

Clonacion de discos duros y particiones con el comando dd en linux!

El comando dd puede que muchos no lo conozcan pero esta por default en muchas versiones de linux (comprobado en debian, ubuntu y slax) y te permite de una manera muy cómoda clonar particiones y discos duros completos!! Sin perdida!!

Lo primero que tenemos que tener en cuenta es : Los discos duros que van a ser manipulados tienen que estar desmontados! Muy importante ya que aunque no estén usando ninguna aplicación visible en el momento de la copia, existen logs, registros horarios, demonios, etc que modifican el disco duro y podrían dejar la imagen de clonación con errores.

Evítese esto!

Una de las ventajas de linux es que cualquier disco duro, partición, carpeta, etc es un archivo mas. Que quiero decir con esto? que es bastante mas fácil y practico editar y mantener todo un sistema de archivos siguiendo esta filosofía. Por ejemplo si queremos copiar un disco duro a otro el comando es tan corto como:

dd if=/dev/sba of=/dev/sdb bs=1M

Donde dd = es el comando de clonación de discos
if=RUTA es la ruta de donde se va a leer la información
of=RUTA es la ruta hacia donde se va a escribir la información
bs=1M es el tamaño del bloque que va a ser leído y escrito. Como norma general se usa 1 mb pero puede ser mayor o menor dependiendo de tus necesidades.

Aquí tienen la documentación de DD directo de GNU.org http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html

Ahora viene lo interesante, imagínense que tiene un disco duro de 100 GB con Windows y tienes 2 particiones de 60 GB y 40 GB y quieres mover ese disco duro a uno nuevo de 2TB. Bueno al hacer una copia exacta del disco solo estarías utilizado 100 GB de los 2000 Gb del nuevo disco ya que te estas clonando la tabla de particiones también. Para esto también existe solución :
Puedes 1) Clonar los discos y modificar las particiones luego. Esta opción puede ser cómoda pero muchas veces trae problemas ya que al tener 2 particiones juntas sin espacio entre ellas no vas a poder aumentarlas en tamaño (luego pongo una imagen de esto para que se explique mejor). Así que si quieres aumentar la primera partición vas a tener que eliminar la segunda, luego aumentar el tamaño y por ultimo volver a copiar la partición (si te queda espacio).
O 2) Si conoces el total de particiones que vas a crear, puedes alocar ese espacio directamente en el disco duro nuevo (con Gparted), y luego copiar cada partición del disco viejo por separado.
Se hace tan sencillo como copiar un disco completo el comando seria:

dd if=/dev/sda/sda4 of=/dev/sdb/sdb2 bs=1M

Donde sda4 y sdb2 son los nombres de las particiones dentro de los discos duros.

También esta herramienta puede ser usada para backups remotos e inteligentes. Por ejemplo se puede crear una imagen del disco duro y guardarla en un DVD comprimido, o crear un cron que te envié cada semana los viernes a las 12 de la noche un backup actualizado, con los espacios vacíos llenos de cero y comprimido al disco duro de tu casa.

Como escribio este sysadmin en su blog a travez de un script:
http://www.docplanet.org/linux/backing-up-linux-web-server-live-via-ssh/

Los ceros y los espacios no utilizados del disco duro:

Muchas veces necesitas clonar un disco duro de 100 GB pero este disco solo esta utilizando 20 GB. Haciendo el método común, esa imagen de disco pesaría 100GB!! con unos 80GB de espacio no util!. Para ese caso es mejor comprimir esa imagen con gzip o con bzip2 (para los que tienen una maquina poderosa). Y para que esa compresión sea mucho mayor y mas efectiva se recomienda llenar el espacio vacío del disco duro con ceros. Todos los ceros son comprimidos al máximo y van a minimizar enormemente el tamaño de la imagen final. Se puede hacer de 2 maneras : con el comando zerofree llenar de ceros el espacio no alocado de un disco duro (útil si se trabaja directo en una imagen) pero tiene la desventaja de que va a llenar el disco duro en su totalidad. Y el otro método es crear un archivo que tome todo el espacio vacío y lo llene de ceros, para luego eliminarlo. (El espacio sigue lleno de ceros, lo que se elimina es el registro de ese archivo en la tabla de particiones).

dd if=/dev/zero of=archivo_ceros.hola count=1024 bs=1024

(Donde count va a ser el tamaño total en mb del archivo, sacado de la wiki http://es.wikipedia.org/wiki//dev/zero)
 o
zerofree  -v /dev/sda
o
nice cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill
(Este comando fue sacado de http://www.backuphowto.info/comment/530#comment-530, hecho por anonymous)
Donde nice corre un pequeño sheduler que lee con cat el archivo /dev/zero que provee caracteres nulos con que llenar el archivo zero.fill. Para luego eliminarse automáticamente al terminar. No se recomienda correr ningún otro programa el ejecutar estos comandos ya que podría haber problemas al intentar acceder a un disco que este lleno.

dd if=/dev/sda4 of=/tmp/imagen_de_mi_particion.img bs=1M
gzip /tmp/imagen_de_mi_particion.img
o
bzip2 /tmp/imagen_de_mi_particion.img 

Luego si quisieras volver a escribir esa imagen seria tan simple como:

dd if=/tmp/imagen_de_mi_particion.img of=/dev/sda4 bs=1M


Comprobar que los discos son iguales:

Para comprobar que el disco que clonaste es exactamente igual al origen existen varias maneras, las mas comunes son con hash md5 o con cmp.
El comando cmp te lista las diferencias con precisión de byte entre 2 diferentes archivos. Y como linux trata los discos duros como archivos podemos hacer un:

cmp /dev/sda1 /dev/sda2


Si el comando no arroja ninguna información es que los discos están iguales!


O podemos crear un hash del disco con md5 haciendo de esta manera:
cat /dev/sda | md5

Para luego compararlos.



Errores en la copia?


Puede que mientras estés copiando algo hallan sectores danados del disco duro en cuestión. Y si no quieres detener la clonación por unos pequeños sectores que están en malfuncion puedes correr el dd con el parámetro conv=noerror que no detiene la copia si se encuentra algún error.

 dd if=/dev/sda4 of=/tmp/imagen_de_mi_particion.img bs=1M conv=noerror

Espero que les sirva esta información, saludos! >:D madface