Configuración AoE · 7 min read · Jan 07, 2026

Configurar ATA sobre Ethernet (AoE) en Debian 8 (Iniciador y Destino)

Este tutorial te muestra cómo configurar un cliente AoE (iniciador) y un servidor (destino) en Debian 8 /Jessie). El término AoE significa “ATA sobre Ethernet”, que es un protocolo de red de área de almacenamiento (SAN) que permite a los clientes AoE utilizar dispositivos de almacenamiento en el servidor AoE (remoto) a través de una red ethernet normal. “Remoto” en este caso significa “dentro de la misma LAN” porque AoE no es enrutable fuera de una LAN (esta es una gran diferencia en comparación con iSCSI). Para el cliente AoE (iniciador), el almacenamiento remoto se ve como un disco duro normal conectado localmente.

1 Nota Preliminar

Estoy usando dos servidores Debian 8 aquí:

  • server1.example.com (Iniciador): dirección IP 192.168.1.100
  • server2.example.com (Destino): dirección IP 192.168.1.101

2 Cargar el Módulo del Núcleo de AoE en ambos sistemas

server1/server2:

Como primer paso, debemos asegurarnos de que el núcleo en nuestros servidores soporte ATA sobre Ethernet. Ejecuta el siguiente comando como usuario root.

grep ATA_OVER /boot/config-`uname -r`

Esto debería mostrar algo como esto:

root@server1:/tmp# grep ATA_OVER /boot/config-`uname -r`  
CONFIG_ATA_OVER_ETH=m  
root@server1:/tmp#

Esto significa que AoE fue construido como un módulo del núcleo. Ahora verificaremos si el módulo está cargado:

lsmod | grep aoe

Si no obtienes nada, esto significa que no está cargado. En este caso, podemos cargarlo de la siguiente manera:

modprobe aoe

Verifiquemos nuevamente si el módulo está cargado:

lsmod | grep aoe
root@server1:/tmp# lsmod | grep aoe  
aoe 51917 0  
root@server1:/tmp#

Para que el módulo se cargue automáticamente cuando el sistema arranca, agregamos el módulo aoe a /etc/modules:

nano /etc/modules
# /etc/modules: módulos del núcleo a cargar en el arranque.
#
# Este archivo contiene los nombres de los módulos del núcleo que deben ser cargados
# en el arranque, uno por línea. Las líneas que comienzan con "#" son ignoradas.
# Los parámetros pueden ser especificados después del nombre del módulo.

aoe

3 Configurando el Destino (server2)

server2:

Primero, configuramos el destino AoE (server2):

apt-get install vblade

Podemos usar volúmenes lógicos no utilizados, archivos de imagen, discos duros (por ejemplo, /dev/sdb), particiones de disco duro (por ejemplo, /dev/sdb1) o dispositivos RAID (por ejemplo, /dev/md0) para el almacenamiento. En este ejemplo, usaré un archivo de imagen de 20GB que se almacena en la carpeta /storage.

mkdir /storage  
dd if=/dev/zero of=/storage/storage1.img bs=1024k count=20000

Esto crea el archivo de imagen /storage/storage1.img con un tamaño de 20GB.

Si deseas usar un volumen lógico en su lugar, puedes crear uno con un tamaño de 20GB llamado storage1 en el grupo de volúmenes vg0 de la siguiente manera:

lvcreate -L20G -n storage1 vg0

Ahora exportamos nuestro dispositivo de almacenamiento de la siguiente manera:

vbladed 0 1 eth0 /storage/storage1.img

El primer número (0) es el número de estante (mayor), el segundo (1) es el número de ranura (menor), cambia estos números a tu gusto. Cada dispositivo AoE se identifica por un par mayor/menor que debe ser único (si estás exportando múltiples dispositivos), con mayor entre 0-65535 y menor entre 0-255. La parte eth0 le dice a vbladed qué dispositivo ethernet usar (si tu dispositivo ethernet es eth1, entonces usa eth1 - puedes averiguar sobre tus dispositivos ethernet ejecutando

ifconfig

).

Para iniciar la exportación automáticamente cada vez que inicies el destino, abre /etc/rc.local…

nano /etc/rc.local

… y agrega la siguiente línea a él (antes de la línea exit 0):

[...]  
/usr/sbin/vbladed 0 1 eth0 /storage/storage1.img  
[...]  

4 Configurando el Cliente AoE / Iniciador (server1)

server1:

En server1, instalamos el iniciador:

apt-get install aoetools

Ahora verificamos qué dispositivos de almacenamiento AoE están disponibles:

aoe-discover

No te preocupes, el comando no mostrará ninguna salida. El comando:

aoe-stat

ahora debería mostrar los dispositivos de almacenamiento:

root@server1:/tmp# aoe-stat  
e0.1 20.971GB eth0 1024 up  
root@server1:/tmp#

En este punto, tenemos un nuevo dispositivo de bloque disponible en la caja del cliente llamado /dev/etherd/e0.1. Si miramos el árbol /dev, aparece un nuevo nodo:

ls -la /dev/etherd/
root@server1:/tmp# ls -la /dev/etherd/  
total 0  
drwxr-xr-x 2 root root 160 Mar 22 08:46 .  
drwxr-xr-x 19 root root 3160 Mar 22 08:34 ..  
c-w--w---- 1 root disk 152, 3 Mar 22 08:34 discover  
brw-rw---- 1 root disk 152, 0 Mar 22 08:46 e0.1  
cr--r----- 1 root disk 152, 2 Mar 22 08:34 err  
c-w--w---- 1 root disk 152, 6 Mar 22 08:34 flush  
c-w--w---- 1 root disk 152, 4 Mar 22 08:34 interfaces  
c-w--w---- 1 root disk 152, 5 Mar 22 08:34 revalidate  
root@server1:/tmp#

Para usar ese dispositivo /dev/etherd/e0.1, debemos formatearlo:

fdisk /dev/etherd/e0.1
root@server1:/tmp# fdisk /dev/etherd/e0.1
Bienvenido a fdisk (util-linux 2.25.2).  
Los cambios permanecerán en memoria solo hasta que decidas escribirlos.  
Ten cuidado antes de usar el comando de escritura.
El dispositivo no contiene una tabla de particiones reconocida.  
Se creó una nueva etiqueta de disco DOS con el identificador de disco 0x2922f0be.
Comando (m para ayuda): <-- n  
Tipo de partición  
p primaria (0 primaria, 0 extendida, 4 libres)  
e extendida (contenedor para particiones lógicas)  
Seleccionar (predeterminado p): <-- p  
Número de partición (1-4, predeterminado 1): <-- 1  
Primer sector (2048-40959999, predeterminado 2048): <-- ENTER  
Último sector, +sectores o +tamaño{K,M,G,T,P} (2048-40959999, predeterminado 40959999): <-- ENTER
Se creó una nueva partición 1 de tipo 'Linux' y de tamaño 19.5 GiB.
Comando (m para ayuda): <-- w
La tabla de particiones ha sido alterada.  
Llamando a ioctl() para volver a leer la tabla de particiones.  
Sincronizando discos.

Ahora creamos un sistema de archivos en /dev/etherd/e0.1p1…

mkfs.ext4 /dev/etherd/e0.1p1
root@server1:/tmp# mkfs.ext4 /dev/etherd/e0.1p1  
mke2fs 1.42.12 (29-Aug-2014)  
Creando sistema de archivos con 5119744 bloques de 4k y 1281120 inodos  
UUID del sistema de archivos: 2342cd83-bd45-4975-96c0-b0f366b73778  
Copias de seguridad del superbloque almacenadas en bloques:  
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,  
 4096000
Asignando tablas de grupo: hecho  
Escribiendo tablas de inodos: hecho  
Creando diario (32768 bloques): hecho  
Escribiendo superbloques e información de contabilidad del sistema de archivos: hecho

… y lo montamos para fines de prueba:

mount /dev/etherd/e0.1p1 /mnt

Ahora deberías ver el nuevo dispositivo en las salidas de…

mount
root@server1:/tmp# mount  
sysfs en /sys tipo sysfs (rw,nosuid,nodev,noexec,relatime)  
proc en /proc tipo proc (rw,nosuid,nodev,noexec,relatime)  
udev en /dev tipo devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)  
devpts en /dev/pts tipo devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs en /run tipo tmpfs (rw,nosuid,relatime,size=204220k,mode=755)  
/dev/sda1 en / tipo ext4 (rw,relatime,errors=remount-ro,data=ordered)  
securityfs en /sys/kernel/security tipo securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs en /dev/shm tipo tmpfs (rw,nosuid,nodev)  
tmpfs en /run/lock tipo tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs en /sys/fs/cgroup tipo tmpfs (ro,nosuid,nodev,noexec,mode=755)  
cgroup en /sys/fs/cgroup/systemd tipo cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore en /sys/fs/pstore tipo pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup en /sys/fs/cgroup/cpuset tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
cgroup en /sys/fs/cgroup/cpu,cpuacct tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)  
cgroup en /sys/fs/cgroup/devices tipo cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup en /sys/fs/cgroup/freezer tipo cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup en /sys/fs/cgroup/net_cls,net_prio tipo cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)  
cgroup en /sys/fs/cgroup/blkio tipo cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup en /sys/fs/cgroup/perf_event tipo cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
systemd-1 en /proc/sys/fs/binfmt_misc tipo autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
mqueue en /dev/mqueue tipo mqueue (rw,relatime)  
debugfs en /sys/kernel/debug tipo debugfs (rw,relatime)  
hugetlbfs en /dev/hugepages tipo hugetlbfs (rw,relatime)  
rpc_pipefs en /run/rpc_pipefs tipo rpc_pipefs (rw,relatime)  
/dev/etherd/e0.1p1 en /mnt tipo ext4 (rw,relatime,data=ordered)  
root@server1:/tmp#

… y

df -h
root@server1:/tmp# df -h  
Sistema de archivos Tamaño Usado Disponible Uso% Montado en  
/dev/sda1 57G 1.1G 54G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
/dev/etherd/e0.1p1 20G 44M 19G 1% /mnt  
root@server1:/tmp#

Puedes desmontarlo así:

umount /mnt

Para que el dispositivo se monte automáticamente al arrancar, por ejemplo, en el directorio /storage, creamos ese directorio…

mkdir /storage

… y agregamos la siguiente línea a /etc/fstab:

nano /etc/fstab
[...]  
/dev/etherd/e0.1p1       /storage        ext4    defaults,auto,_netdev 0 0

Esto solo no es suficiente para que el dispositivo se monte al arrancar porque las cosas de AoE se cargan después de que se lee /etc/fstab. Por lo tanto, abrimos /etc/rc.local…

nano /etc/rc.local

… y agregamos las siguientes líneas a él (antes de la línea exit 0):

[...]  
aoe-discover  
sleep 5  
mount -a  
[...]  

Para fines de prueba, ahora puedes reiniciar el sistema:

reboot

Después del reinicio, el dispositivo debería estar montado:

mount
root@server1:/tmp# mount  
[...snip...]  
/dev/etherd/e0.1p1 en /storage tipo ext4 (rw,relatime,data=ordered)  
[...snip...]
df -h
root@server1:/tmp# df -h  
Sistema de archivos Tamaño Usado Disponible Uso% Montado en  
/dev/sda1 57G 1.1G 54G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
/dev/etherd/e0.1p1 20G 44M 19G 1% /storage

Ahora podemos hacer una prueba de escritura en la partición montada:

touch /storage/test.txt

La verificación con el comando ls si el archivo ha sido escrito:

ls -la /storage
root@server1:/tmp# ls -la /storage  
total 24  
drwxr-xr-x 3 root root 4096 Mar 22 09:06 .  
drwxr-xr-x 23 root root 4096 Mar 22 09:05 ..  
drwx------ 2 root root 16384 Mar 22 09:00 lost+found  
-rw-r--r-- 1 root root 0 Mar 22 09:06 test.txt  
root@server1:/tmp#

El archivo test.txt ha sido escrito exitosamente en el volumen que montamos desde server2.

5 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.