서버 설정 · 9 min read · Feb 02, 2026

CentOS 7에서 Ethernet을 통한 ATA(AoE) 사용하기 (Initiator 및 Target)

이 가이드는 CentOS 7에서 실행되는 AoE 타겟과 AoE 이니시에이터(클라이언트)를 설정하는 방법을 설명합니다. AoE는 “Ethernet을 통한 ATA”를 의미하며, AoE 이니시에이터가 일반 이더넷 케이블을 사용하여 (원격) AoE 타겟의 저장 장치를 사용할 수 있게 해주는 스토리지 영역 네트워크(SAN) 프로토콜입니다. 여기서 “원격”은 “같은 LAN 내”를 의미하며, AoE는 LAN 외부에서 라우팅할 수 없습니다(이는 iSCSI와 비교할 때 주요 차이점입니다). AoE 이니시에이터에게 원격 저장소는 일반적으로 로컬에 연결된 하드 드라이브처럼 보입니다.

1 사전 참고

여기서는 두 대의 CentOS 7 서버를 사용하고 있습니다:

  • server1.example.com (Initiator): IP 주소 192.168.1.100
  • server2.example.com (Target): IP 주소 192.168.1.101

2 추가 리포지토리 활성화

server1/server2:

먼저, 소프트웨어 패키지에 대한 GPG 키를 가져옵니다:

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

그런 다음, 이 튜토리얼에서 설치할 많은 패키지가 공식 CentOS 7 리포지토리에 없기 때문에 CentOS 시스템에서 EPEL 리포지토리를 활성화합니다:

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

/etc/yum.repos.d/epel.repo를 편집합니다…

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

… 그리고 [epel] 섹션에 priority=10을 추가합니다:

[epel]
name=Extra Packages for 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
[...]

그런 다음 시스템의 기존 패키지를 업데이트합니다:

yum -y update

3 두 시스템에서 AoE 커널 모듈 로딩

server1/server2:

시작하기 전에 커널이 AoE를 지원하는지 확인해야 합니다:

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

이것은 다음과 같은 내용을 표시해야 합니다:

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

이는 AoE가 커널 모듈로 빌드되었음을 의미합니다. 모듈이 이미 로드되었는지 확인해 봅시다:

lsmod | grep aoe

아무것도 반환되지 않으면 이는 로드되지 않았음을 의미합니다. 이 경우 다음과 같이 로드할 수 있습니다:

modprobe aoe

모듈이 로드되었는지 다시 확인해 봅시다:

lsmod | grep aoe
[root@server1 ~]# lsmod | grep aoe  
aoe 54175 0  
[root@server1 ~]#

시스템 부팅 시 모듈이 자동으로 로드되도록 하려면 /etc/rc.local에 다음 줄을 추가합니다:

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

4 서버 2에서 서버(타겟) 설정하기

server2:

먼저, 타겟(server2)을 설정합니다:

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

사용하지 않는 논리 볼륨, 이미지 파일, 하드 드라이브(예: /dev/sdb), 하드 드라이브 파티션(예: /dev/sdb1) 또는 RAID 장치(예: /dev/md0)를 저장소로 사용할 수 있습니다.

이 예제에서는 /storage 폴더에 위치한 10GB의 이미지 파일을 사용할 것입니다.

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

이렇게 하면 크기가 10GB인 이미지 파일 /storage/storage1.img가 생성됩니다.

논리 볼륨을 대신 사용하려면 다음과 같이 vg0 볼륨 그룹에 storage1이라는 이름의 10GB 크기의 논리 볼륨을 생성할 수 있습니다:

lvcreate -L10G -n storage1 vg0

이제 다음과 같이 저장소 장치를 내보냅니다:

vbladed 0 1 ens33 /storage/storage1.img

첫 번째 숫자(0)는 선반 번호(주 번호), 두 번째(1)는 슬롯 번호(부 번호)이며, 이 숫자는 원하는 대로 변경할 수 있습니다. 각 AoE 장치는 고유해야 하는 주/부 번호 쌍으로 식별되며, 주 번호는 0-65535 사이, 부 번호는 0-255 사이여야 합니다. ens33 부분은 vbladed에 사용할 이더넷 장치를 알려줍니다. 이더넷 장치에 대한 세부 정보를 보려면 다음을 실행합니다:

ifconfig

타겟을 부팅할 때마다 내보내기를 자동으로 시작하려면 /etc/rc.local을 열고…

nano /etc/rc.local

… 다음 줄을 추가합니다( modprobe aoe 줄 뒤에!):

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

5 서버 1에서 클라이언트(이니시에이터) 설정하기

server1:

server1에서 이니시에이터를 설치합니다. CentOS 7에 사용할 수 있는 패키지는 없지만, CentOS 6의 패키지가 잘 작동하므로 여기서 이를 사용합니다.

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

이제 사용 가능한 AoE 저장 장치를 확인합니다:

aoe-discover

명령어

aoe-stat

이제 저장 장치를 보여야 합니다:

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

이 시점에서 클라이언트 박스에 /dev/etherd/e0.1이라는 새로운 블록 장치가 사용 가능해졌습니다. /dev 트리를 살펴보면 새로운 노드가 나타납니다:

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 ~]#

이 장치를 사용하려면 포맷해야 합니다:

fdisk /dev/etherd/e0.1
[root@server1 ~]# fdisk /dev/etherd/e0.1  
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel  
Building a new DOS disklabel with disk identifier 0xed572fd4.  
Changes will remain in memory only, until you decide to write them.  
After that, of course, the previous content won't be recoverable.  
   
   
The number of cylinders for this disk is set to 2610.  
There is nothing wrong with that, but this is larger than 1024,  
and could in certain setups cause problems with:  
1) software that runs at boot time (e.g., old versions of LILO)  
2) booting and partitioning software from other OSs  
   (e.g., DOS FDISK, OS/2 FDISK)  
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)  
   
Command (m for help): <-- n  
 Command action  
   e   extended  
   p   primary partition (1-4)  
 <-- p  
 Partition number (1-4): <-- 1  
First sector (2048-20479999, default 2048): <-- ENTER  
 Using default value 1  
Last sector, +sectors or +size{K,M,G} (2048-20479999, default 20479999): <-- ENTER  
Using default value 20479999  
Partition 1 of type Linux and of size 9.8 GiB is set  
   
Command (m for help): <-- t  
 Selected partition 1  
Hex code (type L to list codes): <-- L  
   
 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris  
 1  FAT12           24  NEC DOS         81  Minix / old 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 hidden C:  c7  Syrinx  
 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data  
 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .  
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set de  Dell Utility  
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt  
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access  
 a  OS/2 Boot Manag 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  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor  
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor  
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     fb  VMware VMFS  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE  
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto  
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep  
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT  
Hex code (type L to list codes): <-- 83  
   
 Command (m for help): <-- w  
 The partition table has been altered!  
   
Calling ioctl() to re-read partition table.  
Syncing disks.  
[root@server1 ~]#

그 후, /dev/etherd/e0.1p1이라는 새로운 장치가 생성되며, 이는 다음의 출력에서 확인할 수 있습니다:

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 ~]#

이제 /dev/etherd/e0.1p1에 파일 시스템을 생성합니다…

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

… 그리고 테스트 목적으로 마운트합니다:

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

이제 다음의 출력에서 새로운 장치를 확인할 수 있습니다…

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

… 그리고

df -h
[root@server1 ~]# df -h  
Filesystem Size Used Avail Use% Mounted on  
/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 ~]#

다음과 같이 언마운트할 수 있습니다:

umount /mnt

부팅 시 자동으로 장치를 마운트하려면, 예를 들어 /storage 디렉토리에, 해당 디렉토리를 생성합니다…

mkdir /storage

… 그리고 /etc/fstab에 다음 줄을 추가합니다:

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

이것만으로는 부팅 시 장치가 마운트되지 않습니다. AoE 관련 내용이 /etc/fstab이 읽힌 후에 로드되기 때문입니다. 따라서 /etc/rc.local을 열고…

nano /etc/rc.local

… 다음 줄을 추가합니다( modprobe aoe 줄 뒤에!):

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

테스트 목적으로 이제 시스템을 재부팅할 수 있습니다:

reboot

재부팅 후 장치가 마운트되어야 합니다:

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

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.