CentOS, AoE · 10 min read · Feb 02, 2026

Uso de ATA sobre Ethernet (AoE) en CentOS 7 (Iniciador y Destino)

Esta guía explica cómo puedes configurar un destino AoE y un iniciador AoE (cliente), ambos ejecutando CentOS 7. AoE significa “ATA sobre Ethernet” y es un protocolo de red de área de almacenamiento (SAN) que permite a los iniciadores AoE utilizar dispositivos de almacenamiento en el destino AoE (remoto) utilizando cableado 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 iniciador AoE, el almacenamiento remoto se ve como un disco duro normal conectado localmente.

1 Nota Preliminar

Estoy usando dos servidores CentOS 7 aquí:

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

2 Habilitar Repositorios Adicionales

server1/server2:

Primero, importamos las claves GPG para los paquetes de software:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Luego habilitamos el repositorio EPEL en nuestro sistema CentOS ya que muchos de los paquetes que vamos a instalar en el transcurso de este tutorial no están disponibles en el repositorio oficial de CentOS 7:

yum -y install epel-release
yum -y install yum-priorities

Edita /etc/yum.repos.d/epel.repo…

nano /etc/yum.repos.d/epel.repo

… y agrega la línea priority=10 a la sección [epel]:

[epel]
name=Paquetes Extra para Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Luego actualizamos nuestros paquetes existentes en el sistema:

yum -y update

3 Cargando el Módulo del Kernel AoE en Ambos Sistemas

server1/server2:

Antes de comenzar, debemos asegurarnos de que el kernel soporte AoE:

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

Esto debería mostrar algo como esto:

[root@server1 ~]# grep ATA_OVER /boot/config-`uname -r`  
CONFIG_ATA_OVER_ETH=m  
[root@server1 ~]#

Esto significa que AoE fue construido como un módulo del kernel. Verifiquemos si el módulo ya 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 ~]# lsmod | grep aoe  
aoe 54175 0  
[root@server1 ~]#

Para que el módulo se cargue automáticamente cuando el sistema arranque, agregamos la siguiente línea a /etc/rc.local:

nano /etc/rc.local
[...]  
modprobe aoe  
[...]  

4 Configurando el Servidor (Destino) en el Servidor 2

server2:

Primero, configuramos el destino (server2):

rpm -i http://download.opensuse.org/repositories/home:/cyberorg:/ltsp/CentOS_7/x86_64/vblade-22-3.1.x86_64.rpm

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 10GB que se encuentra en la carpeta de almacenamiento /storage.

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

Esto creará un archivo de imagen /storage/storage1.img con un tamaño de 10GB.

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

lvcreate -L10G -n storage1 vg0

Ahora exportamos nuestro dispositivo de almacenamiento de la siguiente manera:

vbladed 0 1 ens33 /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 ens33 le dice a vbladed qué dispositivo ethernet usar, puedes encontrar los detalles sobre tus dispositivos ethernet ejecutando

ifconfig

).

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

nano /etc/rc.local

… y agrega la siguiente línea a él (¡después de la línea modprobe aoe!):

[...]  
vbladed 0 1 ens33 /storage/storage1.img  
[...]  

5 Configurando el Cliente (Iniciador) en el Servidor 1

server1:

En server1, instalamos el iniciador. No hay un paquete disponible para CentOS 7, pero el de CentOS 6 funciona bien, así que lo usaremos aquí.

rpm -i http://download.opensuse.org/repositories/system:/aoetools/CentOS_CentOS-6/x86_64/aoetools-36-1.2.x86_64.rpm

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

aoe-discover

El comando

aoe-stat

ahora debería mostrar los dispositivos de almacenamiento:

[root@server1 ~]# aoe-stat  
e0.1 10.485GB ens33 1024 up  
[root@server1 ~]#

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 ~]# ls -la /dev/etherd/  
total 0  
drwxr-xr-x. 2 root root 160 Jun 30 14:49 .  
drwxr-xr-x. 21 root root 3240 Jun 30 14:32 ..  
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover  
brw-rw----. 1 root disk 152, 0 Jun 30 14:49 e0.1  
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err  
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush  
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces  
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate  
[root@server1 ~]#

Para usar ese dispositivo, debemos formatearlo:

fdisk /dev/etherd/e0.1
[root@server1 ~]# fdisk /dev/etherd/e0.1  
El dispositivo contiene ni una tabla de particiones DOS válida, ni una etiqueta de disco Sun, SGI o OSF  
Construyendo una nueva etiqueta de disco DOS con el identificador de disco 0xed572fd4.  
Los cambios permanecerán en memoria solo hasta que decidas escribirlos.  
Después de eso, por supuesto, el contenido anterior no será recuperable.  
   
   
El número de cilindros para este disco se establece en 2610.  
No hay nada de malo en eso, pero esto es más grande que 1024,  
y podría en ciertas configuraciones causar problemas con:  
1) software que se ejecuta en el tiempo de arranque (por ejemplo, versiones antiguas de LILO)  
2) software de arranque y particionamiento de otros sistemas operativos  
   (por ejemplo, DOS FDISK, OS/2 FDISK)  
Advertencia: bandera inválida 0x0000 de la tabla de particiones 4 será corregida por w(escribir)  
   
Comando (m para ayuda): <-- n  
 Acción del comando  
   e   extendido  
   p   partición primaria (1-4)  
 <-- p  
 Número de partición (1-4): <-- 1  
Primer sector (2048-20479999, valor predeterminado 2048): <-- ENTER  
 Usando el valor predeterminado 1  
Último sector, +sectores o +tamaño{K,M,G} (2048-20479999, valor predeterminado 20479999): <-- ENTER  
Usando el valor predeterminado 20479999  
La partición 1 de tipo Linux y de tamaño 9.8 GiB está configurada  
   
Comando (m para ayuda): <-- t  
 Partición seleccionada 1  
Código hexadecimal (tipo L para listar códigos): <-- L  
   
 0  Vacío           1e  Oculto W95 FAT1 80  Viejo Minix       bf  Solaris  
 1  FAT12           24  NEC DOS         81  Minix / viejo Lin c1  DRDOS/sec (FAT-  
 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-  
 3  XENIX usr       3c  PartitionMagic  83  Linux           c6  DRDOS/sec (FAT-  
 4  FAT16 <32M      40  Venix 80286     84  OS/2 oculto C:  c7  Syrinx  
 5  Extendida       41  PPC PReP Boot   85  Linux extendido  da  Datos no FS  
 6  FAT16           42  SFS             86  NTFS conjunto de volumen db  CP/M / CTOS / .  
 7  HPFS/NTFS       4d  QNX4.x         87  NTFS conjunto de volumen de  de  Dell Utility  
 8  AIX             4e  QNX4.x 2da parte 88  Linux texto plano df  BootIt  
 9  AIX arrancable   4f  QNX4.x 3ra parte 8e  Linux LVM       e1  acceso DOS  
 a  OS/2 Gestor de Arranque 50  OnTrack DM      93  Amoeba          e3  DOS R/O  
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor  
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs  
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  GPT  
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/  
10  OPUS            55  EZ-Drive       a6  OpenBSD         f0  Linux/PA-RISC b  
11  FAT12 Oculto    56  Golden Bow     a7  NeXTSTEP        f1  SpeedStor  
12  Diagnóstico Compaq 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor  
14  FAT16 Oculto <3 61  SpeedStor       a9  NetBSD          f2  DOS secundario  
16  FAT16 Oculto    63  GNU HURD o Sys ab  Arranque de Darwin  fb  VMware VMFS  
17  HPFS/NTF Oculto 64  Novell Netware  b7  BSDI fs        fc  VMware VMKCORE  
18  AST SmartSleep  65  Novell Netware  b8  swap BSDI       fd  Linux raid auto  
1b  FAT3 Oculto W95 70  DiskSecure Mult bb  Boot Wizard oculto fe  LANstep  
1c  FAT3 Oculto W95 75  PC/IX           be  arranque Solaris  ff  BBT  
Código hexadecimal (tipo L para listar códigos): <-- 83  
   
 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.  
[root@server1 ~]#

Después, hay un nuevo dispositivo /dev/etherd/e0.1p1 que puedes ver en la salida de

ls -l /dev/etherd/
[root@server1 ~]# ls -l /dev/etherd/  
total 0  
c-w--w----. 1 root disk 152, 3 Jun 30 14:32 discover  
brw-rw----. 1 root disk 152, 0 Jun 30 14:54 e0.1  
brw-rw----. 1 root disk 152, 1 Jun 30 14:54 e0.1p1  
cr--r-----. 1 root disk 152, 2 Jun 30 14:32 err  
c-w--w----. 1 root disk 152, 6 Jun 30 14:32 flush  
c-w--w----. 1 root disk 152, 4 Jun 30 14:32 interfaces  
c-w--w----. 1 root disk 152, 5 Jun 30 14:32 revalidate  
[root@server1 ~]#

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

mkfs.ext4 /dev/etherd/e0.1p1

… 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 ~]# mount  
sysfs en /sys tipo sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)  
proc en /proc tipo proc (rw,nosuid,nodev,noexec,relatime)  
devtmpfs en /dev tipo devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)  
securityfs en /sys/kernel/security tipo securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs en /dev/shm tipo tmpfs (rw,nosuid,nodev,seclabel)  
devpts en /dev/pts tipo devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)  
tmpfs en /run tipo tmpfs (rw,nosuid,nodev,seclabel,mode=755)  
tmpfs en /sys/fs/cgroup tipo tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)  
cgroup en /sys/fs/cgroup/systemd tipo cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore en /sys/fs/pstore tipo pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup en /sys/fs/cgroup/cpu,cpuacct tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)  
cgroup en /sys/fs/cgroup/memory tipo cgroup (rw,nosuid,nodev,noexec,relatime,memory)  
cgroup en /sys/fs/cgroup/devices tipo cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup en /sys/fs/cgroup/hugetlb tipo cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)  
cgroup en /sys/fs/cgroup/net_cls tipo cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)  
cgroup en /sys/fs/cgroup/freezer tipo cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup en /sys/fs/cgroup/perf_event tipo cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
cgroup en /sys/fs/cgroup/blkio tipo cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup en /sys/fs/cgroup/cpuset tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
configfs en /sys/kernel/config tipo configfs (rw,relatime)  
/dev/mapper/centos-root en / tipo xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
selinuxfs en /sys/fs/selinux tipo selinuxfs (rw,relatime)  
systemd-1 en /proc/sys/fs/binfmt_misc tipo autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
debugfs en /sys/kernel/debug tipo debugfs (rw,relatime)  
mqueue en /dev/mqueue tipo mqueue (rw,relatime,seclabel)  
hugetlbfs en /dev/hugepages tipo hugetlbfs (rw,relatime,seclabel)  
/dev/sda1 en /boot tipo xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
tmpfs en /run/user/0 tipo tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)  
/dev/etherd/e0.1p1 en /mnt tipo ext4 (rw,relatime,seclabel,data=ordered)  
[root@server1 ~]#

… y

df -h
[root@server1 ~]# df -h  
Sistema de archivos Tamaño Usado Disponible Uso% Montado en  
/dev/mapper/centos-root 28G 1.3G 27G 5% /  
devtmpfs 909M 0 909M 0% /dev  
tmpfs 919M 0 919M 0% /dev/shm  
tmpfs 919M 8.6M 910M 1% /run  
tmpfs 919M 0 919M 0% /sys/fs/cgroup  
/dev/sda1 497M 192M 306M 39% /boot  
tmpfs 184M 0 184M 0% /run/user/0  
/dev/etherd/e0.1p1 9.5G 37M 9.0G 1% /mnt  
[root@server1 ~]#

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 (¡después de la línea modprobe aoe!):

[...]  
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 ~]# mount  
sysfs en /sys tipo sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)  
proc en /proc tipo proc (rw,nosuid,nodev,noexec,relatime)  
devtmpfs en /dev tipo devtmpfs (rw,nosuid,seclabel,size=930336k,nr_inodes=232584,mode=755)  
securityfs en /sys/kernel/security tipo securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs en /dev/shm tipo tmpfs (rw,nosuid,nodev,seclabel)  
devpts en /dev/pts tipo devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)  
tmpfs en /run tipo tmpfs (rw,nosuid,nodev,seclabel,mode=755)  
tmpfs en /sys/fs/cgroup tipo tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)  
cgroup en /sys/fs/cgroup/systemd tipo cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore en /sys/fs/pstore tipo pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup en /sys/fs/cgroup/cpu,cpuacct tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)  
cgroup en /sys/fs/cgroup/memory tipo cgroup (rw,nosuid,nodev,noexec,relatime,memory)  
cgroup en /sys/fs/cgroup/devices tipo cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup en /sys/fs/cgroup/hugetlb tipo cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)  
cgroup en /sys/fs/cgroup/net_cls tipo cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)  
cgroup en /sys/fs/cgroup/freezer tipo cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup en /sys/fs/cgroup/perf_event tipo cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
cgroup en /sys/fs/cgroup/blkio tipo cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup en /sys/fs/cgroup/cpuset tipo cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
configfs en /sys/kernel/config tipo configfs (rw,relatime)  
/dev/mapper/centos-root en / tipo xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
selinuxfs en /sys/fs/selinux tipo selinuxfs (rw,relatime)  
systemd-1 en /proc/sys/fs/binfmt_misc tipo autofs (rw,relatime,fd=30,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
debugfs en /sys/kernel/debug tipo debugfs (rw,relatime)  
mqueue en /dev/mqueue tipo mqueue (rw,nosuid,seclabel)  
hugetlbfs en /dev/hugepages tipo hugetlbfs (rw,nosuid,seclabel)  
/dev/sda1 en /boot tipo xfs (rw,relatime,seclabel,attr2,inode64,noquota)  
tmpfs en /run/user/0 tipo tmpfs (rw,nosuid,nodev,relatime,seclabel,size=188060k,mode=700)  
/dev/etherd/e0.1p1 en /mnt tipo ext4 (rw,relatime,seclabel,data=ordered)  
[root@server1 ~]#
df -h
[root@server1 ~]# df -h  
Sistema de archivos Tamaño Usado Disponible Uso% Montado en  
/dev/mapper/centos-root 28G 1.3G 27G 5% /  
devtmpfs 909M 0 909M 0% /dev  
tmpfs 919M 0 919M 0% /dev/shm  
tmpfs 919M 8.6M 910M 1% /run  
tmpfs 919M 0 919M 0% /sys/fs/cgroup  
/dev/sda1 497M 192M 306M 39% /boot  
tmpfs 184M 0 184M 0% /run/user/0  
/dev/etherd/e0.1p1 9.5G 37M 9.0G 1% /mnt  
[root@server1 ~]#

6 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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