martes, 22 de setiembre de 2009

AoE en GNU/Linux

Copyright © 2009 Juan Andrés Ghigliazza.
Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de
GNU, Versión 1.3 o cualquier otra versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera.
Una copia de la licencia se puede ver
aquí.

1 Introducción

AoE (Ata over ethernet) es un protocolo de red que nos permite compartir discos ATA mediante redes ethernet. Este documento no explica en detalle el protocolo, sino que solamente explica como configurarlo en algunas distribuciones de GNU/Linux mediante un ejemplo.

1.1 Ejemplo

Se cuenta con dos hosts. En uno de ellos, llamado host-a, se necesita más espacio de almacenamiento pero no se pueden instalar más discos locales. En el otro, llamado host-b, si se pueden instalar nuevos discos locales. La idea es que se instale un nuevo disco local en host-b, y se lo exporte mediante el protocolo AoE para que host-a lo pueda usar.

El OS de host-b es Debian lenny, y el de host-a CentOS 4. El nuevo disco en host-b a exportar mediante AoE es /dev/hda1.

2 Configuración del servidor (host-b)

  • Chequear que el kernel soporte AoE. El kernel de Debian lenny si lo soporta, por lo tanto no habría que hacer nada. Si se está usando otra versión o distribución, habría que ver la forma de hacerlo; se puede tomar como referencia el siguiente artículo: http://www.debian-administration.org/articles/553.

  • Instalar los paquetes vblade y vblade-persist.

  • Exportar el disco mediante AoE, con el comando vblade-persist. Hay que ejecutar el comando 3 veces:

    • La primera para configurar el dispositivo exportado. Los dos números que aparecen luego de setup son los identificadores del disco exportado; el primero es el shelf (o major) y el segundo es el slot (o minor). El siguiente parámetro es la interfase de red por cual exportarlo, y el último el dispositivo de bloques a exportar.

vblade-persist setup 0 0 eth0 /dev/hda
    • La segunda para hacer que se exporte automáticamente en el booteo:

vblade-persist auto 0 0
    • Y la última para arrancarlo:

vblade-persist start 0 0

A partir de este momento, el disco debería estar exportado, y se debería poder ver desde otro host conectado al mismo switch ethernet2. Se puede comprobar si se está viendo desde otro host, con el comando aoe-stat, y es un buen momento para hacerlo.

3 Configuración del cliente (host-a)

Lamentablemente, en CentOS 4 no existe soporte para AoE; esto implica que hay que compilar un módulo para el kernel. En esta sección se describen los procedimientos de compilación y de configuración de este módulo.

3.1 Compilación del módulo aoe

El procedimiento para compilar e instalar el módulo aoe es el siguiente:

  • Instalar con yum los paquetes kernel-devel, make y gcc.

  • Bajar la última versión del módulo AoE desde http://support.coraid.com/support/linux/ y extraer su contenido a un directorio temporal.

  • Dentro del directorio temporal, se creará un nuevo directorio con los fuentes del módulo. El nombre de este depende de la versión; por ejemplo, si la versión fuera la 6.72, el nombre sería aoe6-72. Estando en este directorio ejecutar make.

  • Luego, desde el mismo lugar y con el usuario root, ejecutar make install.

3.2 Configuraciones para el módulo aoe

  • Las reglas udev para el módulo aoe (las cuales crean dispositivos que permiten usar comandos como aoe-discover y aoe-flush), tienen una sintaxis más nueva que la que se usa en CentOS 4. Para que funcionen entonces, hay que modificar el archivo /etc/udev/rules.d/60-aoe.rules cambiando las líneas debajo de "aoe char devices", para que queden como sigue:

# aoe char devices
SYSFS{dev}="152:*", KERNEL="discover", NAME="etherd/%k", GROUP="disk", MODE="0220" 
SYSFS{dev}="152:*", KERNEL="err", NAME="etherd/%k", GROUP="disk", MODE="0440" 
SYSFS{dev}="152:*", KERNEL="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220" 
SYSFS{dev}="152:*", KERNEL="revalidate", NAME="etherd/%k", GROUP="disk", MODE="0220" 
SYSFS{dev}="152:*", KERNEL="flush", NAME="etherd/%k", GROUP="disk", MODE="0220" 

# aoe block devices     
KERNEL="etherd*",       NAME="%k", GROUP="disk" 
  • Hacer que el módulo aoe se cargue durante el booteo. Una de las formas de hacerlo, es agregar la línea modprobe aoe en el archivo /etc/rc.local.

  • Luego, reiniciar host-a y ejecutar aoe-stat. Si todo está bien configurado, debería aparecer algo como:

      e0.0        10.248GB       eth0 1024  up

A partir de aquí, desde host-a se ve el dispositivo exportado mediante AoE por host-b, y este es /dev/etherd/e0.0. Al mismo se lo puede usar como cualquier otro dispositivo de bloques, o sea que se le puede construir un sistema de archivos, o crear particiones, o incluso formar un RAID junto con algún otro dispositivo.



1En realidad, lo que se exporta mediante AoE es cualquier dispositivo de bloques. Esto implica que no tendría que ser un disco entero, sino que podría ser una partición.

2El disco exportado no se puede ver desde un host que no este conectado al mismo switch ethernet, ya que AoE es un protocolo que funciona sobre ethernet y no sobre TCP/IP. Esto implica que los paquetes no son ruteables.