Páginas

miércoles, 18 de mayo de 2011

Comprobar Disco Duro

smartmontools

Utilidad incluida en Debian (y derivados), para conocer el estado del disco duro de tu máquina. Este es el nuevo disco duro del portatil WD de 500GB. En la parte superior de la imagen Disk is healthy (healthy = saludable, literalmente). Una manera rápida y práctica de comprobar un HDD.
Nota: Aviso a navegantes estuve probando un disco SSD OCZ Vertex II 120 GB y después de seis meses todos los datos desaparecieron y la BIOS no le reconoce. Poco fiables los SSD (al dia de hoy).


En GNU/Linux las herramientas smart monitoring tools pertenecientes al paquete smartmontools permiten analizar el disco duro que, entre otras cosas útiles, nos permite conocer el estado físico del mismo y determinar si su vida útil está llegando a su fin.

Primero comprobar si nuestra BIOS y Disco duro lo soportan:

# smartctl -i /dev/sda

Devolverá algo parecido a esto:

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Momentus 5400.4 series
Device Model:     ST9120817AS
Serial Number:    5RE1NQFK
Firmware Version: 3.ADB
User Capacity:    120,034,123,776 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Wed May 18 07:14:45 2011 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Las dos últimas líneass determinan que el disco tiene soporte SMART y está activado:
SMART support is: Avilable = dispositivo tiene capacidad SMART
SMART support is: Enabled = Activado.

Determinar las características del soporte que tenemos:

# smartctl -Hc /dev/sda

Devolverá algo como esto:

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Please note the following marginal Attributes:
...
...
...

Ver el log de errores, si los hay:

# smartctl -l error /dev/sda

Si no hay errores devolverá:

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged

Obtener información sobre el disco duro:

# smartctl -l selftest -i /dev/sda

La salida será parecida a esto:

smartctl 5.40 2010-07-12 r3124 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Momentus 5400.4 series
Device Model:     ST9120817AS
Serial Number:    5RE1NQFK
Firmware Version: 3.ADB
User Capacity:    120,034,123,776 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Wed May 18 07:21:50 2011 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         1         -
# 2  Short offline       Interrupted (host reset)      70%         1         -
# 3  Short offline       Completed without error       00%         0         -
# 4  Short offline       Interrupted (host reset)      90%         0         -            -

Detalle de la información obtenida:

    * Model Family: “Familia” del disco duro (Seagate Barracuda 7200).
    * Device Model: Modelo especifico y firmware.
    * Serial Number: Numero de serie del disco duro.
    * User Capacity: Capacidad del mismo (40GB).
    * ATA Version is: Versión del ATA usado.
    * SMART support is: Si soporta SMART.
    * SMART support is: Sí lo tiene activado.
    * LifeTime: Són las horas que el disco duro ha estado encendido.
    * LBA_of_first_error: Muestra los posibles errores.

Agregar el parámetro -H antes de -i /dev/sda nos dirá si para S.M.A.R.T. el disco tiene errores

# smartctl -l selftest -i -H /dev/sda

Y nos responderá

...
...
...
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Please note the following marginal Attributes:
...

En el caso del disco duro de mi portatil (objeto de análisis), me advierte sobre "Tener en cuenta los siguientes atributos marginales" (following marginal Attributes), pero hay más y probablemente el análisis más importante con el parámetro -A:

# smartctl -l selftest -A /dev/sda

El resultado será:



    * * 12 Power_Cycle_Count: RAW_VALUE: 2173. Se ha encendido 1255 veces. VALUE 098.
    ** 194 Temperature Celsius. RAW_VALUE: 44. Es decir, 44 grados de temperatura en el disco, muy alta.

De estos parámetros el más significativo es el campo RAW_Value que indica el valor del dato en cuestión y el campo VALUE que indica el estado según S.M.A.R.T, siendo un estado óptimo por encima de los 200, normal entre los 100-200 y malo por debajo de los 100 (en este caso 98 :-( ). De todas maneras, la rigurosidad se aplica a servidores en producción. Aunque para datos críticos existen mejores soluciones (raid 5, raid 10, etc), sustituyen en caliente un disco que ha fallado.  


Linux es genial!

domingo, 15 de mayo de 2011

Parchear kernel Debian

Parchear y recompilar kernel en Debian
Avanzado

Parchear un kernel en Gentoo Linux es comodo, fácil, preciso y los handbook del sitio gentoo.org le guiarán durante todo el proceso. Pero en Debian, la cosa es un poco diferente. Caso poco probable de utilizar (a estas alturas squeeze utiliza la 2.6.32), un kernel inferior al 2.6.15-rc1, pero nos servirá como ejemplo para parchear un kernel en Debian.

Supuesto: Resulta que tiene un kernel antiguo en su sistema Debian y necesita construir el módulo de kernel MPPE, los más antiguos (anteriores a 2.6.15-rc1), no lo incluyen. El nombre del módulo es ppp-compress-18, (necesario para cifrado MPPE), utilizado por poptop.

El protocolo de túnel punto a punto (PPTP) es utilizado a menudo en redes Windows para crear redes privadas virtuales (VPN). Puede configurar un bonito servidor VPN basado en PPTP con Linux, solo tendrá que pagar por el hardware e instalar el servidor Poptop pptpd. Con al menos dos interfaces de red, ya que estará actuando como un router y reenviando tráfico.

Una práctica habitual es poner una pasarela VPN en routers perimetrales. Un router perimetral basado en Linux es fácil de configurar. Si no sabe como hacerlo click aqui.

El PPTP se creó en tiempos de las conexiones telefónicas, encontrará mucha documentación referente a estas conexiones y sus clientes Windows. Puede utilizarse sobre cualquier tipo de red, telefónica, Ethernet, ISDN, Internet, lo que sea.

Una VPN basada en PPTP es una VPN debil. Es un protocolo punto a punto sobre un túnel GRE (Generic Routing Encapsulation), y ninguna de ellas se diseñó pensando en la seguridad. OpenVPN utiliza una PKI en condiciones y varios niveles de cifrado. 

Primero, descargue las fuentes kernel, el parche MPPE y las herramientas que le ayudarán en esta labor.

# apt-get install gcc bin86 libc6-dev bzip2 kernel-package kernel-patch-mppe

Averigue la versión de su kernel.
# uname -r
2.6.8

Descargar, desempaquetar y preparar el paquete fuente de kernel.

# apt-get install kernel-source-2.6.8
# cd /usr/src
# tar xjvf kernel-source-2-6-8.tar.bz2
# cd kernel-source-2.6.8
# make-kpkg clean

El fichero de configuración de su actual kernel lo utilizará para la construcción de su nuevo kernel.

# cp /boot/config-2.6.8 ./.config-2.6.8

Es hora de crear su nuevo paquete de kernel:

# cd /usr/src/kernel-source-2.6.8
# make-kpkg |
--added-patches mppe \
--config oldconfig \
--initrd \
kernel_image

Después de configurado el nuevo kernel asegúrese de habilitar (como módulo), CONFIG_PPP_MPPE:

PPP MPPE compresssion (encryption) (PPP_MPPE) [N/m/?] (NEW) M

Al terminar y empiece a compilar el kernel, vaya a tomar un café, tarda unos minutos. Todo dependerá del tipo de máquina en que esté compilando. Cuando haya acabado, instale el nuevo kernel:

# dpkg --install /usr/src/kernel-image-2.6.8-mppe_10.00.Custom_all.deb

Para cargar el nuevo kernel reinicie su sistema y compruebe que soporta MPPE:

# modprobe ppp-compress-18 && echo exito
exito

Un entorno de construcción:
Puede configurar un ordenador como máquina de construcción y copiar en su destino final la nueva imagen del kernel, alerta! debe adaptarlo para el hardware en que se vaya a ejecutar.

Debian ofrece un número limitado de versiones oficiales de kernel. A partir del lanzamiento de Etch, Debian cambió la manera de nombrar los paquetes de kernel. Las nuevas convenciones de nombramiento son:


linux-source-[version] y linux-image-[version]

Fuentes:
Manual Debian MPPE sobre como parchear su propio kernel: http://pptpclient.sourceforce.net/howto-debian-build.phtml
Redes en Linux Carlak Schroder

Listo! puede utilizar su nuevo kernel. Instale pptpd.
# aptitude install pptpd

El demonio pptp se ejecutará automáticamente al inicio. Restart no cierra las sesiones existenes, para reiniciarlo primero indique stop y luego start.

En este momento está listo para configurar su servidor Linux PPTP VPN.


Linux es genial!.

martes, 10 de mayo de 2011

Respaldar basedatos MySQL

Después de instalar MySQL, php5, apache2, phpMyAdmin y el gestor de contenidos joomla! (versión 1.6) corriendo en una máquina linux, realizar copias de seguridad de la base de datos y mantener las últimas 10, cron y este script serán suficiente.
En un CMS el contenido y continente son independientes y es en la base de datos donde se guarda el contenido del sitio. Cabe recordar que desde phpMyAdmin es posible realizar copias y restaurar base de datos.

Script original modificado.
Autores Script: Mauricio Vergara y Carlos Molina de la Universidad Técnica Federico Santa María de Valparaiso, hace mucho, mucho tiempo.

#################Inicio script##############
#!/bin/bash
#mysql backup
# declaracion de variables
EMAIL="admin@misitio.com"
HOST="localhost"
DB="joomla16"
USER="dina45r3_jo151"
PASSWD="8vb#4uA*7Sv"
DIR="/opt/backup"
FECHA="$(date +%Y.%m.%d)"
CONT=10
FILE="$DIR/testin-bak-$FECHA.sql"
MAQ=$(uname -n)
GZIP="1" #0 no, 1 yes

# comprobar que existe $DIR y si no existe crearlo
# con permiso rwx solo para root
if [ ! -d $DIR ] ; then
    mkdir -p $DIR &> /dev/null
    chmod 700 $DIR &> /dev/null
fi

# Haciendo el Dump
mysqldump --add-drop-table -h$HOST -u$USER -p$PASSWD $DB > $FILE 2> $DIR/error

# comprimir el archivo resultante
if [ "$GZIP" = "1" ] ; then
   gzip -9 $FILE &> /dev/null
fi

# cuantos backups existen?
num=$(ls $DIR/*.sq* | wc -l) &> /dev/null

# dejando solo los $CONT archivos
cd $DIR
while ( [ $num -gt $CONT ] ); do
   rm -f $(ls -t | tail -n 1)
   num=$(ls $DIR/*.sq* | wc -l) &> /dev/null
done

# enviar email si hay erro en $DIR
tam_error=$(du $DIR/error|cut -d '/' -f 1)

if ( [ $tam_error -ne 0  ] ); then
    echo -e "\nError (auto)" >> $DIR/error
    cat $DIR/error|mail -s"Backup :(" $EMAIL
fi
##################Fin script##################

Permisos de ejecución al archivo
# chmod +x mysql.backup.sh

  Para ejecutar todos los días a las 8:00 de la mañana:
# mv mysql.backup.sh /opt/backup/mysql.backup.sh
# export EDITOR=vim
# crontab -e
# 0 8 * * *  /opt/backup/mysql.backup.sh
# :wq

Pasan de las 8:00 A.M. Ejecuto el script por primera vez. (Si deseo ejecutarlo nuevamente durante el mismo día tendré que borrar manualmente el realizado con anterioridad, vigilando que corresponda a la fecha deseada).
# ./mysql.backup.sh

Para comprobar que la copia ha ido bien entro en phpMyAdmin y desde la pestaña exportar realizar una copia de la basedatos comprimida con gzip. Al comparar ambos dos archivos comprueba que son idénticos. Si no, revisa que los parámetros user db passwd sean correctos. :-)

Linux es genial!.