SAS 스토리지 인터페이스와 SAS·SATA 구성 차이

SAS의 포인트-투-포인트 구조, SSP·STP·SMP 프로토콜, SAS와 SATA 호환성 및 엔터프라이즈 스토리지 구성을 설명합니다.

2026-08-15 · 최초 발행 2026-01-06

병렬 SCSI 이후의 연결 방식

SAS(Serial Attached SCSI)는 병렬 SCSI의 뒤를 잇도록 만들어진 고성능 직렬 스토리지 인터페이스다. SCSI 명령어 세트를 사용하되 장치를 포인트-투-포인트로 연결하며, SATA 디스크와의 호환성도 제공한다.

병렬 SCSI는 Wide SCSI의 68핀 케이블, 12m 케이블 길이 제한, 터미네이터, 클럭 스큐 같은 제약을 안고 있었다. SATA와 PCIe가 직렬 연결 방식으로 전환한 흐름 속에서 SAS도 케이블을 단순화하고 확장성을 높이는 방향을 택했다.

SAS는 이중 포트, 풀 듀플렉스, 경로 중복화, 핫 플러그를 제공한다. 링크 속도는 SAS-1의 3Gb/s (300MB/s), SAS-2의 6Gb/s (600MB/s), SAS-3의 12Gb/s (1200MB/s), SAS-4의 22.5Gb/s (2400MB/s)로 발전했다. 익스팬더를 사용하면 최대 128~256개 장치를 연결할 수 있다.

Dual PortDual PortHBAExpanderSAS Disk 1SAS Disk 2SATA Disk 1SATA Disk 2SecondaryPath

PHY와 포트가 구성하는 전송 경로

SAS 물리 연결에는 SFF-8482, SFF-8087, SFF-8088, SFF-8644 같은 커넥터가 쓰인다. SFF-8482는 데이터와 전원을 함께 다루고, SFF-8087은 내부 Mini-SAS, SFF-8088은 외부 Mini-SAS, SFF-8644는 Mini-SAS HD다.

개별 드라이브 연결에는 듀얼 포트 SAS 드라이브 커넥터인 SFF-8482를, HBA와 백플레인 사이의 멀티레인 내부 연결에는 SFF-8484를 사용할 수 있다. 고밀도 내부 연결에는 4레인 Mini-SAS 4i인 SFF-8087 또는 SAS-3/4 내부 연결용 Mini-SAS HD 4i인 SFF-8643이 쓰인다. SFF-8639는 U.2/U.3와 NVMe/SAS 듀얼 모드에 사용된다. 외부 연결에서는 레거시 4x 연결용 SFF-8470, SAS-2용 Mini-SAS 4x인 SFF-8088, SAS-3/4용 Mini-SAS HD 4x인 SFF-8644를 구성의 세대와 연결 위치에 맞춰 선택한다.

차동 신호를 사용하며, 송신 2개와 수신 2개로 구성된 4개 신호 라인에서 풀 듀플렉스로 동작한다. 케이블 길이는 내부 6~10m, 외부 10m(SAS-3 기준)다. Mini-SAS HD 커넥터인 SFF-8643과 SFF-8644는 SAS-3 이상에서 쓰이며, 더 높은 속도와 신뢰성을 지원한다. 케이블은 패시브 기준 최대 3m이며, 액티브 케이블 또는 광케이블을 사용하면 최대 100m까지 확장할 수 있다.

SAS 프로토콜 스택은 애플리케이션, 전송, 포트, PHY 계층으로 나뉜다.

+------------------------+
| SCSI Application       |
+------------------------+
| SSP / STP / SMP        |  (Transport)
+------------------------+
| SAS Port Layer         |  (Link)
+------------------------+
| SAS PHY Layer          |  (Physical)
+------------------------+

애플리케이션 계층은 SCSI 명령어를 다루고, 전송 계층은 SSP·STP·SMP를 선택한다. 포트 계층은 연결을 관리하며, PHY 계층은 물리 신호 전송을 맡는다. PHY에서는 차동 신호로 노이즈 내성을 확보한다. 링크 초기화와 속도 협상에는 COMINIT, COMSAS, COMWAKE로 구성된 OOB(Out-of-Band) 시퀀스가 사용된다. SAS와 SATA의 OOB 시퀀스가 다르므로 SAS 호스트는 연결된 장치 종류를 식별할 수 있다.

여러 PHY를 하나로 묶는 Wide Port는 대역폭을 늘린다. 4x Wide Port는 PHY 4개로 이뤄지며, SAS-3 4x 구성은 48Gb/s (4800MB/s)다. SAS-4 x4 Wide Port는 90Gbps(18,000 MB/s)의 대역폭을 제공한다.

struct sas_phy {
    uint8_t phy_id;
    uint64_t sas_address;
    enum sas_linkrate linkrate;  // 3Gb/s, 6Gb/s, 12Gb/s
    enum sas_protocol protocol;  // SSP, STP, SMP
    bool attached;
    uint64_t attached_sas_address;
};

// Wide Port
struct sas_port {
    uint8_t num_phys;
    struct sas_phy *phys[4];  // 최대 4x
    uint64_t total_bandwidth;
};

직접 연결과 익스팬더 기반 확장

SAS 도메인에는 명령을 내리는 이니시에이터, 명령을 처리하는 타겟, 연결을 확장하는 익스팬더가 포함된다. 이니시에이터는 HBA나 RAID 컨트롤러이고, 타겟에는 HDD, SSD, 테이프 드라이브가 포함된다.

가장 단순한 SAS 구성은 HBA와 SAS 디스크를 직접 연결하는 방식이다. 성능은 높지만 Single Port이므로 중복화할 수 없다. 연결 경로가 단순해 가장 낮은 지연시간을 제공한다.

[HBA] ---- [SAS Disk]

장치 수를 늘려야 하면 익스팬더를 사용한다. Edge Expander는 장치를 직접 연결하고, Fanout Expander는 다른 익스팬더와 연결한다. 이 구조는 장치 확장과 경로 다중화를 제공하지만 관리 복잡도도 커진다. 적은 수의 호스트 포트로 더 많은 장치를 연결할 수 있으며, 익스팬더를 캐스케이드하면 수백 개 장치까지 확장할 수 있다.

           +--- [Disk 1]
           |
[HBA] --- [Expander] --- [Disk 2]
           |
           +--- [Disk 3]
[HBA] --- [Edge Expander 1] --- [Fanout Expander] --- [Edge Expander 2]
             |                                             |
             +-- [Disk 1-8]                                +-- [Disk 9-16]

듀얼 포트 SAS 장치는 독립된 두 경로에 연결될 수 있다. 한쪽 경로나 컨트롤러에 장애가 발생해도 다른 경로로 데이터에 접근할 수 있으므로, 고가용성 구성에서 특히 중요하다. SATA는 이 기능을 지원하지 않는다.

SAS 도메인은 하나 이상의 HBA와 연결된 장치 집합이다. 도메인 안에서는 주소가 유일해야 하며, 익스팬더로 구성을 확장한다. SAS-2 기준으로 최대 장치 수는 16,256개이며, SAS 도메인은 최대 16,384개 장치를 포함할 수 있다.

// SAS-2 기준
#define MAX_EXPANDERS_PER_DOMAIN  128
#define MAX_PHYS_PER_EXPANDER     256
#define MAX_DEVICES_PER_DOMAIN    (128 * 256)  // 이론적

WWN으로 장치를 식별하는 방식

SAS 주소는 IEEE NAA(Name Address Authority) 형식의 64비트 고유 주소이며 WWN과 동일하다. 다중 경로 관리나 FC와 유사한 Zoning에서 장치를 식별하는 기준이 된다.

struct sas_address {
    uint8_t naa : 4;        // Name Address Authority (5 or 6)
    uint64_t company_id : 24;  // IEEE OUI
    uint64_t vendor_specific : 36;
} __attribute__((packed));

주소는 다음과 같이 해석할 수 있다.

SAS 주소: 0x5000C500A1B2C3D4
NAA: 5 (IEEE Registered)
Company ID: 000C50 (Seagate)
Vendor Specific: 0A1B2C3D4
// WWN 파싱
void parse_sas_address(uint64_t addr) {
    uint8_t naa = (addr >> 60) & 0xF;
    uint32_t company_id = (addr >> 36) & 0xFFFFFF;
    uint64_t vendor_specific = addr & 0xFFFFFFFFFULL;

    printf("NAA: %d\n", naa);
    printf("Company ID: %06X\n", company_id);
    printf("Vendor Specific: %09llX\n", vendor_specific);
}

포트 내부의 PHY는 0~254 범위의 PHY ID로 구분한다. Wide Port에서는 이 번호로 각 PHY를 구성한다.

// Wide Port 4x
struct sas_port port = {
    .num_phys = 4,
    .phys = {
        {.phy_id = 0, .linkrate = SAS_LINKRATE_12GBPS},
        {.phy_id = 1, .linkrate = SAS_LINKRATE_12GBPS},
        {.phy_id = 2, .linkrate = SAS_LINKRATE_12GBPS},
        {.phy_id = 3, .linkrate = SAS_LINKRATE_12GBPS},
    },
    .total_bandwidth = 48000000000ULL,  // 48Gb/s
};

SAS와 SATA를 선택하는 기준

SAS 컨트롤러에는 SATA 디스크를 연결할 수 있지만 SATA 컨트롤러에는 SAS 디스크를 연결할 수 없다. SAS 장치는 SSP로 SCSI 명령을 처리하고, SATA 장치는 STP를 통해 연결한다.

// SAS HBA가 SATA 디스크 처리
if (device->protocol == SAS_PROTOCOL_SATA) {
    // STP (SATA Tunneling Protocol) 사용
    send_stp_frame(device, sata_fis);
} else {
    // SSP (Serial SCSI Protocol) 사용
    send_ssp_frame(device, scsi_command);
}
항목 SAS SATA
최대 속도 22.5Gb/s (SAS-4) 6Gb/s (SATA III)
듀플렉스 Full Duplex Half Duplex
포트 Dual Port Single Port
명령어 큐 256 (NCQ) 32 (NCQ)
MTBF 1.6M hours 1.2M hours

SAS는 이중 포트 기반 경로 중복화, 동시 송수신, 익스팬더 지원, 더 긴 케이블, 높은 신뢰성이 필요한 환경에 맞는다. SATA는 비용, 호환성, 아카이브용 대용량 저장에서 장점이 있다. 데이터센터에서는 성능과 신뢰성이 우선인 위치에 SAS 드라이브를 두고, 용량과 비용이 중요한 위치에는 SATA 드라이브를 배치하는 혼합 구성이 가능하다.

성능신뢰성비용용량디스크선택용도SASSATA서버DB백업아카이브

장치 통신과 관리에 쓰는 프로토콜

SSP(Serial SCSI Protocol)는 SAS 장치와 통신하기 위한 프로토콜이다. SCSI 명령어를 캡슐화하고 풀 듀플렉스 통신을 지원한다.

struct ssp_frame {
    uint8_t frame_type;      // 0x01 (Command)
    uint8_t reserved[3];
    uint64_t initiator_port_tag;
    uint64_t target_port_tag;
    uint16_t tag;
    uint8_t lun[8];
    uint8_t cdb[16];         // SCSI CDB
    // ...
} __attribute__((packed));

STP(SATA Tunneling Protocol)는 SATA 디스크를 SAS 환경에 연결할 때 FIS(Frame Information Structure)를 터널링하는 역할을 한다.

struct stp_frame {
    uint8_t frame_type;      // 0x34 (STP)
    uint8_t reserved[3];
    uint64_t initiator_port_tag;
    uint64_t target_port_tag;
    uint8_t sata_fis[20];    // SATA FIS
    // ...
} __attribute__((packed));

SMP(Serial Management Protocol)는 익스팬더의 토폴로지 디스커버리와 PHY 설정 같은 관리 기능을 담당한다. 장치 검색, 라우팅 테이블 구성, 상태 모니터링, 토폴로지 탐색도 SMP가 처리한다.

enum smp_function {
    SMP_REPORT_GENERAL              = 0x00,
    SMP_REPORT_MANUFACTURER_INFO    = 0x01,
    SMP_DISCOVER                    = 0x10,
    SMP_REPORT_PHY_ERROR_LOG        = 0x11,
    SMP_CONFIGURE_ROUTE_INFO        = 0x90,
};

// DISCOVER 요청
struct smp_discover_req {
    uint8_t frame_type;      // 0x40 (SMP)
    uint8_t function;        // 0x10 (DISCOVER)
    uint8_t reserved[2];
    uint8_t phy_id;
} __attribute__((packed));

// DISCOVER 응답
struct smp_discover_resp {
    uint8_t frame_type;
    uint8_t function;
    uint8_t result;
    uint8_t reserved[5];
    uint8_t phy_id;
    uint8_t attached_device_type;
    uint64_t sas_address;
    uint64_t attached_sas_address;
    // ...
} __attribute__((packed));

세대별 링크 속도와 개선점

SAS-1은 2004년 표준화됐으며, 3Gb/s (300MB/s) 링크 속도와 SSP·STP·SMP를 제공했다. 상대적으로 낮은 속도와 제한적인 익스팬더 기능이 제약이었다.

SAS-2는 2009년 표준화됐고, 링크 속도는 6Gb/s (600MB/s), 최대 장치 수는 16,256개다. Zoning, 전력 관리, 에러 처리가 개선됐다.

SAS-3은 2013년 표준화되었으며 12Gb/s (1200MB/s) 링크 속도를 지원한다. HD Mini-SAS 커넥터, Fast-Write, Multipath 개선, 더 긴 케이블 지원이 포함됐다.

SAS-4는 2017년 표준화됐다. 링크 속도는 22.5Gb/s (2400MB/s)이며, 8b/10b 대신 128b/150b 인코딩을 사용한다. 인코딩 효율 향상, 낮은 레이턴시, NVMe over SAS 지원이 주요 변화다. SAS-1/2의 8b/10b 인코딩은 20% 오버헤드를 만들지만, SAS-3부터는 128b/150b 인코딩으로 바뀌어 오버헤드가 약 17%로 줄었다.

SAS-5는 45Gbps 링크 속도를 목표로 개발 중이다.

버전 속도 인코딩 효율 발표
SAS-1 3Gb/s 8b/10b 80% 2004
SAS-2 6Gb/s 8b/10b 80% 2009
SAS-3 12Gb/s 8b/10b 80% 2013
SAS-4 22.5Gb/s 128b/150b 85% 2017

HBA, 익스팬더, RAID 컨트롤러의 역할

HBA(Host Bus Adapter)는 호스트와 SAS 장치를 연결하고 SCSI 명령어와 다중 경로를 처리한다. Broadcom (LSI), Adaptec (Microchip), Areca가 주요 제조사다.

struct sas_hba {
    uint64_t wwn;
    int num_ports;
    struct sas_port ports[8];

    // 명령어 처리
    int (*queue_command)(struct scsi_cmnd *);

    // 에러 처리
    int (*eh_abort)(struct scsi_cmnd *);
    int (*eh_device_reset)(struct scsi_cmnd *);
};

익스팬더는 장치를 직접 연결하는 Edge Expander와 다른 익스팬더를 연결하는 Fanout Expander로 나뉜다. PHY와 라우팅 테이블을 통해 프레임을 목적지로 전달한다.

struct sas_expander {
    uint64_t sas_address;
    uint8_t vendor_id[8];
    uint8_t product_id[16];

    int num_phys;
    struct sas_phy phys[256];

    // 라우팅 테이블
    struct routing_table {
        uint64_t target_address;
        uint8_t phy_id;
    } routing[1024];
};

// 라우팅
uint8_t route_frame(struct sas_expander *exp, uint64_t target) {
    for (int i = 0; i < 1024; i++) {
        if (exp->routing[i].target_address == target) {
            return exp->routing[i].phy_id;
        }
    }
    return 0xFF;  // Not found
}

RAID 컨트롤러는 HBA와 RAID 엔진, 캐시 메모리, 배터리 백업(BBU)을 통합할 수 있다. 하드웨어 RAID 컨트롤러는 전용 프로세서와 캐시 메모리를 갖춰 호스트 CPU 부담 없이 RAID 연산을 처리한다.

enum raid_level {
    RAID_0,  // 스트라이핑
    RAID_1,  // 미러링
    RAID_5,  // 패리티
    RAID_6,  // 이중 패리티
    RAID_10, // 1+0
    RAID_50, // 5+0
};

struct raid_controller {
    struct sas_hba hba;

    // RAID 엔진
    void *raid_engine;
    size_t cache_size;
    bool bbu_present;

    // 볼륨 관리
    struct raid_volume volumes[64];
};

서버와 스토리지 어레이에서의 구성

데이터베이스 서버에서는 높은 IOPS, 낮은 레이턴시, 신뢰성이 요구된다. 가상화 호스트에서는 다중 VM, 공유 스토리지, 빠른 디스크 I/O를 지원하는 연결 방식으로 사용된다.

All-Flash Array는 SAS SSD와 이중 컨트롤러를 사용할 수 있다. 듀얼 포트 SAS 장치를 각각의 독립된 경로와 컨트롤러에 연결하면, 한쪽 경로나 컨트롤러 장애가 발생해도 다른 경로로 데이터 접근을 유지하는 고가용성 구성을 만들 수 있다.

하이브리드 스토리지는 SAS SSD를 Tier 1, SAS HDD를 Tier 2, SATA HDD를 Tier 3으로 배치한다. 최고 성능이 필요한 티어에는 NVMe를, 성능과 용량의 균형이 필요한 티어에는 SAS SSD를, 대용량 저비용 티어에는 SATA 또는 SAS HDD를 놓는 계층화 전략도 사용할 수 있다. SAS SSD는 오랫동안 엔터프라이즈의 고성능 저장 장치 표준이었으며, NVMe SSD가 최고 성능 티어에서 우위를 점한 환경에서도 두 인터페이스는 서로 다른 요구에 맞춰 공존할 수 있다. SAS 인프라는 SATA 드라이브도 수용할 수 있어 구성 선택지를 넓힌다.

Tier 1Tier 2Tier 3컨트롤러 AExpander컨트롤러 BSAS SSDPoolSAS HDDPoolSATA HDDPoolHot DataWarm DataCold Data

JBOD(Just a Bunch Of Disks)는 익스팬더를 기반으로 다중 경로와 핫 스왑을 제공하는 구성이다. RAID 컨트롤러 없이 드라이브를 서버에 개별 장치로 노출할 수도 있으며, 엔클로저 안의 SAS 익스팬더는 수십 개 드라이브를 하나의 SAS 연결로 제공한다. 이 구성은 소프트웨어 RAID와 분산 스토리지 시스템에서 주로 사용된다.

[Server A] ---+
              |
[Server B] ---+--- [JBOD Enclosure (24 Bay)]
              |       - Edge Expander
              |       - Dual SAS Connectors
[Server C] ---+       - 24x SAS/SATA Disks

속도 외에 SAS가 유지되는 활용 영역

SAS-5는 45Gbps 링크 속도를 목표로 개발 중이며 PCIe 5.0/6.0 기반 NVMe와 경쟁할 예정이다. 다만 SAS의 가치는 링크 속도만으로 판단하기 어렵다. 듀얼 포트, 긴 케이블, 익스팬더 기반 확장성, 검증된 안정성이 필요한 구성에서는 여전히 선택지가 된다.

기존 SAS 인프라가 구축된 데이터센터에서는 점진적 전환의 기반으로 쓰일 수 있다. 듀얼 포트가 필요한 미션 크리티컬 시스템, 대용량 HDD를 연결하는 콜드 스토리지, SAS와 SATA를 함께 활용하는 혼합 워크로드도 SAS가 계속 사용될 전망인 영역이다. 데이터베이스 서버, 가상화 호스트, 스토리지 어레이, JBOD처럼 높은 성능과 신뢰성이 필요한 환경에서도 SAS가 사용된다.

SAS스토리지SCSISATA엔터프라이즈