Linux는 수 만가지 내용이 있고, 그 성능은 엄청나게 다양한 사용 모델을 유연하게 지원하는 기능에 달려있다. 하지만 Linux의 가장 중요한 강점 중 하나가 스토리지 도메인의 원동력으로 역할을 담당하고 있다. Linux 및 스토리지에 대해 고려하는 것은 일반적으로 직접 연결된 디스크의 이미지 또는 최신 파일 시스템을 그려내지만, 눈에 보이는 것보다 스토리지와 Linux에 훨씬 많은 내용이 있다. Linux에서 요소는 안정적일 뿐만 아니라 최첨단이다.
이 기사는 Linux가 스토리지 분야의 핵심적인 위치를 차지하도록 하는 다양한 스토리지 기술을 탐색한다. 처음부터 시작하자—즉, 스토리지 아키텍처— 그 다음에 기능, 파일 시스템 및 미래로 스택을 쌓아가자(그림 1 참조).
그림 1. 이 기사에서 탐색하기 위한 스토리지 스택
스토리지가 플랫폼에 연결되는 방법은 전체 스토리지 아키텍처로의 핵심이다. 다음 세 가지 일반적인 아키텍처는 광대한 주요 모델을 다룬다.
- 직접 접속된 스토리지(DAS)
- 스토리지 영역 네트워크(SAN)
- 네트워크 접속된 스토리지(NAS)
물론, Linux는 세 가지 모두 지원하고 이러한 모델로 나타나는 변경을 통해 진화했다.
그림 2는 파일 시스템과 스토리지의 위치에 초점을 맞춘 모델을 시연한다. DAS 모델은 플랫폼으로 스토리지의 직접 접속을 다루고 스토리지 사용의 방대한 다수를 표현한다. SAN은 스토리지를 플랫폼과 구별하고, 많은 블록 스토리지 프로토콜 중 하나에 대해 액세스 가능하게 된다. 마지막으로 NAS는 SAN과 유사한 아키텍처를 제공하지만 파일 레벨로 운영한다.
그림 2. 주요 스토리지 아키텍처
Linux는 광범위한 DAS 인터페이스를 지원하며, 이는 병렬 Advanced Technology Attachment(ATA)—Integrated Drive Electronics[IDE]/ATA—병렬 SCSI와 같은 오래된 표준을 비롯한 파이버 채널 뿐만 아니라 직렬 접속된 SCSI(SAS), 직렬 ATA(SATA) 및 외부 SATA(eSATA)와 같은 새 스토리지 인터페이스 등이 있다. USB3(Extensible Host Controller Interface[xHCI]) 및 Firewire(Institute of Electrical and Electronics Engineers 1394) 등의 고급 스토리지 기술도 발견할 것이다.
SAN은 블록 레벨 스토리지의 통합을 제공하므로 이는 수많은 서버들 사이에 공유될 수 있다. 스토리지는 이들 서버에 대한 로컬로 나타나며, 여기에서 엔드포인트 스토리지 디바이스는 클라이언트 디바이스(백업 및 복제 등)에 대한 추가 서비스를 구현할 수 있다.
SAN용 프로토콜 및 인터페이스는 폭넓고 다양하다. 파이버 채널과 IP에 대한 해당 확장(iFCP) 등의 Linux에서 일반적인 SAN 프로토콜을 찾을 수 있다. SAS, Fibre Channel over Ethernet(FCoE) 및 Internet SCSI(iSCSI) 등의 상대적으로 새로운 프로토콜도 존재하며, 원격 직접 메모리 액세스용 iSCSI Extensions(RDMA—iSER)와 SCSI RDMA Protocol(SRP)과 같은 더 도메인 특화된 프로토콜이 있으며, 이는 Infiniband용 RDMA에 대한 SCSI를 확장한다.
스토리지 프로토콜로서 이더넷의 출현은 이러한 접근방식의 성능과 유연성을 시연하면서 Linux에서 완전히 현실화되었다. 게다가 10기가비트 이더넷(10GbE)은 Linux에서 완전히 지원되어, 고성능 SAN을 구성하도록 허용한다. ATA over Ethernet(ATAoE)과 같은 프로토콜을 찾을 수도 있으며, 이는 산재하는 이더넷 프로토콜에 대해 ATA 프로토콜을 확장한다.
NAS가 마지막이지만 중요하지 않은 것은 아니다. NAS는 파일 레벨에서 이기종 클라이언트가 액세스하기 위해 네트워크에 대한 스토리지의 통합이다. 가장 대중적인 두 가지 프로토콜은 Linux에서 완전히 지원되며, 이는 Network File System(NFS) 및 Server Message Block/Common Internet File System(SMB/CIFS)이다.
비록 원본 SMB 구현 방식이 독점적이지만, 이는 Linux에서 지원되기 위해 역설계(reverse-engineered)되었다. 나중에 SMB 개정은 Linux에서 더 간편한 개발을 허용하기 위해 공개적으로 문서화되었다.
Linux는 NFS로 작성된 다양한 향상판과 확장으로 계속 진화했다. NFS는 이제 stateful 프로토콜이며 데이터와 메타데이터 분리 뿐만 아니라 데이터 액세스 병렬처리를 위한 최적화를 포함한다. 독자는 참고자료에서 링크를 사용하여 NFS의 진화에 대해 자세히 읽을 수 있다. 이더넷 기반 SAN을 통해, Linux에서 10GbE 지원은 고성능 NAS 저장소를 사용한다.
모든 스토리지 아키텍처가 DAS, SAN 및 NAS 버킷에서 완벽하게 맞는 것은 아니다. Linux가 개방형 운영체제이기 때문에, 그 내부에서 새 기술을 개발하기에 간편하게 되었으며, 이로 인해 독자는 Linux에서 최신의 첨단 기술을 찾을 수 있다.
하나의 흥미로운 스토리지 아키텍처는 새롭지는 않지만 언급할 가치가 있으며 이는 오브젝트 스토리지 아키텍처이다. 오브젝트 스토리지 아키텍처는 파일을 메타데이터로 나누고 이를 독립적으로 저장한다(해당하는 데이터 및 메타데이터 서버에서). 이러한 분리는 메타데이터 병목을 최소화하는 등 특정 장점을 제공한다(왜냐하면 이러한 서버와의 상호작용은 파일을 찾고 여는 데 유일하게 필요하기 때문이다). 성능은 병렬 액세스를 위해 여러 데이터 서버에 대해 데이터를 스트라이핑하여 개선될 수도 있다. 오브젝트 스토리지는 Object Storage Device(OSD) 스펙에 대한 지원을 비롯하여 Linux 내에서 뿐만 아니라 Linux clUSTER(Lustre) 및 Extended Object File System(exofs) 내에서 다양한 방법으로 구현된다.
이름과 주소를 식별하기 위해 데이터의 해시를 사용하는 컨텐츠 해결 가능 스토리지(CAS)라는 유사한 기술이 존재한다. 이 기술은 중복 데이터를 식별하기에 간편하기 때문에 고정된 컨텐츠 스토리지(FCS)라고도 하며 장점이 있다. 즉, 해시(충분히 강력한 경우)는 동일할 것이며 간단한 중복 취소를 허용할 것이다. Venti 아키텍처는 이러한 접근방식을 지원하고 Linux 내에 존재한다(Bell Labs의 Plan 9 분배 외에도).
스토리지 가상화는 고급 스토리지 시스템에 유일한 기능이었지만, 이제 Linux의 표준 기능이다. Linux에서 사용 가능한 가장 중요한 서비스 중 하나는 Logical Volume Manager(LVM)이다. LVM은 기본 스토리지 아키텍처에서 사용 가능한 실제 스토리지 위에 존재하는 씬 계층이고(사용자 공간 도구를 수반하여) 관리하기에 더 간편한 하나 이상의 논리적 볼륨으로 이를 추상화한다. 예를 들어, 실제 디스크가 크기 조정될 수 없는 반면 논리적 볼륨은 이로부터 공간을 추가하거나 제거하기 위해 크기 조정될 수 있다.
실제 디바이스를 논리적 디바이스로 추상화하는 기능을 통해 LVM은 볼륨의 읽기 전용 및 쓰기 전용 스냅샷, 성능을 위해 볼륨에 걸쳐 데이터 스트라이핑(독립적 디스크 [RAID]-0의 중복 어레이), 볼륨에 걸쳐 데이터 미러링(RAID-1) 및 실제 디바이스 사이에 볼륨의 마이그레이션(온라인 도중에도) 등의 수많은 다른 스토리지 기능을 작성한다.
미러링을 넘어서 데이터 보호를 위해 Linux는
md(여러 디스크의 약어)를 포함하고
RAID 기능의 풍부한 세트를 제공한다. 이 요소는 소프트웨어
RAID 기능을 구현하여 RAID-4(패리티 블록으로 스트라이프된 데이터), RAID-5(분산된 패리티
블록으로 스트라이프된 데이터), RAID-6(분산된 이중 중복 패리티 블록으로 스트라이프된 데이터)
및 RAID-10(스트라이프되고 미러링된 데이터)을 지원한다.
LVM은 디바이스 맵퍼라는 다른 스토리지 컴포넌트에 의존하고, 다중 경로하는 기능(다른 어느 기능 보다도)을 제공한다. 예를 들어, SAN 환경에서 SAN 패브릭으로 일반적으로 여러 스토리지 인터페이스가 있다. 다중 경로하는 것은 주어진 경로의 실패에 대비해 보호하는 기능으로 경로가 엔드포인트와 통신하기 위해 존재하는 한, 스토리지가 사용 가능한 상태로 유지되도록 보장한다.
지난 몇 년간 다음 두 가지의 상대적으로 간단한 기능들이 스토리지 에코시스템의 진화를 다루는 스토리지 스택에 추가되었다.
- 데이터 무결성
- 솔리드 스테이트 디스크(SSD)의 지원
첫 번째 변경은 엔터프라이즈 스토리지 설정에서 일상 드라이브의 사용을 다룬다. 비록 엔터프라이즈급 드라이브(예를 들어, SAS 드라이브)가 신뢰 가능하다고 하더라도, SATA 드라이브는 다른 요구사항을 통해 주요 요인으로서 비용을 들여 제작되었다. 이러한 이유로 SATA 드라이브는 자동 데이터 손상으로 알려진 문제점으로 고통받을 수 있다. 여기에서 오류는 데이터가 디스크에서 읽힐 때 도입될 수 있고 발견될 수 없다. 엔터프라이즈 설정에서 이러한 문제점을 해결하고 SATA 드라이브를 지원하기 위해 데이터 무결성 코드가 디스크의 블록에 추가되었다(여기에서 디스크는 기존의 512바이트 블록이 아니라 520바이트 섹터를 사용한다). 이외에도 드라이브 자체는 쓰여지는 데이터를 유효성 검증할 수 있으므로 무결성 코드는 데이터와 일치한다. 이러한 방식으로 오류에 대해 나중에 아무 작업도 할 수 없을 때에 오류를 발견하는 것이 아니라 디스크에 쓰여지는 대로 오류가 포착될 수 있다.
이 메커니즘은 그림 3과 같이 데이터 무결성 필드(DIF)라고 하며, 데이터의 블록에 대해 주기적 중복 확인(CRC), 참조 태그(일반적으로 논리적 블록 처리[LBA]의 부분) 및 애플리케이션이 정의한 애플리케이션 태그를 포함하는 8바이트 트레일러를 표현한다. 참조 태그는 잘못된 블록으로 데이터의 쓰기 실수를 포착하기 위해 유용하며, 여기에서 애플리케이션 태그는 소프트웨어 스택에서 다른 오류를 포착하기 위해 사용될 수 있다. 예를 들어, PDF 문서가 쓰여지면, 애플리케이션 태그는 특수 PDF 태그를 표시하는 값으로 설정될 수 있다. PDF를 읽을 때, 각 블록의 애플리케이션 태그는 PDF 태그를 모두 지정하는 것을 보장하기 위해 조사될 수 있다. DIF는 Linux 내에서 커널 버전 2.6.27 이후로 지원된다.
그림 3. 512바이트 섹터용 DIF 구조
SSD의 도입은 스토리지 에코시스템을 다양한 방식으로 변화시키고 있다. 이러한 디스크는 디스크가 돌아가면서 나타나는 대규모 지연을 어느 정도 제거하므로 데이터가 CPU로 들어가고 나가는 흐름을 유지보수하는 방법을 제공한다. 하지만 SSD는 소모품이라는 면에서 하드 디스크 드라이브(HDD)와 다르다. SSD 내의 스토리지는 유한한 횟수(기술에 따라 다름)로 쓰여질 수 있다. 그러므로 데이터를 쓸 때에 가능한 효율적이 되는 것이 중요하다. 설상가상으로 SSD는 가비지 콜렉션 또는 웨어 레벨링(wear-leveling)이라는 프로세스에서 오류의 도입을 최소화하기 위해 데이터를 내부적으로 이동해야 한다. 이 프로세스로 인해 소모품 스토리지로 쓰기가 나타나게 되므로 최소화되어야 한다.
SSD 및 기존 스토리지의 또 다른 문제점은 HDD가 디스크에서 데이터가 올바른지 여부를 고려하지 않았다는 것이다. 파일 시스템이 데이터를 무효화하지 않으면 데이터는 어떠한 악영향도 나타나지 않고 디스크에 남아있을 수 있다. 이 제한조건은 웨어 레벨링 요구사항으로 인해 SSD에 나타나지 않는다. 이러한 이유로 Linux는 이제 파일 시스템의 기능을 지원하여 버려진 블록을 SSD에 통신한다(커널 버전 2.6.29 이후로). 이 기능을 통해 SSD는 웨어 레벨링 프로세스에서 이러한 블록을 제거하고 드라이브의 내구성을 증가하는 데 도움을 준다.
Linux가 다른 운영 체제들 중에서 돋보이는 점은 파일 시스템의 방대한 라이브러리이다. Linux에서 세 번째 확장된 파일 시스템(ext3) 및 네 번째 확장된 파일 시스템(ext4)과 같은 기존의 클라이언트 파일 시스템을 찾을 수 있지만, 분산 파일 시스템, 클러스터 파일 시스템 및 병렬 파일 시스템 분야에서 최첨단을 확인할 수도 있다. 또한 새로운 생각과 스토리지 도메인 분야에서 새로운 문제점을 처리하는 것과 관련된 새로운 최첨단 파일 시스템을 찾을 수 있다.
오늘날 최첨단 파일 시스템의 측면에서 Linux는 ZFS와 Butter FS(BTRFS) 둘 다 지원한다. 이러한 두 가지 파일 시스템은 서로 경쟁하고 복사 즉시 쓰기(copy-on-write) 시맨틱의 구별을 공유한다(블록은 절대 고정되어 쓰일 수 없음). 게다가 두 가지 파일 시스템 모두 데이터 중복 제거, 내부 데이터 보호(RAID형 보호), 데이터 및 메타데이터 체크섬 및 다른 스토리지 기능(스냅샷 등)을 지원한다.
Linux는 많은 분산 파일 시스템의 원천이기도 하다. 하나의 예제는 Lustre이며, 이는 수많은 노드와 규모를 스토리지 용량의 페타바이트로 지원하는 엄청나게 병렬 분산된 파일 시스템이다. Ceph는 유사한 기능을 제공하며, 과거에 Linux 커널로 도입되었다. Linux에서 다른 예제는 GlusterFS 및 General Parallel File System(GPFS)을 포함한다.
Linux에서 전문화된 파일 시스템을 찾을 수도 있다. 이는 New Implementation Log Structure File System(NiLFS(2))과 같은 로그 구조로 된 파일 시스템 및 exofs와 같은 오브젝트 기반 파일 시스템이 포함된다. Linux가 많은 사용 모델에서 발견되기 때문에, 자원 제한적인 사용을 위한 파일 시스템(예를 들어, 임베드된 시스템) 뿐만 아니라 고성능 컴퓨팅(HPC)과 같은 낮은 지연 애플리케이션을 발견하게 될 것이다. 임베드된 영역에서 파일 시스템은 Yet Another Flash File System 버전 2(YAFFS2), Journaling Flash File System 버전 2(JFFS2) 및 Unsorted Block Image File System(UBIFS)을 포함한다. HPC 공간에서 파일 시스템은 Parallel NFS(pNFS), Lustre 및 GPFS를 포함한다.
Linux는 Linux의 오픈 성향과 개발자의 대규모 커뮤니티로 인해 지금도 그렇고 앞으로도 계속 파일 시스템 및 일반 스토리지 조사의 대상이 될 것이다.
스토리지에서 가장 최신 변화 중 하나는 아카이브 데이터의 비용 효율적인 스토리지를 위한 원격 서비스의 사용이다. 오늘날 클라우드 스토리지로 알려진 수많은 공급업체들은 다양한 서비스 레벨 계약(보호 및 광대역과 같은 기능을 다룸)을 통해 중앙 집중식의 원격 스토리지로 효율적이고 투명한 액세스를 제공한다. 두 개의 예제는 Ubuntu One 및 Dropbox이다. 또 다른 서비스는 SpiderOak라고 하며, 로컬 사용자 디렉토리를 클라우드로 적은 비용을 들여 백업하는 데 사용될 수 있다.
Linux의 영역에서 나타날 수 있는 또 다른 기능은 무엇인가? 아마 대규모 섹터 크기의 지원(512바이트 섹터를 넘어 이동), 예약되었지만 사용되지 않은 용량(광고된 스토리지가 실제 용량을 초과하는 경우)을 방지하기 위한 씬 프로비저닝, 스토리지 중복 제거(스토리지 가용성을 최대화하기 위해) 그리고 SSD와 같이 드라이브의 새로운 속도와 효율성을 활용하기 위한 훨씬 더 효율적인 스토리지 스택이 될 것이다. 스토리지 에코시스템 진화 분야에서 무엇이 나타나든지 간에, Linux가 최초가 될 것이다.
교육
- IBM Storage Networking과
Demystifying Storage Networking: DAS, SAN, NAS, NAS Gateway, Fibre
Channel, and iSCSI에서 스토리지 아키텍처의 차이점에 대해 자세히 학습하자.
- NFS는 Linux로 계속 진화하고
이제 더 높은 수준의 크기 조정 및 성능을 위해 pNFS라는 NFS의 병렬 양식을 지원한다. 독자는
Linux에서 NFS의 진화에 대한 Tim의 기사인
네트워크 파일 시스템과 Linux(developerWorks,
2010년 11월)에서 자세히 학습할 수 있다.
- 이 기사는 LVM을 플랫폼에서 스토리지를 가상화하는 수단으로
참조했다. 독자는
LVM2 자원 페이지에서 LVM2(LVM의 두 번째 개정)에 대해 자세히 학습할 수 있다. LVM2는
디바이스 맵퍼를 사용하며, 이는 Device-mapper 자원
페이지에서 찾을 수 있다. 이 페이지는 또한 다중 경로 운영을 위해 사용자 공간 도구를
소개한다.
- T10 DIF는 스토리지 시스템 내에서 엔드투엔드 보호를
제공한다. 독자는 원본 T10 제안인
T10/03-224r0 내에서 DIF 트레일러 및 그 타당한 이유에
대해 자세히 학습할 수 있다.
- Tim의 다른 기사들에서 이 기사에 언급된 일부 파일 시스템에 대해
자세히 학습할 수 있다.
- Linux에서 ZFS 실행(developerWorks, 2011년 1월)
- 차세대 Linux 파일 시스템인 NiLFS(2) 및 exofs (developerWorks, 2009년 10월)
- Ceph: 페타바이트 규모의 Linux 분산 파일 시스템(developerWorks, 2010년 5월)
- ext4 분석(developerWorks, 2009년 2월)
- Linux kernel advances(developerWorks, 2009년 3월)
- Linux VFS(Virtual File System Switch) 해부(developerWorks, 2009년 8월)
- 리눅스 플래시 파일 시스템 분석(developerWorks, 2008년 5월)
- 분산 복제된 블록 디바이스(DRBD)는 서버 쌍에 대해 볼륨을
보호하는 간단한 방법을 제공한다.
이는 하나의 실제 볼륨으로 작업하고 기존의 TCP/IP 네트워크에 걸쳐 피어 호스트로 복제한다.
DRBD(Distributed Replicated Block Device)를 통한 고가용성
(developerWorks, 2010년 8월)에서 DRBD에 대해 자세히 학습할 수 있다.
- CAS 시스템은 중복 제거의 단순성을 고려하면 데이터를
저장하는 효율적인 수단을 제공한다. CAS의 흥미로운 애플리케이션 중 하나는
가상화 환경의 컨텍스트이며, 이는 중복 데이터가 일반적이다. Experiences with Content Addressable Storage and Virtual Disks
(Anthony Liguori 및 Eric Van Hensbergen 공저)를 자세히 읽어보자.
- Linux는 Enhanced
Host Controller Interface(EHCI) 뿐만 아니라 더 새로운 xHCI
(고속 USB 3.0
디바이스용)에 대한 지원을 제공한다.
- Linux는
SCSI,
IDE/Enhanced IDE (EIDE)/ATA,
SAS,
SATA,
Fibre Channel,
및 기타 등등의 다양한 디스크 접속 표준을 지원한다.
- 이 기사는
GPFS를 비롯하여 수많은 파일 시스템을 언급했으며, 이는
고성능 클러스터형 파일 시스템 및 광범위하게 병렬 분산 파일 시스템인
Lustre이다. 파일 시스템의 측면에서
Linux는 선택 가능한 운영 체제이다.
-
SSD는
HDD의 기계적 내부를 NAND 플래시와 같은 솔리드 스테이트 메모리로 바꾼다. SSD는 기존
디스크 돌리기 보다 낮은 성능 요구사항으로 고급 성능을 제공한다. 오늘날 엔터프라이즈 및
소비자 장치에서 SSD를 찾을 수 있다.
-
developerWorks Linux 존에서는
수백 개의 기술자료 목록과 함께, Linux 개발자와 관리자를 위한
다양한 다운로드, 토론 포럼 및 다른 참고자료를 찾을 수 있다.
-
developerWorks 기술 행사 및 웹 캐스트를 통해 다양한 IBM 제품 및 IT 산업 주제에 대한 최신 정보를 얻을 수 있다.
-
무료 developerWorks Live!
briefing을 통해 최신 IBM 제품 및 도구에 대한 정보뿐만 아니라 IT 업계의 최신 경향까지도 빠르게 확인할 수 있다.
-
developerWorks on-demand demos에서는 입문자를 위한 제품 설치 및 설정부터 숙련된 개발자를 위한 고급 기능까지 망라된 다양한 데모를 제공한다.
-
Twitter의 developerWorks를 팔로우(follow)하거나
developerWorks에 대한 Linux 트윗(tweet)의 피드를 구독하자.
제품 및 기술 얻기
-
자신에게 가장한 적합한 방법으로 IBM
제품을 평가해 보자. 시험판 제품을 다운로드하거나, 온라인으로 제품을 사용해 보거나, 클라우드 환경에서 제품을 사용하거나,
SOA Sandbox에서
SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
-
developerWorks community에 참여한다.
개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.
M. Tim Jones는 임베디드 펌웨어 아키텍트이자 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(2판이 나왔다), AI Application Programming(2판이 나왔다), BSD Sockets Programming from a Multilanguage Perspective의 저자이기도 하다. Jones의 공학 배경은 정지 위성을 위한 커널 개발에서 시작해 임베디드 시스템 아키텍처와 네트워크 프로토콜 개발에 이르기까지 다양한 분야를 아우른다. Jones는 콜로라도 주, 롱몬트 소재 Emulex 사에서 컨설턴트 엔지니어로 활약한다.