lunes, 28 de enero de 2013

Montando un RAID1 (mirror) en Debian

RAID (Redundant Array of Inexpensive Disks) es una tecnología de almacenamiento que combina varios unidades de disco en una misma unidad lógica. Los datos se distribuyen en los discos en una de varias formas denominadas "Niveles RAID", dependiendo en los requisitos de redundancia y de rendimiento que se necesiten.

Los diferentes esquemas (o niveles) se nombran utilizando la palabra RAID seguida de un número (por ejemplo, RAID0, RAID1, etc); cada uno de ellos provee un balance diferente entre los objetivos principales: confiabilidad, disponibilidad, rendimiento, y capacidad. Los niveles RAID mayores que RAID0 proveen protección contra errores irrecuperables, tanto en sectores aislados como en todo el disco.

En RAID1 (espejo sin paridad), los datos se escriben idénticamente en dos unidades (generalmente, aunque se pueden utilizar más unidades), produciendo de esa manera un "conjunto espejo". Cuando se hace una petición de lectura, la información es devuelta por cualquiera de las dos unidades independientes que la contienen. De manera similar, cuando se escribe en el conjunto, se actualiza el estado de ambos discos. El RAID1 continúa operando mientras al menos una unidad que lo compone se mantiene en funcionamiento.
  • El RAID1 crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos.
  • Puede ser tan grande como el más pequeño de sus discos.
  • El rendimiento de lectura se incrementa aproximadamente como múltiplo lineal del número de unidades (puede estar leyendo de manera simultánea dos datos diferentes en dos discos separados)
  • En algunos entornos 24x7, es posible "dividir" el espejo: marcar un disco como inactivo, hacer una copia de seguridad de dicho disco, y luego "reconstruir" el espejo. 
La herramienta que se utiliza para administrar los RAIDs en Linux es mdadm, y está disponible desde los repositorios de Debian:


Voy a utilizar las unidades sdc y sdd que se muestran en el siguiente listado:


PRIMER PASO: Creo las particiones en las unidades (se muestra solamente para /dev/sdd):


SEGUNDO PASO: Creo el array:


(el progreso de creación del raid1 puede verse leyendo el archivo /proc/mdstat). En el caso de que este archivo indique resync=PENDING, se puede forzar el build del RAID1 con el comando: mdadm --readwrite /dev/md0.


Y cuando ya está listo:


TERCER PASO: Formateo el RAID:


CUARTO PASO: Montar el RAID y verificaciones:

  1. Línea 1: Tiro un listado detallado del contenido de mi home. Se puede ver en la línea 12 que hay un directorio llamado raid1 que será donde montaré el dispositivo /dev/md0 recién formateado y que utilizaré como RAID1.
  2. Línea 20: Monto el RAID1. No es necesario especificar el tipo de sistema de archivos ya que lo formateé como ext3 en el TERCER PASO.
  3. Línea 21: Muestro los sistemas de archivos montados actualmente. Veo que /dev/md0 está montado en /home/gacanepa/raid1 (línea 33).
  4. Línea 34: Intento copiar el archivo cliente.tar dentro de raid1, pero recibo el mensaje de "Permiso denegado" (línea 35) debido a que el usuario root se convirtió en dueño de ese directorio al montar el dispositivo /dev/md0 en él. Cambio el usuario dueño y el grupo del directorio (línea 36) e intento realizar la operación nuevamente (37), sin problemas esta vez.
  5. Línea 39: Veo el contenido del directorio en cuestión y se puede ver que el archivo fue copiado al mismo.
  6. Línea 41: Salgo del directorio para desmontar el filesystem (42). Luego de hacerlo, vuelvo al mismo (43) y veo su contenido (44), el cual no muestra nada ya que el dispositivo fue desmontado, y es en el mismo donde reside el archivo que había copiado anteriormente.
  7. Línea 46: Vuelvo a montar el RAID y veo su contenido (48).
  8. Línea 51: Marco como fallado uno de los dispositivos que componen el RAID para simular una falla de hardware, y veo en /proc/mdstat (53) el estado actual del RAID ([_U] indica que la primera unidad del RAID está fallada).
  9. Línea 59: Quito ("remuevo físicamente") "en caliente" la unidad que presenta problemas. Aun así, el contenido del RAID no se modifica (68-69) y puede accederse a su contenido.
  10. Línea 70: Muestro el espacio ocupado y disponible en cada filesystem activo del equipo. En (78) puedo ver el detalle del RAID.
  11. Línea 79: Reemplazo la unidad que presentaba fallos con una de similares características y la vuelvo a agregar al conjunto, luego de lo cual comienza a resincronizarse nuevamente (85). Mientras tanto, el contenido del RAID continúa siendo accesible (89).


¿Qué puede salir mal?

1) Al intentar crear el RAID, uno de los dispositivos puede estar ocupado (siendo utilizado por un proceso). En este caso, se puede identificar dicho proceso mediante lsof | grep nombreDeDispositivo, y luego matarlo utilizando su PID con el comando kill PID (o kill -9 PID, si con el anterior se resiste ;).

2) Para que el RAID esté disponible al reiniciar el equipo (persistencia), se debe configurarlo mediante la siguiente línea del archivo /etc/default/mdadm:


Si además de tener disponible el arreglo, se desea montarlo cuando arranca el sistema, se le debe asignar un punto de montaje y sus correspondientes opciones en el archivo /etc/fstab.

Si a alguien se le ocurre (o se encuentre con) otro problema que pueda surgir, deje un comentario y lo vemos :).

jueves, 24 de enero de 2013

Instalación de GNU/Linux Mint 14 "Nadia"

Hasta el momento, tenemos la PC familiar en casa con dual boot: GNU/Linux Debian Squeeze y Windows 7. A este último sistema operativo lo uso muy de vez en cuando para programar en Visual C# y usar el SQL Management Studio por cuestiones de trabajo.

Hace un par de días me dio ganas de probar personalmente GNU/Linux Mint 14 "Nadia", que es la última versión de Mint, y el escritorio Cinnamon. Personalmente me considero más fanático de la consola, pero para el resto de la familia quise instalar una "linda" distro con una interfaz gráfica más "llamativa" o "user-friendly" que la que provee Debian.

PRIMER PASO: Documentación de aplicaciones agregadas luego de la instalación original y determinación de la necesidad de las mismas actualmente.
  • Teamviewer (asistencia remota) - Descarga (archivo .deb, v.7.0.9377) disponible desde aquí. Versión actual:
  • Google Chrome (navegador de Internet) - Descarga (archivo .deb) disponible desde aquí. Versión actual:
  • FileZilla (cliente ftp) - Disponible desde los repositorios
  • Sane (API para uso de escáneres) - Disponible desde los repositorios
  • Terminator (múltiples terminales en una misma ventana) - Disponible desde los repositorios
  • Aptitude (gestor de paquetes) - Disponible desde los repositorios
  • CUPS (Sistema Común de ImPresión de Unix) - Disponible desde los repositorios
  • Smb-cliente (cliente Samba) - Disponible desde los repositorios
  • Jedit (editor de archivos de texto) - Disponible desde los repositorios
 Como ejemplo, al buscar los paquetes que contienen la palabra "samba", obtuve lo siguiente:


(Una descripción de la información anterior puede encontrarse en man aptitude, y en este link)

SEGUNDO PASO: Backup de directorios seleccionados dentro de /home, y de los favoritos de Google Chrome (en formato html).



CONTINUARÁ...