Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5장. 스토리지 및 파일 시스템

다음 부분에서는 Red Hat Enterprise Linux 7의 I/O 및 파일 시스템 모두에서 애플리케이션에 영향을 미치는 지원되는 파일 시스템 및 설정 옵션에 대해 설명합니다. 5.1절. “고려 사항”에서는 성능에 영향을 미치는 I/O 및 파일 시스템 관련 요인에 대해 다룹니다. 5.2절. “성능 관련 문제 모니터링 및 진단”에서는 I/O이나 파일 시스템 설정에 관련된 성능 문제를 진단하기 위한 Red Hat Enterprise Linux 7 도구 사용 방법에 대해 설명합니다. 5.3절. “설정 도구 ”에서는 Red Hat Enterprise Linux 7에서 I/O이나 파일 시스템 관련 성능 문제를 해결하는데 사용할 수 있는 도구 및 전략에 대해 설명합니다.

5.1. 고려 사항

스토리지 및 파일 시스템 성능에 적합한 설정은 스토리지 사용 용도에 따라 다릅니다. I/O 및 파일 시스템 성능에 영향을 미치는 요인은 다음과 같습니다:
  • 데이터 쓰기 및 읽기 패턴
  • 기본 지오메트리로 데이터 정렬
  • 블록 크기
  • 파일 시스템 크기
  • 저널 크기 및 위치
  • 액세스 시간 기록
  • 데이터 안정성 확보
  • 미리 읽기 데이터
  • 사전 할당 디스크 공간
  • 파일 조각화
  • 리소스 충돌
다음 부분에서는 파일 시스템 처리량, 확장성, 응답성, 리소스 사용량, 가용성 등에 영향을 미치는 포맷 및 마운트 옵션에 대해 설명합니다.

5.1.1. SSD (Solid-State Disks)

SSD (Solid-State Disks)는 영구적 데이터를 저장하기 위해 자기 플래터를 회전시키는 것이 아니라 NAND 플래시 칩을 사용합니다. 이는 전체 논리 블록 주소 범위에 걸쳐 데이터 액세스 시간을 일정하게 제공하며 액세스 시 발생하는 탐색 시간이 없습니다. 스토리지 공간은 기가 바이트 단위로 보다 높은 비용에 비해 스토리지 용량이 작지만 HDD 보다 지연 시간이 짧아 처리량이 높습니다.
SSD 사용 블록이 디스크 용량에 가까워 질수록 성능이 저하됩니다. 성능 저하 정도는 벤더에 따라 다르지만 모든 장치는 이러한 상황에서 성능 저하가 발생합니다. 삭제 동작을 활성화하여 이러한 성능 저하를 완화시킬 수 있습니다. 보다 자세한 내용은 5.1.4.3절. “유지 관리”에서 참조하십시오.
기본 I/O 스케줄러 및 가상 메모리 옵션은 SSD 사용에 적합합니다.

5.1.2. I/O 스케줄러

I/O 스케줄러는 스토리지 장치에서 I/O 작업 실행 시간 (언제 실행할 지 및 얼마나 오래 실행할 지)을 결정합니다. 이는 또한 I/O 엘리베이터라고도 합니다.
Red Hat Enterprise Linux 7에서는 3 가지 종류의 I/O 스케줄러를 제공합니다.
deadline
SATA 디스크를 제외한 모든 블록 장치의 기본 I/O 스케줄러입니다. Deadline은 요청이 I/O 스케줄러에 도달한 시점에서 요청 대기 시간을 보장합니다. 이러한 스케줄러는 대부분의 사용자에게 적합하지만 특히 쓰기 작업 보다 읽기 작업이 보다 자주 발생하는 환경에 적합합니다.
대기 큐에 있는 I/O 요청은 읽기 또는 쓰기 배치로 나뉘어 LBA 오름 차순으로 실행이 예약됩니다. 애플리케이션은 읽기 I/O에서 블록될 가능성이 높기 때문에 기본적으로 읽기 배치가 쓰기 배치보다 우선합니다. 배치 처리 후 deadline은 쓰기 작업의 프로세서 대기 시간을 확인하고 다음의 읽기 또는 쓰기 배치를 적절히 예약합니다. 배치 당 처리할 요청 수, 쓰기 배치 당 실행할 읽기 배치 수 요청 만료 전 까지의 시간 등은 모두 설정 가능합니다. 보다 자세한 내용은 5.3.4절. “deadline 스케줄러 튜닝 ”에서 확인하십시오.
cfq
SATA 디스크로 식별되는 장치 전용 기본 스케줄러입니다. cfq (Completely Fair Queueing) 스케줄러는 실시간, 최선형, 유휴 상태의 3 가지 다른 클래스로 분리합니다. 실시간 클래스에 있는 프로세스는 항상 최선형 클래스에 있는 프로세스 보다 항상 먼저 처리되고 최선형 클래스에 있는 프로세스는 유휴 상태 클래스에 있는 프로세서 보다 먼저 처리됩니다. 즉 실시간 클래스에 있는 프로세스는 최선형 및 유휴 상태의 프로세서 시간을 제공하지 않을 수 있음을 의미합니다. 기본적으로 프로세스는 최선형 클래스로 지정됩니다.
Cfq는 과거 사용 기록 데이터를 사용하여 애플리케이션에서 발행되는 차후 I/O 요청 수를 예상합니다. 더 많은 I/O가 예상되는 경우 다른 프로세스에서 I/O가 실행을 기다리고 있는 상태에서도 cfq는 유휴 상태가 되어 새로운 I/O를 기다립니다.
cfq 스케줄러는 유휴 상태가 되기 쉽기 때문에 의도적으로 조정하지 않은 경우 대형 탐색 페널티에서 손상을 받지 않는 하드웨어와 함께 사용하지 않도록 합니다. 또한 호스트 기반 하드웨어 RAID 컨트롤러와 같은 기타 다른 비 작업 유지 스케줄러와 함께 사용하지 않습니다. 이러한 스케줄러를 사용하면 대기 시간이 길어질 수 있습니다.
Cfq 동작은 고급 설정 가능합니다. 보다 자세한 내용은 5.3.5절. “cfq 스케줄러 튜닝 ”에서 참조하십시오.
noop
noop I/O 스케줄러는 간단한 FIFO (first-in first-out) 스케줄링 알고리즘을 구현합니다. 요청은 일반 블록 층에서 병합되며 이는 마지막 적중 항목 캐시입니다. 시스템이 CPU에 바인딩되어 있고 스토리지가 빠른 경우 이는 최상의 스케줄러가 됩니다.
다른 기본 I/O 스케줄러 설정 방법 및 특정 장치에 대해 다른 스케줄러를 지정하는 방법은 5.3절. “설정 도구 ”에서 참조하십시오.

5.1.3. 파일 시스템

다음 부분에서는 Red Hat Enterprise Linux 7에서 지원되는 파일 시스템 및 이러한 시스템의 권장 사용 사례, 일반적으로 파일 시스템에서 사용할 수 있는 포맷 및 마운트 옵션에 대해 설명합니다. 파일 시스템 조정을 위한 자세한 권장 사항은 5.3.7절. “성능 개선을 위한 파일 시스템 설정 ”에서 참조하십시오.

5.1.3.1. XFS

XFS는 강력하고 확장성이 뛰어난 64 비트 파일 시스템입니다. 이는 Red Hat Enterprise Linux 7에서 기본 파일 시스템입니다. XFS는 익스텐트 기반 할당을 사용하며 조각화를 줄이고 성능을 지원하는 사전 할당 및 지연 할당 등과 같은 여러 할당 체계를 특징으로 합니다. 또한 캐시 복구를 가능하게 하는 메타데이터 저널링도 지원하고 있습니다. XFS는 마운트되어 활성화되어 있는 동안 조각화를 완료하고 확장할 수 있으며 Red Hat Enterprise Linux 7에서는 여러 XFS 백업 및 복구 유틸리티를 지원하고 있습니다.
Red Hat Enterprise Linux 7.0 GA에서 XFS는 500 TB의 최대 파일 시스템 크기 및 8 EB의 최대 파일 오프셋 (sparse 파일)을 지원합니다. XFS 관리 방법에 대한 보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/Red Hat Enterprise Linux 7 Storage Administration Guide에서 참조하십시오. 특정 용도로 XFS를 조정하는 방법에 대한 자세한 내용은 5.3.7.1절. “XFS 튜닝 ”에서 참조하십시오.

5.1.3.2. Ext4

Ext4는 ext3 파일 시스템의 확장성을 높인 파일 시스템입니다. 기본 동작은 대부분의 작업에 적합합니다. 하지만 50 TB의 최대 파일 시스템 크기와 16 TB의 최대 파일 크기만을 지원합니다. ext4 관리 방법에 대한 보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/Red Hat Enterprise Linux 7 Storage Administration Guide에서 참조하십시오. 특정 용도로 ext4를 조정하는 방법은 5.3.7.2절. “ext4 튜닝 ”에서 참조하십시오.

5.1.3.3. Btrfs (기술 프리뷰)

현재 Red Hat Enterprise Linux 7의 기본 파일 시스템은 XFS이지만 BTRFS 버전도 기술 프리뷰로 제공되고 있습니다. BTRFS는 새로운 copy-on-write 파일 시스템입니다. BTRFS의 고유한 기능은 다음과 같습니다:
  • 전체 파일 시스템이 아닌 특정 파일, 볼륨, 하위 볼륨의 스냅샷 찍기 기능이 있습니다.
  • 저렴한 디스크의 여러 중복 배열 버전(RAID)을 지원합니다.
  • 역참조는 파일 시스템 개체에 I/O 오류를 매핑합니다.
  • 자동 압축 (파티션에 있는 모든 파일은 자동으로 압축됩니다).
  • 데이터 및 메타테이터에서 체크섬.
BTRFS는 안정적인 파일 시스템이지만 새로운 기능이 지속적으로 개발되고 있으며 복구 도구와 같은 일부 기능은 다른 파일 시스템의 완성도에 비해 매우 기본적입니다.
현재 BTRFS는 고급 기능 (스냅샷, 압축 및 파일 데이터 체크섬 등)이 필요하지만 성능은 상대적으로 중요하지 않을 때 적절한 선택입니다. 이러한 기능이 필요하지 않은 경우 시간이 지남에 따라 오류가 발생하거나 성능이 저하될 수 있으므로 파일 시스템으로 적합하지 않습니다. 다른 파일 시스템과 비교할 때 또 다른 단점은 지원되는 최대 파일 시스템 크기가 50 TB라는 것입니다.
Red Hat Enterprise Linux 7에서 btrfs는 기술 프리뷰로 제공됩니다. 기술 프리뷰 기능에 대한 보다 자세한 내용은 https://access.redhat.com/site/support/offerings/techpreview/에서 참조하십시오.

5.1.3.4. GFS2

GFS2는 고가용성 애드온의 일부로 Red Hat Enterprise Linux 7에서 클러스터 파일 시스템을 지원합니다. GFS2는 클러스터의 모든 서버에 걸쳐 일관된 파일 시스템 이미지를 제공하여 서버가 단일 공유 파일 시스템에서 읽기 및 쓰기할 수 있도록 합니다.
GFS2는 250 TB의 최대 파일 시스템 크기를 지원합니다.
GFS2 관리에 대한 보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/Red Hat Enterprise Linux 7 Storage Administration Guide에서 참조하십시오. 특정 용도로 GFS2를 튜닝하는 방법은 5.3.7.4절. “GFS2 튜닝 ”에서 참조하십시오.

5.1.4. 파일 시스템 튜닝 시 일반적으로 고려할 사항

다음 부분에서는 모든 파일 시스템에서 튜닝 시 일반적으로 고려해야 할 사항에 대해 설명합니다. 특정 파일 시스템의 튜닝 관련 권장 사항은 5.3.7절. “성능 개선을 위한 파일 시스템 설정 ”에서 참조하십시오.

5.1.4.1. 시간 형식에서 고려할 사항

장치 포맷 후 일부 파일 시스템 설정 지정을 변경할 수 없습니다. 다음 부분에서는 스토리지 장치 포맷 전 지정해야 할 옵션에 대해 설명합니다.
크기
워크로드에 적합한 크기의 파일 시스템을 만듭니다. 크기가 작은 파일 시스템은 비례적으로 백업 시간이 단축되며 파일 시스템 검사에 걸리는 시간 및 메모리도 작아 집니다. 하지만 파일 시스템이 너무 작으면 조각화로 인해 성능이 저하됩니다.
블록 크기
블록은 파일 시스템의 작업 단위입니다. 블록 크기는 단일 블록에 저장할 수 있는 데이터 양이므로 한 번에 쓰기 또는 읽기할 최소 데이터 양입니다.
기본 블록 크기는 대부분의 사용 경우에 적합합니다. 하지만 블록 크기 (또는 여러 블록 크기)가 한번에 읽기 또는 쓰기 가능한 데이터 양과 동일하거나 약간 큰 경우 파일 시스템 성능이 향상되며 데이터를 보다 효율적으로 저장할 수 있습니다. 파일 크기가 작아도 전체 블록이 사용됩니다. 파일은 여러 블록에 걸쳐 분산될 수 있지만 이는 추가 런타임 오버헤드를 일으킬 수 있습니다. 또한 일부 파일 시스템은 특정 블록 수에 제한되어 파일 시스템의 최대 크기가 제한될 수 있습니다.
mkfs 명령으로 장치를 포맷할 때 블록 크기는 파일 시스템 옵션으로 지정됩니다. 블록 크기를 지정하는 매개 변수는 파일 시스템에 따라 다릅니다. 파일 시스템에 대한 보다 자세한 내용은 mkfs man 페이지에서 참조하십시오. 예를 들어 XFS 파일 시스템 포맷 시 사용할 수 있는 옵션을 확인하려면 다음 명령을 실행합니다.
$ man mkfs.xfs
지오메트리
파일 시스템 지오메트리는 파일 시스템에 데이터를 배분하는 것과 관련되어 있습니다. 시스템이 RAID와 같은 스트라이프 형 스토리지를 사용하는 경우 장치 포맷 시 기본이 되는 스토리지 지오메트리로 데이터 및 메타 데이터를 정렬하여 성능을 개선할 수 있습니다.
대부분의 장치는 장치를 특정 파일 시스템으로 포맷할 때 자동으로 설정되는 권장 지오메트리를 내보냅니다. 장치가 권장 지오메트리를 내보내기하지 않거나 권장 설정을 변경하고자 할 경우 mkfs로 장치를 포맷할 때 수동으로 지오메트리를 지정해야 합니다.
파일 시스템 지오메트리를 지정하는 매개 변수는 파일 시스템에 따라 다릅니다. 자세한 내용은 파일 시스템의 mkfs man 페이지에서 참조하십시오. 예를 들어 ext4 파일 시스템을 포맷할 때 사용 가능한 옵션을 확인하려면 다음 명령을 실행합니다.
$ man mkfs.ext4
외부 저널
파일 시스템 저널링은 쓰기 작업이 실행되기 전 쓰기 작업 동안 저널 파일에서의 변경 사항을 기록합니다. 이는 시스템 충돌이나 정전이 발생한 경우 스토리지 장치의 손상 가능성을 줄이고 복구 프로세스를 속도를 높입니다.
메타데이터 집약적 워크로드에서는 매우 자주 저널에 업데이트됩니다. 저널이 클수록 메모리 사용량이 높아지지만 쓰기 작업의 빈도는 줄어듭니다. 또한 메타데이터 집약적 워크로드가 있는 장치 탐색 시간을 개선하려면 저널을 기본 스포리지보다 더 빠른 전용 스토리지에 배치합니다.

주의

신뢰할 수 있는 외부 저널인지 확인합니다. 외부 저널 장치가 손실되면 파일 시스템이 손상됩니다.
외부 저널은 마운트 시 지정된 저널 장치와 함께 포맷 시 생성해야 합니다. 보다 자세한 내용은 mkfsmount man 페이지에서 참조하십시오.
$ man mkfs
$ man mount

5.1.4.2. 마운트 시 고려할 사항

다음 부분에서는 대부분의 파일 시스템에 적용할 수 있고 장치 마운트 시 지정할 수 있는 튜닝에 대해 설명합니다.
장애
파일 시스템 장애로 인해 파일 시스템 메타데이터가 영구 스토리지에 정확히 기록되어 순서대로 정렬되어 있고 정전 시 fsync로 전송된 데이터가 유지되도록 합니다. 이전 Red Hat Enterprise Linux 버전에서 파일 시스템 장애를 활성화하면 fsync에 크게 의존하는 애플리케이션 속도 또는 생성/삭제된 여러 작은 파일의 속도가 현저히 저하될 수 있습니다.
Red Hat Enterprise Linux 7에서 파일 시스템 장애 성능이 향상되어 파일 시스템 장애 비활성화로 인해 성능에 미치는 영향을 무시할 수 있습니다. (3% 미만)
보다 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/Red Hat Enterprise Linux 7 Storage Administration Guide에서 참조하십시오.
액세스 시간
파일을 읽을 때 마다 메타데이터는 액세스 시간 (atime)을 업데이트합니다. 이에는 추가 쓰기 I/O가 포함됩니다. 기본적으로 Red Hat Enterprise Linux 7은 이전 액세스 시간이 마지막 변경 시간 (mtime) 또는 상태 변경 시간 (ctime) 보다 오래된 경우에만 atime 필드를 업데이트하므로 대부분의 경우 오버헤드가 최소화됩니다.
하지만 메타데이터 업데이트에 시간이 소요되고 정확한 액세스 시간 데이터가 필요하지 않은 경우 noatime 마운트 옵션을 사용하여 파일 시스템을 마운트할 수 있습니다. 이는 파일을 읽을 때 메타데이터로의 업데이트를 비활성화합니다. 또한 nodiratime 동작을 활성화하여 디렉토리를 읽을 때 메타데이터로의 업데이트를 비활성화할 수 있습니다.
미리 읽기
미리 읽기 동작은 곧 필요한 데이터를 먼저 불러와서 페이지 캐시에 로드하여 디스크에서 더 빨리 데이터를 검색할 수 있기 때문에 파일 액세스 속도가 빨라집니다. 미리 읽기 값이 높을 수록 더 많은 데이터를 먼저 가져옵니다.
Red Hat Enterprise Linux는 파일 시스템의 감지 대상에 따라 적절한 미리 읽기 값을 설정하려 합니다. 하지만 항상 정확한 미리 읽기 값을 설정하는 것은 불가능합니다. 예를 들어 스토리지 어레이가 단일 LUN으로 시스템에 표시되면 시스템은 단일 LUN을 감지하고 어레이에 적절한 미리 읽기 값을 설정하지 않습니다.
연속 I/O에 의한 대량의 스트리밍이 필요한 워크로드는 높은 미리 읽기 값을 통해 이점을 얻을 수 있습니다. Red Hat Enterprise Linux 7에서의 스토리지 관련 조정 프로파일은 LVM 스트라이프를 사용하므로 미리 읽기 값이 높게 설정되어 있지만 이러한 조정 값이 모든 워크로드에 항상 충분하지는 않습니다.
미리 읽기 동작을 지정하는 매개 변수는 파일 시스템에 따라 다릅니다. 보다 자세한 내용은 mount man 페이지에서 참조하십시오.
$ man mount

5.1.4.3. 유지 관리

SSD (solid-state disks) 및 신 프로비저닝 스토리지 모두의 파일 시스템에서 사용되고 있지 않은 블록을 정기적으로 삭제할 것을 권장합니다. 사용되지 않는 블록을 삭제하는 데는 일괄 삭제 및 온라인 삭제라는 두 가지 방법이 있습니다.
일괄 삭제
이러한 유형의 삭제는 fstrim 명령의 일부입니다. 이는 관리자가 지정한 기준과 일치하는 파일 시스템에서 사용하지 않는 모든 블록을 삭제합니다.
Red Hat Enterprise Linux 7에서는 물리적 삭제 작업을 지원하는 XFS 및 ext4 포맷 장치에서 일괄 삭제를 지원합니다. (즉, /sys/block/devname/queue/discard_max_bytes 값이 0이 아닌 HDD 장치 및 /sys/block/sda/queue/discard_granularity 값이 0가 아닌 SSD 장치)
온라인 삭제
이러한 유형의 삭제 동작은 마운트 시 discard 옵션을 사용하여 설정되며 사용자 개입없이 실시간으로 실행됩니다. 하지만 온라인 삭제는 사용됨 상태 에서 사용 가능 상태로 전환하고 있는 블록만을 삭제하지 않습니다. Red Hat Enterprise Linux 7에서는 XFS 및 ext4 포맷 장치에서 온라인 삭제를 지원합니다.
Red Hat은 성능 유지를 위해 온라인 삭제를 해야하거나 시스템의 워크로드에 일괄 삭제를 수행할 수 없는 경우를 제외하고 일괄 삭제를 사용할 것을 권장합니다.
사전 할당
사전 할당은 디스크 공간에 데이터를 기입하지 않고 디스크 공간이 파일에 할당되어 있음을 표시합니다. 이는 데이터 조각화 및 읽기 성능 저하를 제한하는 경우 유용합니다. Red Hat Enterprise Linux 7에서는 마운트시 XFS, ext4, GFS2 장치에 사전 할당 공간을 지원합니다. 파일 시스템에 적합한 매개 변수는 mount man 페이지에서 확인하십시오. 애플리케이션은 fallocate(2) glibc 호출을 사용하여 공간을 미리 할당할 수 있습니다.