viernes, 22 de noviembre de 2013

RAID status not OK. Exiting Debian 7.2


Jugando con un RAID software montado en Debian 7.2 me encontré que todo funcionaba bien, pero uno de los RAID que tenía montado no funcionaba bien. El RAID donde estaba montado el sistema funcionaba perfectamente porque tras unas pruebas de ruptura, lo había recuperado. Pero el que me producía el error correspondía al RAID destinado a la memoria de intercambio (swap).


Me di cuenta del error en el arranque del sistema, justo cuando comenzaba a arrancar Debian lo primero que hace es montar los RAID y este proceso devolvía un error. Puesto que el problema estaba en el RAID destinado a memoria de intercambio no notaba nada en el sistema. Para confirmar el error monté "bootlogd" para ver algo más de información, en la pantalla de carga no me daba tiempo a leer nada, simplemente vi un "FAIL" y me puse a investigar de donde venía.

Para el que no esté familiarizado con "bootlogd" en su día escribí un pequeño artículo sobre como instalarlo y configurarlo.

Tras la instalación simplemente tienes que ver el contenido de "/var/log/boot" y yo me encontré con "RAID status not OK. Exiting", así que efectivamente algo no estaba cargando bien en el RAID.

Para verificar el estado de los RAID utilizaremos el comando "mdadm" indicando el RAID que queremos verificar, en mi caso tengo dos RAID; /dev/md0 y /dev/md1. Cuando verifiqué el estado de /dev/md1 efectivamente encontré "State : clean, resyncing (PENDING)" en lugar de un simple "State : clean".
root@debian:~# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Nov 14 12:13:46 2013
     Raid Level : raid1
     Array Size : 14744448 (14.06 GiB 15.10 GB)
  Used Dev Size : 14744448 (14.06 GiB 15.10 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Nov 14 12:39:40 2013
          State : clean, resyncing (PENDING)  Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : debian:1  (local to host debian)
           UUID : 58db8a25:19229d31:ec4eb31f:6dc16a4a
         Events : 3
    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2
Así pues hay que lanzar un "mdadm --readwrite /dev/md1" para que comience el proceso de recuperación. Este comando lanzará un proceso backgrund, es decir, no nos bloqueará el terminal desde el que lancemos el proceso con el consecuente miedo de que se cierre y perdamos el proceso.
root@debian:~# mdadm --readwrite /dev/md1
Para tener una estimación del tiempo que va a tardar en terminar el proceso debemos visualizar el contenido del fichero "/proc/mdstat":
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 22.6% (3337408/14744448) finish=2.9min speed=64360K/sec
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:
Finalmente el proceso llegará a su fin; sin hace nada más el RAID funcionará correctamente, ya no volveremos a ver errores en el inicio del sistema. Nuestro RAID ha sido recuperado.
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:


jueves, 21 de noviembre de 2013

Crear RAID 1 Software Debian

Esta entrada en mi blog no es original mía. La he sacado de "http://www.lintips.com/?q=node/88" pero no es la primera vez que hago referencia a algún manual externo y éste termina por desaparecer por una u otra razón, ya sea por problemas temporales en el servidor donde está alojado o porque el dueño del documento decidió eliminarlo. 

Para evitar estos problemas que puede ser bastante incómodo, replicado el post dentro de mi blog. Esta replica la realizo para apoyar mi entrada sobre recuperación de RAID software. Y que siempre que alguien acceda a la recuperación de RAID software, también pueda tener acceso a este manual sobre como montar el RAID desde la instalación de Debian.

Iniciamos la instalación de Debian como siempre y al llegar a la pantalla "Particionado de discos" seleccionamos el modo Manual.

Seleccionamos el primer disco duro y he indicamos que cree una nueva tabla de particiones.



Repetimos el mismo paso para el disco secundario.
Creamos, en el primer disco, las particiones que necesitemos y las definimos de tipo "volumen físico para RAID". En este caso los discos son de 85.9GB y voy a crear 2 particiones primarias: sda1 de 83,9 GB (será el volumen donde irá la /) y sda2 de 2GB (será el volumen swap o "área de intercambio").

Repetimos los mismos pasos para el segundo disco, asegurándonos que las particiones las definimos exactamente con el mismo tamaño. Tras este paso nos quedará algo como esto:
Ahora desde esa misma pantalla seleccionamos la primera opción "Configurar RAID por software"
y indicamos que escriba los cambios en los dispositivos.
Nos aparecerá el menú de configuración de multi-discos (MD) y RAID por software, donde seleccionamos la acción Crear un dispositivo MD
De tipo RAID 1, con 2 dispositivos activos y 0 libres (spare discs).
Y selecciono la partición de cada disco físico que se va a utilizar para este primer MD (md0).
Repito estos pasos para el segundo volumen (md1) y una vez definidos todos los MD, seleccionamos Terminar para que se creen. Con lo que en la utilidad de Particionado ya aparecen los dos dispositivos RAID.
Solo faltara definir en estos volúmenes el sistema de ficheros a utilizar, el uso que le vamos a dar (punto de montaje) y formatearlos. Con ello ya hemos terminado y continuamos la instalación de Debian como si fuese un disco real.
Como nota final deciros que es muy importarte que la partición swap también este en un volumen raid, como he definido aquí, si solo esta en un disco y este falla el sistema se bloquearía.

miércoles, 20 de noviembre de 2013

Virtualizar máquina física

Para virtualizar una máquina física, únicamente necesitamos pasar el disco duro físico a un estándar de virtualización. Esto es suficiente para sistemas operativos GNU/Linux, pero para otros sistemas operativos el proceso puede ser algo más complicado y existen herramientas especificas para este fin.

Desde GNU/Linux necesitamos clonar el disco del sistema de la máquina física al disco duro del sistema de la máquina virtual. Esto es tan simple como ejecutar el comando:
dd if=/dev/sda | ssh root@ dd of=/dev/sda
Es decir, clonamos de un disco principal (dd if=/dev/sda) al disco principal de una máquina remota (ssh root@ dd of=/dev/sda). Pero claro, esto no podemos ejecutarlo tal cual en un sistema que está ejecutándose, porque no podemos copiar directamente un disco duro mientras el sistema lo está utilizándolo. Corremos el riesgo de que se modifiquen cosas que ya hemos copiado y el disco no sería consistente.

Este proceso es recomendable hacerlo en frio, es decir, con el sistema parado. Utilizaremos un CD Live que nos permite tener funciones de red y que disponga de servidor SSH instalado. Yo he utilizado Clonezilla, lo puedes descargar desde la web oficial de clonezilla o te dejo aquí el enlace de la versión que yo utilicé clonezilla-live-2.2.0-29-i686-pae.iso

Para el que no tenga experiencia con clonezilla, os comento algunas peculiaridades; el usuario root no tiene clave de acceso, para acceder como root necesitamos entrar como usuario "user" con clave "live" y después ejecutar "sudo -s" para pasar a ser "root". Necesitarás utilizar la cuenta de "root" directamente en una conexión SSH, cambia la clave de "root" con el comando "password".

Para virtualizar una máquina física necesitaremos; por una lado la máquina física y por otro lado una máquina virtual. Las dos deben iniciarse con clonezilla, activar la red y levantar el servidor ssh.

  • Activar la red: para meter la máquina dentro de nuestra red. Si tenemos corriendo un DHCP en nuestra red, podemos solicitarle que le asigne una IP a la tarjeta de red de nuestra máquina iniciada con el CD live. Para esto utilizaremos el comando "dhclient eth0".
  • Servidor SSH: una vez tenemos la máquina dentro de la red vamos a iniciar el servidor SSH ejecutando el comando "/etc/init.d/ssh start". Ahora podemos conectarnos desde una máquina remota a esta.
Ahora desde la máquina que pretendemos virtualizar ejecutaremos el siguiente comando:
dd if=/dev/sda | ssh root@< ip &gt dd of=/dev/sda
Esto nos pedirá la clave de root de la máquina destino. Y comenzará con el proceso de clonado enviando los datos por la red, son devolver ningún tipo información sobre el estado del proceso.

Este proceso puede tardar algunas horas, dependiendo de la velocidad de nuestra red y del tamaño del disco a copiar. Recomiendo utilizar el comando "pv" entre el "dd" y "ssh" para que nos informe sobre la transferencia de datos.

"pv" nos mostrará tanto la transferencia actual, como el total de datos transferidos. Esto será bastante cómodo y nos ayuda a hacer una estimación del tiempo que le queda al proceso. El resultado es algo parecido a esto:
1,32GB 0:02:06 [10,9MB/s] [                            <=>                         ]
Cuando el proceso ha terminado tiene que mostrar un resumen total como este:

156301488+0 records in
156301488+0 records out
80026361856 bytes (80 GB) copied, 7069.71 s, 11.3 MB/s

Asegúrate de tener instalado el comando "pv" antes de lanzar el proceso. Si no lo tienes instalado no funcionará. Finalmente así queda el comando:
dd if=/dev/sda | pv | ssh root@< ip &gt dd of=/dev/sda
Recordad que este proceso es bastante largo, si lanzas el proceso desde una consola SSH es muy probable que pierdas la conexión y no puedas volver a consultar el estado del proceso. Para evitar este problema recomiendo siempre utilizar "screen" para lanzar este tipos de proceso que presumiblemente tardarán mucho en terminar. Hace ya algún tiempo que escribí un artículo sobre el uso de "screen", pero sigue estando en vigor y os puede servir de ayuda.

También es importante destacar que este proceso cargará en gran medida en hardware donde lancemos el comando "dd if=/dev/sda | ..."; ya que recorrerá por completo el disco duro y lo transferirá por la red. Si hemos decidido virtualizar una máquina física es probable que se trate de una máquina vieja y puede que este proceso termine de matarla y no sobreviva.

Para evitar matar a la máquina que pretendáis virtualizar y no hacer que toda la espera sea una perdida de tiempo, os recomiendo sacar el disco de la máquina a virtualizar y o bien montarlo en una unidad usb externa y lanzar el "dd" desde otra máquina o conectarlo directamente en la maquina que hospedará a la máquina virtual.

lunes, 18 de noviembre de 2013

Proxmox "The requested URL returned error: 401"

Como ya sabréis Proxmox ha dejado de ser gratuito, ahora si no estas suscrito, tienes que utilizar los repositorios de test, no recomendados para servidores en explotación. Pero no obstante yo tenía configurado el servidor de test en mi /etc/apt/sources.list y tenía este error al ejecutar un "aptitude update" o "apt-get update".
Err https://enterprise.proxmox.com wheezy/pve-enterprise amd64 Packages
  The requested URL returned error: 401
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es_ES
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-en
94% [Trabajando]W: Se produjo un fallo al descargar https://enterprise.proxmox.com/debian/dists/wheezy/pve-enterprise/binary-amd64/Packages: The requested URL returned error: 401
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: No se pudo reconstruir el almacén de paquetes
Al final el error está en la carga del fichero "/etc/apt/sources.list.d/pve-enterprise.list" por alguna razón ha cargado el repositorio enterprise y hay que comentarlo para evitar este error 401.

Simplemente comentamos la linea que aparece en el fichero "/etc/apt/sources.list.d/pve-enterprise.list" y volvemos a ejecutar el "update" y todo funcionará correctamente.
#deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

sábado, 16 de noviembre de 2013

Selección kernel por defecto inicio grub Debian

¿Alguna vez has necesitado seleccionar un nuevo kernel en el arranque de tu Debian y no estás frente a la máquina para poder seleccionar con los cursores en la pantalla de selección de kernels de grub? Pues durante la instalación de Proxmox yo lo he necesitado.

Es bastante simple, en primer lugar tenemos que ver cuál es el kernel que queremos iniciar. Con el comando "grep menuentry /boot/grub/grub.cfg" podemos ver los que tenemos disponibles en la pantalla de carga de grub.

En mi ejemplo aparecen dos kernel; 3.2.0 amd64 y 2.6.32 pve, con sus correspondientes "recovery mode"; si contamos tenemos 4 lineas.
root@debian:~# grep menuentry /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
Desde el fichero "/etc/default/grub" podemos modificar el parámetros "GRUB_DEFAULT=2" donde definiremos el kernel que queremos que se seleccione por defecto. Cuando abrimos el fichero por primera vez "GRUB_DEFAULT" tendrá valor "0", que corresponde con el primer kernel de la lista.

Por tanto el contador de kernel comienza a contar en "0"; si queremos seleccionar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" que está en la tercera linea, tendremos que darle valor "2".
Tras modificar el fichero únicamente nos queda refrescar la configuración de grub con el comando "update-grub". Ahora cuando reiniciemos nuestro sistema aparecerá la tercera opción seleccionada por defecto.
root@debian:~# update-grub
Tenemos que tener cuidado con futuras actualizaciones o instalaciones/desinstalaciones de kernels. Estas acciones modificarán el orden de nuestros kernels en el listado de carga y es muy probable que el valor de "GRUB_DEFAULT" no corresponda con el kernel que queremos iniciar.

En mi caso tras cargar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" voy a desinstalar "Debian GNU/Linux, with Linux 3.2.0-4-amd64" y ahora "2.6.32-26-pve" pasará a la primera posición de la lista. Es muy importante volver a poner el valor de "GRUB_DEFAULT=0" para que cargue correctamente.

viernes, 15 de noviembre de 2013

bootlogd Debian 7.2

En más de una ocasión he necesitado leer detenidamente lo que se carga en el arranque del sistema sin estar delante de la pantalla del servidor. Con bootlogd se puede solucionar este problema. Devuelve a un fichero de log todo lo que sucede en el inicio del sistema. Con esta herramienta podemos averiguar si tenemos algún problema en la carga inicial del sistema.

Para ponerlo en funcionamiento es bastante simple. Simplemente instalamos el paquete "bootlogd":
aptitude install bootlogd
Después creamos el fichero "/etc/default/bootlogd" con añadiendo la linea "BOOTLOGD_ENABLE=yes", ahora solo nos falta reiniciar y ver el contenido del fichero "/var/log/boot" para ver qué ha pasado en el inicio del sistema.

https://wiki.debian.org/bootlogd