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 aoeSi no obtienes nada, esto significa que no está cargado. En este caso, podemos cargarlo de la siguiente manera:
modprobe aoeVerifiquemos nuevamente si el módulo está cargado:
lsmod | grep aoeroot@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.
aoe3 Configurando el Destino (server2)
server2:
Primero, configuramos el destino AoE (server2):
apt-get install vbladePodemos 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=20000Esto 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 vg0Ahora exportamos nuestro dispositivo de almacenamiento de la siguiente manera:
vbladed 0 1 eth0 /storage/storage1.imgEl 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 aoetoolsAhora verificamos qué dispositivos de almacenamiento AoE están disponibles:
aoe-discoverNo te preocupes, el comando no mostrará ninguna salida. El comando:
aoe-statahora 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.1root@server1:/tmp# fdisk /dev/etherd/e0.1Bienvenido 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): <-- ENTERSe creó una nueva partición 1 de tipo 'Linux' y de tamaño 19.5 GiB.Comando (m para ayuda): <-- wLa 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.1p1root@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,
4096000Asignando 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 /mntAhora deberías ver el nuevo dispositivo en las salidas de…
mountroot@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 -hroot@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 /mntPara 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 0Esto 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:
rebootDespués del reinicio, el dispositivo debería estar montado:
mountroot@server1:/tmp# mount
[...snip...]
/dev/etherd/e0.1p1 en /storage tipo ext4 (rw,relatime,data=ordered)
[...snip...]df -hroot@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% /storageAhora podemos hacer una prueba de escritura en la partición montada:
touch /storage/test.txtLa verificación con el comando ls si el archivo ha sido escrito:
ls -la /storageroot@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
- Definición del Protocolo AoE: http://www.coraid.com/RESOURCES/AoE-Protocol-Definition
- Debian: http://www.debian.org/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.