← Documents Documentation/admin-guide/blockdev/drbd/disk-states-8.dot GitHub 원문 ↗

Linux 6.18.37 · Admin guide

DRBD 8 디스크 상태 전이

DRBD 8의 디스크 연결 판정, 재동기화, I/O 실패와 디스크 분리 전이를 나타내는 DOT 상태도입니다.

Source pathDocumentation/admin-guide/blockdev/drbd/disk-states-8.dot
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

disk-states-8.dot:1-16

DRBD 8의 디스크 연결 판정, 재동기화, I/O 실패와 디스크 분리 전이를 나타내는 DOT 상태도입니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 digraph disk_states {
2 Diskless -> Inconsistent [ label = "ioctl_set_disk()" ]
3 Diskless -> Consistent [ label = "ioctl_set_disk()" ]
4 Diskless -> Outdated [ label = "ioctl_set_disk()" ]
5 Consistent -> Outdated [ label = "receive_param()" ]
6 Consistent -> UpToDate [ label = "receive_param()" ]
7 Consistent -> Inconsistent [ label = "start resync" ]
8 Outdated -> Inconsistent [ label = "start resync" ]
9 UpToDate -> Inconsistent [ label = "ioctl_replicate" ]
10 Inconsistent -> UpToDate [ label = "resync completed" ]
11 Consistent -> Failed [ label = "io completion error" ]
12 Outdated -> Failed [ label = "io completion error" ]
13 UpToDate -> Failed [ label = "io completion error" ]
14 Inconsistent -> Failed [ label = "io completion error" ]
15 Failed -> Diskless [ label = "sending notify to peer" ]
16 }
17

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

디스크 연결, 재동기화와 실패 전이

1-16

이 DOT 그래프는 DRBD 8 로컬 디스크 상태 기계를 나타냅니다. 디스크가 없는 `Diskless` 상태에서 `ioctl_set_disk()`로 디스크를 연결하면 메타데이터와 판단 결과에 따라 `Inconsistent`, `Consistent`, `Outdated` 가운데 하나로 진입할 수 있습니다.

`Consistent` 상태는 피어 매개변수를 받은 결과 `Outdated` 또는 `UpToDate`가 될 수 있습니다. `Consistent`나 `Outdated`에서 재동기화를 시작하면 `Inconsistent`가 되고, `ioctl_replicate`도 `UpToDate`를 `Inconsistent`로 전환합니다. 재동기화가 완료되면 `Inconsistent`에서 `UpToDate`로 이동합니다.

`Consistent`, `Outdated`, `UpToDate`, `Inconsistent`에서 I/O 완료 오류가 발생하면 모두 `Failed`로 전이합니다. 실패 사실을 피어에 알린 뒤에는 `Failed`에서 `Diskless`로 이동하여 디스크가 분리된 상태가 됩니다.

DRBD 8 디스크 상태 흐름
Disklessioctl_set_disk()Inconsistent
Disklessioctl_set_disk()Consistentreceive_param()UpToDate
Disklessioctl_set_disk()Outdated
Consistentreceive_param()Outdated
Consistent 또는 Outdatedstart resyncInconsistentresync completedUpToDate
UpToDateioctl_replicateInconsistent
Consistent·Outdated·UpToDate·Inconsistentio completion errorFailedsending notify to peerDiskless

디스크 연결 시 초기 판정, 재동기화와 공통 I/O 실패 경로를 구조화합니다.

디스크 상태 전이 전체
출발 상태도착 상태원문 조건한국어 의미
DisklessInconsistentioctl_set_disk()디스크 연결 뒤 불일치 상태로 판정
DisklessConsistentioctl_set_disk()디스크 연결 뒤 일관 상태로 판정
DisklessOutdatedioctl_set_disk()디스크 연결 뒤 오래된 상태로 판정
ConsistentOutdatedreceive_param()피어 매개변수에 따라 오래된 상태로 변경
ConsistentUpToDatereceive_param()피어 매개변수에 따라 최신 상태 확정
ConsistentInconsistentstart resync재동기화 시작
OutdatedInconsistentstart resync오래된 디스크의 재동기화 시작
UpToDateInconsistentioctl_replicate복제 ioctl로 다시 불일치 상태 진입
InconsistentUpToDateresync completed재동기화 완료
ConsistentFailedio completion errorI/O 완료 오류
OutdatedFailedio completion errorI/O 완료 오류
UpToDateFailedio completion errorI/O 완료 오류
InconsistentFailedio completion errorI/O 완료 오류
FailedDisklesssending notify to peer피어 통지 뒤 디스크 없는 상태로 전환

DOT 원문의 모든 간선과 라벨을 한국어 의미와 함께 나열합니다.

digraph disk_states {
        Diskless -> Inconsistent       [ label = "ioctl_set_disk()" ]
        Diskless -> Consistent         [ label = "ioctl_set_disk()" ]
        Diskless -> Outdated           [ label = "ioctl_set_disk()" ]
        Consistent -> Outdated         [ label = "receive_param()" ]
        Consistent -> UpToDate         [ label = "receive_param()" ]
        Consistent -> Inconsistent     [ label = "start resync" ]
        Outdated   -> Inconsistent     [ label = "start resync" ]
        UpToDate   -> Inconsistent     [ label = "ioctl_replicate" ]
        Inconsistent -> UpToDate       [ label = "resync completed" ]
        Consistent -> Failed           [ label = "io completion error" ]
        Outdated   -> Failed           [ label = "io completion error" ]
        UpToDate   -> Failed           [ label = "io completion error" ]
        Inconsistent -> Failed         [ label = "io completion error" ]
        Failed -> Diskless             [ label = "sending notify to peer" ]
}