Red Hat Training

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

부록 A. 장치 매퍼

장치 매퍼는 볼륨 관리를 위한 프레임워크를 제공하는 커널 드라이버입니다. 논리 볼륨으로 사용할 수 있는 매핑된 장치를 생성하는 일반적인 방법을 제공합니다. 볼륨 그룹 또는 메타데이터 형식에 대해 구체적으로는 알 수 없습니다.
장치 매퍼는 여러 상위 수준의 기술을 위한 기반을 제공합니다. LVM 외에도 Device-Mapper 다중 경로 및 dmraid 명령은 장치 매퍼(Device Mapper)를 사용합니다. 장치 매퍼에 대한 애플리케이션 인터페이스는 ioctl 시스템 호출입니다. 사용자 인터페이스는 dmsetup 명령입니다.
LVM 논리 볼륨은 장치 매퍼를 사용하여 활성화됩니다. 각 논리 볼륨은 매핑된 장치로 변환됩니다. 각 세그먼트는 장치를 설명하는 매핑 테이블의 한 행으로 변환됩니다. 장치 매퍼는 선형 매핑, 스트라이핑 매핑 및 오류 매핑을 포함하여 다양한 매핑 대상을 지원합니다. 예를 들어 두 개의 디스크를 하나의 논리 볼륨으로 각 디스크에 하나씩 하나의 선형 매핑 쌍과 연결할 수 있습니다. LVM에서 볼륨을 생성할 때 dmsetup 명령으로 쿼리할 수 있는 기본 장치-매퍼 장치를 생성합니다. 매핑 테이블에 있는 장치 형식에 대한 자세한 내용은 A.1절. “장치 테이블 매핑” 을 참조하십시오. dmsetup 명령을 사용하여 장치를 쿼리하는 방법에 대한 자세한 내용은 A.2절. “dmsetup 명령” 을 참조하십시오.

A.1. 장치 테이블 매핑

매핑된 장치는 지원되는 장치 테이블 매핑을 사용하여 장치의 각 논리 섹터를 매핑하는 방법을 지정하는 테이블에 의해 정의됩니다. 매핑된 장치용 테이블은 양식의 줄 목록으로 구성됩니다.
start length mapping [mapping_parameters...]
장치 매퍼 테이블의 첫 번째 줄에서는 start 매개변수가 0과 같아야 합니다. 한 줄에 있는 start + length 매개변수는 다음 행의 start 과 같아야 합니다. 매핑 테이블의 행에 지정된 매핑 매개변수는 행에 지정된 mapping 유형에 따라 다릅니다.
장치 매퍼의 크기는 항상 섹터(512 바이트)에 지정됩니다.
장치가 장치 매퍼의 매핑 매개변수로 지정되면 파일 시스템의 장치 이름(예: /dev/hda) 또는 major:minor 형식의 주요 및 마이너 번호로 참조할 수 있습니다. major:minor 형식이 경로 이름 조회를 피할 수 없기 때문에 선호됩니다.
다음은 장치의 샘플 매핑 테이블을 보여줍니다. 이 표에는 네 개의 선형 대상이 있습니다.
0 35258368 linear 8:48 65920
35258368 35258368 linear 8:32 65920
70516736 17694720 linear 8:16 17694976
88211456 17694720 linear 8:16 256
각 행의 처음 2 매개변수는 세그먼트 시작 블록과 세그먼트 길이입니다. 다음 키워드는 매핑 대상이며 이 예제의 모든 경우에는 선형 입니다. 행의 나머지 부분은 선형 타겟의 매개 변수로 구성됩니다.
다음 하위 섹션에서는 다음 매핑 형식을 설명합니다.
  • Linear
  • 제거됨
  • mirror
  • snapshot 및 snapshot-origin
  • 오류
  • zero
  • multipath
  • Crypt

A.1.1. linear 매핑 대상

선형 매핑 대상은 블록 범위를 다른 블록 장치에 매핑합니다. 선형 대상의 형식은 다음과 같습니다.
start length linear device offset
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
device
파일 시스템의 장치 이름 또는 major 형식의 메이저 및 부 번호에서 참조하는 블록 장치:minor
offset
디바이스에서 매핑의 오프셋 시작
다음 예는 가상 장치 0에서 시작 블록이 있는 선형 대상을 보여줍니다. 1638400의 세그먼트 길이, 8:2의 주요:미네터 번호 쌍, 41146992 장치에 대한 시작 오프셋입니다.
0 16384000 linear 8:2 41156992
다음 예제에서는 /dev/hda 장치로 지정된 장치 매개 변수가 있는 선형 대상을 보여줍니다.
0 20971520 linear /dev/hda 384

A.1.2. 스트리트 매핑 대상

스트라이핑된 매핑 대상은 물리적 장치를 제거할 수 있도록 지원합니다. 이는 스트라이프 수와 스트립 청크 크기 뒤에 장치 이름과 섹터 쌍의 쌍으로 이루어진 인수로 사용됩니다. 스트라이핑된 대상의 형식은 다음과 같습니다.
start length striped #stripes chunk_size device1 offset1 ... deviceN offsetN
각 스트라이프마다 하나의 deviceoffset 매개변수 세트가 있습니다.
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
#stripes
가상 장치에 대한 스트라이프 수
chunk_size
다음 단계로 전환하기 전에 각 스트라이프에 작성된 섹터 수입니다. 커널 페이지 크기만큼 큰 2의 전원이어야 합니다.
device
파일 시스템의 장치 이름 또는 major:minor 형식의 메이저 및 마이너 번호로 참조하는 블록 장치입니다.
offset
디바이스에서 매핑의 오프셋 시작
다음 예제에서는 3개의 스트라이프와 청크 크기가 128인 스트라이핑된 대상을 보여줍니다.
0 73728 striped 3 128 8:9 384 8:8 384 8:7 9789824
0
가상 장치에서 블록 시작
73728
이 세그먼트의 길이
striped 3 128
청크 크기가 128 블록인 세 개의 장치에 스트라이프
8:9
major:minor 첫 번째 장치의 번호
384
상기 제1 디바이스 상의 매핑의 오프셋 시작 - starting offset of the mapping on the first device
8:8
major:minor 두 번째 장치 번호
384
상기 제2 장치에 대한 매핑의 오프셋 시작 - starting offset of the mapping on the second device
8:7
major:minor 세 번째 장치 번호
9789824
세 번째 장치에서 매핑의 오프셋 시작
다음 예제에서는 주 및 부 숫자가 아닌 파일 시스템의 장치 이름으로 지정된 장치 매개 변수와 함께 256KiB 청크가 있는 2 스트라이프의 스트라이핑된 대상을 보여줍니다.
0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0

A.1.3. 미러 매핑 대상

미러 매핑 대상은 미러링된 논리적 장치의 매핑을 지원합니다. 미러링된 대상의 형식은 다음과 같습니다.
start length mirror log_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
log_type
가능한 로그 유형과 해당 인수는 다음과 같습니다.
코어
미러는 로컬이며 미러 로그는 코어 메모리에 유지됩니다. 이 로그 유형은 1~3개의 인수를 사용합니다.
regionsize [[no]sync] [block_on_error]
disk
미러는 로컬이며 미러 로그는 디스크에 유지됩니다. 이 로그 유형은 2 ~ 4 개의 인수를 사용합니다.
logdevice regionsize [[no]sync] [block_on_error]
clustered_core
미러는 클러스터되며 미러 로그는 코어 메모리에 유지됩니다. 이 로그 유형은 2 ~ 4 개의 인수를 사용합니다.
regionsize UUID [[no]sync] [block_on_error]
clustered_disk
미러가 클러스터링되고 미러 로그가 디스크에 유지됩니다. 이 로그 유형은 3~5개의 인수를 사용합니다.
logdevice regionsize UUID [[no]sync] [block_on_error]
LVM은 미러 또는 미러와 동기화되는 영역을 추적하는 데 사용하는 작은 로그를 유지 관리합니다. regionsize 인수는 이러한 지역의 크기를 지정합니다.
클러스터형 환경에서 UUID 인수는 미러 로그 장치와 연결된 고유 식별자이므로 클러스터 전체에서 로그 상태를 유지할 수 있습니다.
선택적 [no]sync 인수를 사용하여 미러를 "in-sync" 또는 "out-of-sync"로 지정할 수 있습니다. block_on_error 인수는 미러에 오류를 무시하지 않고 오류에 응답하도록 지시하는 데 사용됩니다.
#log_args
매핑에 지정될 로그 인수 수
logargs
미러의 로그 인수입니다. 제공되는 로그 인수 수는 #log-args 매개변수에 의해 지정되고 유효한 로그 인수는 log_type 매개변수에 따라 결정됩니다.
#devs
미러의 다리 수; 장치와 오프셋은 각 다리에 대해 지정됨
device
파일 시스템의 장치 이름 또는 major:minor 형식의 주요 및 마이너 번호로 참조되는 각 미러의 블록 장치입니다. #devs 매개변수에 표시된 대로 각 미러 브릿지에 대해 블록 장치 및 오프셋이 지정됩니다.
offset
장치에서 매핑의 오프셋 시작. #devs 매개변수에 표시된 대로 각 미러 브릿지에 대해 블록 장치 및 오프셋이 지정됩니다.
다음 예제에서는 디스크에 보관된 미러 로그가 있는 클러스터형 미러의 미러 매핑 대상을 보여줍니다.
0 52428800 mirror clustered_disk 4 253:2 1024 UUID block_on_error 3 253:3 0 253:4 0 253:5 0
0
가상 장치에서 블록 시작
52428800
이 세그먼트의 길이
mirror clustered_disk
미러가 클러스터링되고 미러 로그가 디스크에서 유지됨을 지정하는 로그 유형이 있는 미러 대상
4
4 미러 로그 인수가 따릅니다.
253:2
로그 장치의 major:minor 번호
1024
미러 로그에서 동기화 중인 항목을 추적하는 데 사용하는 영역 크기
UUID
클러스터 전체에서 로그 정보를 유지 관리하는 미러 로그 장치의 UUID
block_on_error
mirror는 오류에 응답해야 합니다.
3
미러에 있는 다리 수
253:3 0 253:4 0 253:5 0
장치의 주요:미네티터 번호 및 오프셋

A.1.4. 스냅샷 및 snapshot-origin Mapping Targets

볼륨의 첫 번째 LVM 스냅샷을 생성하면 장치 매퍼 장치 4개가 사용됩니다.
  1. 소스 볼륨의 원래 매핑 테이블을 포함하는 선형 매핑이 있는 장치.
  2. 소스 볼륨에 대해 COW(Copy-On-Write) 장치로 사용되는 선형 매핑이 있는 장치입니다. 각 쓰기의 경우 원본 데이터는 표시되지 않은 콘텐츠를 변경되지 않은 상태로 유지하기 위해 각 스냅샷의 COW 장치에 저장됩니다(COW 장치가 채워지기).
  3. 표시되는 스냅샷 볼륨인 #1과 #2를 결합하는 스냅샷 매핑이 있는 장치입니다.
  4. 원본 소스 볼륨에서 사용하는 "original" 볼륨(원래 소스 볼륨에서 사용하는 장치 번호)이며 장치 #1의 "snapshot-origin" 매핑으로 교체됩니다.
고정 이름 지정 체계는 이러한 장치를 만드는 데 사용됩니다. 예를 들어 다음 명령을 사용하여 base 라는 LVM 볼륨과 해당 볼륨을 기반으로 snap 이라는 스냅샷 볼륨을 생성할 수 있습니다.
# lvcreate -L 1G -n base volumeGroup
# lvcreate -L 100M --snapshot -n snap volumeGroup/base
이렇게 하면 다음 명령으로 볼 수 있는 4개의 장치가 생성됩니다.
# dmsetup table|grep volumeGroup
volumeGroup-base-real: 0 2097152 linear 8:19 384
volumeGroup-snap-cow: 0 204800 linear 8:19 2097536
volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16
volumeGroup-base: 0 2097152 snapshot-origin 254:11

# ls -lL /dev/mapper/volumeGroup-*
brw-------  1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real
brw-------  1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow
brw-------  1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap
brw-------  1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base
snapshot-origin 대상의 형식은 다음과 같습니다.
start length snapshot-origin origin
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
origin
스냅샷의 기본 볼륨
snapshot-origin 에는 일반적으로 이를 기반으로 하나 이상의 스냅샷이 있습니다. 읽기는 백업 장치에 직접 매핑됩니다. 각 쓰기마다 원본 데이터가 COW 장치가 채워질 때까지 볼 수 있는 콘텐츠를 변경하지 않고 유지하기 위해 각 스냅샷의 COW 장치에 저장됩니다.
스냅샷 대상의 형식은 다음과 같습니다.
start length snapshot origin COW-device P|N chunksize
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
origin
스냅샷의 기본 볼륨
COW-device
데이터의 변경된 청크가 저장되는 장치
P|N
P(Persistent) 또는 N(영구 없음) - 재부팅 후 스냅샷이 유지되는지 여부를 나타냅니다. 임시 스냅샷(N)의 경우 메타데이터를 디스크에 저장해야 하며 커널을 통해 메모리에 보관할 수 있습니다.
chunksize
COW 장치에 저장될 데이터의 변경된 청크 크기
다음 예제에서는 254:11의 원본 장치가 있는 snapshot-origin 대상을 보여줍니다.
0 2097152 snapshot-origin 254:11
다음 예제에서는 원본 장치가 254:11이고 COW 장치가 254:12인 스냅샷 대상을 보여줍니다. 이 스냅샷 장치는 재부팅 시 지속되며 COW 장치에 저장된 데이터의 청크 크기는 16개 섹터입니다.
0 2097152 snapshot 254:11 254:12 P 16

A.1.5. 대상 매핑 오류 발생

오류 매핑 대상을 사용하면 매핑된 섹터에 대한 모든 I/O 작업이 실패합니다.
오류 매핑 대상을 테스트하는 데 사용할 수 있습니다. 장치가 실패하는 방식을 테스트하기 위해 장치 중간에서 나쁜 섹터로 장치 매핑을 만들거나 미러의 다리를 교체하고 다리를 오류 대상으로 교체 할 수 있습니다.
오류 대상은 실패한 장치 대신 사용할 수 있습니다. 이는 시간 제한을 방지하고 실제 장치에서 재시도할 수 있습니다. 실패 중에 LVM 메타데이터를 다시 정렬하는 동안 중간 대상으로 사용될 수 있습니다.
오류 매핑 대상에는 startlength 매개변수 외에 추가 매개변수가 필요하지 않습니다.
다음 예제에서는 오류 대상을 보여줍니다.
0 65536 error

A.1.6. 제로 매핑 대상

0 매핑 대상은 /dev/zero 와 동등한 블록 장치입니다. 이 매핑에 대한 읽기 작업은 0 블록을 반환합니다. 이 매핑에 작성된 데이터는 삭제되지만 쓰기는 성공합니다. 제로 매핑 대상은 startlength 매개변수 외에 추가 매개변수가 필요하지 않습니다.
다음 예제에서는 16Tb 장치의 0 대상을 보여줍니다.
0 65536 zero

A.1.7. 다중 경로 매핑 대상

다중 경로 매핑 대상은 다중 경로 장치의 매핑을 지원합니다. 다중 경로 대상의 형식은 다음과 같습니다.
start length  multipath  #features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
각 경로 그룹에 대해 하나의 pathgroupargs 매개변수 세트가 있습니다.
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
#features
다중 경로 기능 수와 해당 기능은 다음과 같습니다. 이 매개변수가 0이면 feature 매개변수가 없고 다음 장치 매핑 매개변수는 #handlerargs 입니다. 현재 multipath.conf 파일의 features 속성인 queue_if_no_path 를 사용하여 설정할 수 있는 기능이 하나 있습니다. 이는 사용 가능한 경로가 없는 경우 이 다중 경로 장치가 현재 대기열 I/O 작업으로 설정되어 있음을 나타냅니다.
다음 예에서 multipath.conf 파일의 no_path_retry 특성은 경로를 사용하기 위해 설정된 일련의 시도 후 모든 경로가 실패로 표시될 때까지만 대기열 I/O 작업으로 설정되어 있습니다. 이 경우 모든 경로 검사기가 지정된 수의 검사에 실패할 때까지 매핑은 다음과 같습니다.
0 71014400 multipath 1 queue_if_no_path 0 2 1 round-robin 0 2 1 66:128 \
1000 65:64 1000 round-robin 0 2 1 8:0 1000 67:192 1000
지정된 수의 검사에 실패한 모든 경로 검사기가 다음과 같이 표시되면 매핑이 다음과 같이 표시됩니다.
0 71014400 multipath 0 0 2 1 round-robin 0 2 1 66:128 1000 65:64 1000 \
round-robin 0 2 1 8:0 1000 67:192 1000
#handlerargs
하드웨어 처리기 인수의 수와 해당 인수입니다. 하드웨어 처리기는 경로 그룹을 전환하거나 I/O 오류를 처리할 때 하드웨어 관련 작업을 수행하는 데 사용할 모듈을 지정합니다. 이 매개변수가 0으로 설정되면 다음 매개변수는 #pathgroups 입니다.
#pathgroups
경로 그룹의 수입니다. 경로 그룹은 다중 경로 장치가 부하를 분산할 경로 집합입니다. 각 경로 그룹에 대해 하나의 pathgroupargs 매개변수 세트가 있습니다.
pathgroup
시도할 다음 경로 그룹입니다.
pathgroupsargs
각 경로 그룹은 다음 인수로 구성됩니다.
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsN 
경로 그룹의 각 경로에는 경로 인수 한 세트가 있습니다.
pathselector
다음 I/O 작업에 사용할 이 경로 그룹의 경로를 결정하는 데 사용되는 알고리즘을 지정합니다.
#selectorargs
다중 경로 매핑에서 이 인수를 따르는 경로 선택기 인수의 수입니다. 현재 이 인수의 값은 항상 0입니다.
#paths
이 경로 그룹의 경로 수입니다.
#pathargs
이 그룹의 각 경로에 지정된 경로 인수의 수입니다. 현재 이 수는 항상 1입니다. ioreqs 인수입니다.
device
major 형식의 메이저 및 마이너 숫자에서 참조하는 경로의 블록 장치 번호입니다.minor
ioreqs
현재 그룹의 다음 경로로 전환하기 전에 이 경로로 라우팅할 I/O 요청 수입니다.
그림 A.1. “다중 경로 매핑 대상” 2개의 경로 그룹이 있는 다중 경로 대상의 형식을 표시합니다.

그림 A.1. 다중 경로 매핑 대상

다중 경로 매핑 대상
다음 예제에서는 동일한 다중 경로 장치에 대한 순수한 장애 조치 대상 정의를 보여줍니다. 이 대상에는 경로 그룹당 하나의 열린 경로만 있는 4개의 경로 그룹이 있으므로 다중 경로 장치는 한 번에 하나의 경로만 사용합니다.
0 71014400 multipath 0 0 4 1 round-robin 0 1 1 66:112 1000 \
round-robin 0 1 1 67:176 1000 round-robin 0 1 1 68:240 1000 \
round-robin 0 1 1 65:48 1000
다음 예제에서는 동일한 다중 경로 장치에 대한 전체 분배(multibus) 대상 정의를 보여줍니다. 이 대상에는 모든 경로가 포함된 경로 그룹이 하나만 있습니다. 이 설정에서 다중 경로는 부하를 모든 경로에 균등하게 분배합니다.
0 71014400 multipath 0 0 1 1 round-robin 0 4 1 66:112 1000 \
 67:176 1000 68:240 1000 65:48 1000
다중 경로에 대한 자세한 내용은 DM Multipath 설명서를 참조하십시오.

A.1.8. 암호 매핑 대상

crypt 대상은 지정된 장치를 통과하는 데이터를 암호화합니다. 커널 Crypto API를 사용합니다.
crypt 대상의 형식은 다음과 같습니다.
start length crypt cipher key IV-offset device offset
start
가상 장치에서 블록 시작
length
이 세그먼트의 길이
cipher
암호는 cipher[-chainmode]-ivmode[:iv options] 으로 구성됩니다.
cipher
사용 가능한 암호는 /proc/crypto (예: aes)에 나열됩니다.
chainmode
항상 cbc 를 사용하십시오. ebc 를 사용하지 마십시오. 초기 벡터(IV)를 사용하지 마십시오.
ivmode[:iv options]
IV는 암호화가 다양하기 위해 사용되는 초기 벡터입니다. IV 모드는 plain 또는 essiv:hash 입니다. ivmode of -plain 은 IV로 섹터 번호(및 IV 오프셋 추가)를 사용합니다. ivmode of -essiv 는 워터마크 취약점을 방지할 수 있는 개선 사항입니다.
key
hex에 제공된 암호화 키
IV-offset
초기 벡터(IV) 오프셋
device
파일 시스템의 장치 이름 또는 major 형식의 메이저 및 부 번호에서 참조하는 블록 장치:minor
offset
디바이스에서 매핑의 오프셋 시작
다음은 crypt 대상의 예입니다.
0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0