2.4. VDO 쓰기 모드 선택
기본 블록 장치에 필요한 내용에 따라 VDO 볼륨에 대한 쓰기 모드를 구성할 수 있습니다. 기본적으로 VDO는 쓰기 모드를 자동으로 선택합니다.
2.4.1. VDO 쓰기 모드
VDO는 다음과 같은 쓰기 모드를 지원합니다.
sync
VDO가
동기화
모드인 경우 위의 계층에서는 쓰기 명령이 영구 스토리지에 데이터를 쓰는 것으로 가정합니다. 따라서 파일 시스템 또는 애플리케이션에서 FLUSH를 발행하거나 장치 액세스(FUA) 요청을 강제 실행하여 데이터가 중요한 시점에 지속되도록 할 필요가 없습니다.기본 스토리지를 통해 쓰기 명령이 완료되면 영구 스토리지에 데이터가 기록되도록 보장하는 경우에만 VDO를
동기화
모드로 설정해야 합니다. 즉, 스토리지에 휘발성 쓰기 캐시가 없거나 캐시를 통한 쓰기가 있어야 합니다.async
VDO가
비동기
모드인 경우 쓰기 명령이 승인될 때 VDO는 데이터가 영구 스토리지에 기록되도록 보장하지 않습니다. 파일 시스템 또는 애플리케이션은 각 트랜잭션의 중요한 시점에서 데이터 지속성을 보장하기 위해 FLUSH 또는 FujiA 요청을 발행해야 합니다.기본 스토리지에서 쓰기 명령이 완료되면 데이터가 영구 스토리지에 기록되도록 보장하지 않는 경우 VDO를
async
모드로 설정해야 합니다. 즉 스토리지에 휘발성 쓰기 캐시가 있는 경우 VDO를 설정해야 합니다.async-unsafe
이 모드에는
async
와 동일한 속성이 있지만 Atomicity, Consistency, Isolation, Durability(ACID)와 호환되지 않습니다.비동기
와 비교할 때비동기-비보안은
더 나은 성능을 제공합니다.주의ACID 준수를 가정하는 애플리케이션 또는 파일 시스템이 VDO 볼륨 위에서 작동하는 경우
async-unsafe
모드에서는 예기치 않은 데이터 손실이 발생할 수 있습니다.auto
-
자동
모드에서는 각 장치의 특성에 따라동기화
또는비동기
를 자동으로 선택합니다. 기본 옵션입니다.
2.4.2. VDO 쓰기 모드의 내부 처리
VDO의 쓰기 모드는 동기화
및 async
입니다. 다음 정보는 이러한 모드의 작업에 대해 설명합니다.
kvdo
모듈이 동기(synch
) 모드에서 작동하는 경우:
- 할당된 블록에 요청에 데이터를 임시로 쓴 다음, 요청을 승인합니다.
- 승인이 완료되면 VDO 인덱스로 전송되는 블록 데이터의 MurmurHash-3 서명을 컴퓨팅하여 블록을 삭제하려고 합니다.
-
VDO 인덱스에 동일한 서명이 있는 블록에 대한 항목이 포함된 경우
kvdo
는 표시된 블록을 읽고 두 블록의 바이트 단위 비교를 수행하여 동일한지 확인합니다. -
실제로 동일한 경우
kvdo
는 논리 블록이 해당 물리적 블록을 가리키고 할당된 실제 블록을 해제하도록 블록 맵을 업데이트합니다. -
VDO 색인에 작성 중인 블록의 서명에 대한 항목이 없거나 표시된 블록에 실제로 동일한 데이터가 포함되어 있지 않은 경우
kvdo
는 해당 블록 맵을 업데이트하여 임시 물리적 블록을 영구적으로 만듭니다.
kvdo
가 비동기(async
) 모드에서 작동하는 경우:
- 데이터를 작성하지 않고 즉시 요청을 승인합니다.
- 그러면 위에 설명된 것과 동일한 방식으로 블록의 중복 제거를 시도합니다.
-
블록이 중복된 것으로 판단되면
kvdo
는 해당 블록 맵을 업데이트하고 할당된 블록을 해제합니다. 그렇지 않으면 요청의 데이터를 할당된 블록에 쓰고 블록 맵을 업데이트하여 실제 블록을 영구적으로 만듭니다.
2.4.3. VDO 볼륨에서 쓰기 모드 확인
이 절차에서는 선택한 VDO 볼륨의 활성 쓰기 모드를 나열합니다.
절차
다음 명령을 사용하여 VDO 볼륨에서 사용하는 쓰기 모드를 확인합니다.
# vdo status --name=my-vdo
출력 목록은 다음과 같습니다.
-
sync
,async
또는auto
에서 선택한 옵션인 구성된 쓰기 정책 -
동기화
또는비동기
인 VDO가 적용된 특정 쓰기 모드인 쓰기 정책
-
2.4.4. 휘발성 캐시 확인
이 절차에서는 블록 장치에 휘발성 캐시가 있는지 여부를 확인합니다. 정보를 사용하여 비동기
VDO 쓰기 모드 중
하나를 선택할 수 있습니다.
절차
다음 방법 중 하나를 사용하여 장치에 writeback 캐시가 있는지 확인합니다.
/sys/block/block-device /device/scsi_disk/identifier/cache_type
sysfs
파일을 읽습니다. 예를 들면 다음과 같습니다.$ cat '/sys/block/sda/device/scsi_disk/7:0:0:0/cache_type' write back
$ cat '/sys/block/sdb/device/scsi_disk/1:2:0:0/cache_type' None
또는 위에서 언급한 장치에 쓰기 캐시가 있는지 또는 커널 부팅 로그에 없는지 여부를 확인할 수 있습니다.
sd 7:0:0:0: [sda] Write cache: enabled, read cache: enabled, does not support DPO or FUA sd 1:2:0:0: [sdb] Write cache: disabled, read cache: disabled, supports DPO and FUA
이전 예에서 다음을 수행합니다.
-
Devices
da
는 writeback 캐시 가 있음을 나타냅니다. 이 모드에비동기
모드를 사용합니다. -
sdb
장치는 writeback 캐시 가 없음을 나타냅니다.동기화
모드를 사용합니다.
cache_type
값이None
이거나 동시 쓰기 모드인 경우동기화
쓰기 모드를 사용하도록 VDO를
구성해야 합니다.-
Devices
2.4.5. VDO 쓰기 모드 설정
이 절차에서는 기존 볼륨 또는 새 볼륨을 생성할 때 VDO 볼륨의 쓰기 모드를 설정합니다.
잘못된 쓰기 모드를 사용하면 정전, 시스템 충돌 또는 디스크와의 예기치 않은 연결이 손실될 수 있습니다.
사전 요구 사항
- 장치에 올바른 쓰기 모드를 확인합니다. 2.4.4절. “휘발성 캐시 확인”을 참조하십시오.
절차
기존 VDO 볼륨에서 또는 새 볼륨을 생성할 때 쓰기 모드를 설정할 수 있습니다.
기존 VDO 볼륨을 수정하려면 다음을 사용합니다.
# vdo changeWritePolicy --writePolicy=sync|async|async-unsafe|auto \ --name=vdo-name
-
VDO 볼륨을 생성할 때 쓰기 모드를 지정하려면
--writePolicy=sync|async|async-unsafe|auto
옵션을vdo create
명령에 추가합니다.