Skip to main content

루트 볼륨 점검을 통한 인스턴스 복구

본 문서는 Linux 인스턴스에 SSH 접속이 불가능할 때, 루트 볼륨을 점검하고 신규 인스턴스를 복구하는 절차를 안내합니다.


SSH 접속 오류 발생

Linux 인스턴스에서 SSH 접속 시, 다음과 같은 오류 메시지가 발생할 수 있습니다.

이 오류는 인스턴스 내부의 네트워크 설정, 파일 시스템 손상, SSH 데몬 비정상 동작 등의 문제로 인해 발생할 수 있습니다. 직접 인스턴스에 접근할 수 없으므로, 루트 볼륨을 다른 인스턴스에 연결해 점검해야 합니다.

▶️ 해결 방법

info

이 가이드는 OpenAPI를 기반으로 설명하며, 동일한 작업은 카카오클라우드 콘솔에서도 수행할 수 있습니다. OpenAPI 사용을 위해서는 먼저 OpenAPI 시작하기 문서의 사전 준비 절차를 완료하세요.

SSH 접속 불가 문제는 아래 절차를 통해 OpenAPI 기반으로 보다 효율적으로 복구할 수 있습니다. 루트 볼륨을 분리하여 점검용 인스턴스에서 문제를 수정하고, 수정된 볼륨을 기반으로 이미지를 생성해 신규 인스턴스를 배포하는 방식입니다. 이를 통해 콘솔 접근 없이도 원격에서 안정적이고 신속한 복구가 가능합니다.

Step 1. 기존 인스턴스 정보 확인

Get instance OpenAPI를 사용하여 인스턴스 ID, 루트 볼륨 ID, 인스턴스 유형, 보안 그룹, 키페어 등을 확인합니다.

Request
Get instance Request Syntax
curl -X GET 'https://bcs.kr-central-2.kakaocloud.com/api/v1/instances/${INSTANCE_ID}' \
-H 'Accept: application/json' \
-H 'X-Auth-Token: ${API_TOKEN}'
변수설명
INSTANCE_ID🖌기존 인스턴스 ID
API_TOKEN🖌API 인증 토큰
Response로 가져올 정보
정보Response Body 항목
인스턴스 IDinstance.id
루트 볼륨 IDinstance_attached_volume.is_root=true인 볼륨의 instance.attached_volumes.id 값 확인
루트 볼륨 크기instance_attached_volume.is_root=true인 볼륨의 instance.attached_volumes.size 값 확인
인스턴스 유형 IDinstance.flavor.id
보안그룹 이름instance.security_groups.name
키페어 이름instance.key_name
가용 영역instance.availability_zone

Step 2. 루트 볼륨 스냅샷 생성 및 복원

  1. 문제가 발생한 루트 볼륨의 스냅샷을 생성합니다. Create snapshot OpenAPI를 사용합니다.

    Request
    Create snapshot Request Syntax
    curl -X POST 'https://volume.kr-central-2.kakaocloud.com/api/v1/volumes/${VOLUME_ID}/snapshots' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'X-Auth-Token: ${API_TOKEN}' \
    -d '{
    "snapshot": {
    "name": "${SNAPSHOT_NAME}",
    "description": "${SNAPSHOT_DESC}",
    "is_incremental": ${IS_INCREMENTAL}
    }
    }'
    변수설명
    VOLUME_ID🖌문제의 루트볼륨 ID
    API_TOKEN🖌API 인증 토큰
    SNAPSHOT_NAME🖌스냅샷 이름
    SNAPSHOT_DESC🖌스냅샷 설명
    IS_INCREMENTAL🖌증분 스냅샷 여부
    해당 가이드에서는 문제 해결을 위한 스냅샷으로, `false`로 생성합니다.
    Response로 가져올 정보
    정보Response Body 항목
    스냅샷 IDsnapshot.id
  2. Restore snapshot OpenAPI를 통해 볼륨 복원을 진행합니다.

    Request
    Restore snapshot Request Syntax
    curl -X POST 'https://volume.kr-central-2.kakaocloud.com/api/v1/snapshots/${SNAPSHOT_ID}/restore' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'X-Auth-Token: ${API_TOKEN}' \
    -d '{
    "restore": {
    "name": "${VOLUME_NAME}",
    "availability_zone": "${VOLUME_NAME}",
    "volume_type_id": "${VOLUME_TYPE_ID}"
    }
    }'
    변수설명
    SNAPSHOT_ID🖌스냅샷 ID
    API_TOKEN🖌API 인증 토큰
    VOLUME_NAME🖌복원된 볼륨의 이름
    VOLUME_TYPE_ID🖌볼륨 타입 ID
    볼륨 타입 ID 조회

    볼륨 타입 ID는 List volume types OpenAPI를 통해 확인합니다.

    Response로 가져올 정보
    정보Response Body 항목
    복원된 볼륨 IDrestore.volume_id

Step 3. 점검용 인스턴스 준비 및 복원된 볼륨 연결

  1. Create instance OpenAPI를 사용해 점검용 인스턴스를 신규로 생성하거나, 기존에 있는 다른 인스턴스를 준비합니다.

  2. Attach volume OpenAPI를 사용해 2-2단계에서 복원된 볼륨을 연결합니다.

    Request
    Attach volume Request Syntax
    curl -X POST 'https://bcs.kr-central-2.kakaocloud.com/api/v1/instances/${DEBUG_INSTANCE_ID}/volumes/${RESTORED_VOLUME_ID}' \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'X-Auth-Token: ${API_TOKEN}' \
    -d '{
    "volume": {
    "is_delete_on_termination": ${IS_DELETE_ON_TERMINATION}
    }
    }'
    변수설명
    DEBUG_INSTANCE_ID🖌점검용 인스턴스 ID
    RESTORED_VOLUME_ID🖌복원된 볼륨 ID
    API_TOKEN🖌API 인증 토큰
    IS_DELETE_ON_TERMINATION🖌인스턴스 삭제 시 해당 볼륨을 자동으로 삭제할지 여부
    판단에 따라 true 혹은 false로 생성

Step 4. 점검용 인스턴스에 복원된 볼륨 마운트 후, 볼륨 점검 및 문제 해결

  1. 점검용 인스턴스에 접속하여 볼륨을 마운트합니다. 볼륨 연결 가이드를 참고합니다.

  2. 다음 항목을 점검합니다.

  • 네트워크 설정: 네트워크 설정 파일을 확인하여 IP 주소, 게이트웨이, DNS가 올바르게 구성되어 있는지 점검합니다.
    • Ubuntu 인스턴스의 경우, /etc/netplan 디렉터리 내 파일
    • RedHat 계열(CentOS, Rocky) 인스턴스의 경우, /etc/sysconfig/network-scripts 디렉터리 내 파일
  • 파일 시스템 손상 점검 및 복구: 파일 시스템 복구를 위해서는 마운트된 볼륨을 해제해야 합니다. 그리고 xfs_repair -n 명령어를 통해 손상 여부 확인 및 검사를 진행한 후, xfs_repair 명령어를 통해 손상된 영역을 수정하고 복구합니다.
  • 그 외 부팅 오류 분석 및 조치: 카카오클라우드 콘솔에서 시스템 로그를 확인하고, 부팅 중 발생한 오류 메시지를 기반으로 원인을 분석하고 조치합니다.

Step 5. 점검용 인스턴스에 연결했던 볼륨 연결 해제

점검용 인스턴스에 연결했던 복원된 볼륨은 Detach volume OpenAPI를 사용하여 연결을 해제합니다.

Request
Detach volume Request Syntax
curl -X DELETE 'https://bcs.kr-central-2.kakaocloud.com/api/v1/instances/${DEBUG_INSTANCE_ID}/volumes/${RESTORED_VOLUME_ID}' \
-H 'Accept: application/json' \
-H 'X-Auth-Token: ${API_TOKEN}'
변수설명
DEBUG_INSTANCE_ID🖌점검용 인스턴스 ID
RESTORED_VOLUME_ID🖌복원된 볼륨 ID
API_TOKEN🖌API 인증 토큰

Step 6. 연결 해제한 볼륨을 기반으로 이미지 생성

문제가 해결된 볼륨을 기반으로 이미지를 생성합니다. 이미지 생성은 Create image OpenAPI를 사용합니다.

이미지 생성 시 주의 사항

실행 중인 인스턴스에서 이미지를 생성하면, 메모리에 저장된 데이터가 볼륨에 완전히 기록되지 않아 일부 데이터의 일관성이 손상될 수 있습니다.
따라서 이미지 생성 전 인스턴스를 정지하는 것을 권장합니다.

Request
Create image Request Syntax
curl -X POST 'https://volume.kr-central-2.kakaocloud.com/api/v1/volumes/${RESTORED_VOLUME_ID}/image' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'X-Auth-Token: ${API_TOKEN}' \
-d '{
"image": {
"name": "${IMAGE_NAME}",
"description": "${IMAGE_DESC}"
}
}'
변수설명
RESTORED_VOLUME_ID🖌복원된 볼륨 ID
API_TOKEN🖌API 인증 토큰
IMAGE_NAME🖌이미지 이름
IMAGE_DESC🖌이미지 설명
Response로 가져올 정보
정보Response Body 항목
이미지 IDimage.id

Step 7. 신규 인스턴스 생성

생성한 이미지를 기반으로 신규 인스턴스를 배포합니다. 인스턴스 생성은 Create instance OpenAPI를 사용합니다.

Request
Create instance Request Syntax
curl -X POST 'https://bcs.kr-central-2.kakaocloud.com/api/v1/instances' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'X-Auth-Token: ${API_TOKEN}' \
-d '{
"instance": {
"name": "${INSTANCE_ID}",
"description": "${INSTANCE_DESC}",
"count": 1,
"image_id": "${IMAGE_ID}",
"flavor_id": "${FLAVOR_ID}",
"availability_zone": "${AZ}",
"subnets": [
{
"id": "${SUBNET_ID}"
}
],
"volumes": [
{
"is_delete_on_termination": true,
"size": ${VOLUME_SIZE},
"source_type": "image",
"uuid": "${IMAGE_ID}",
"type_id": "${VOLUME_TYPE_ID}"
}
],
"key_name": "${KEY_NAME}",
"security_groups": [
{
"name": "${SG_NAME}"
}
]
}
}'
변수설명
API_TOKEN🖌API 인증 토큰
INSTANCE_ID🖌신규 인스턴스 이름
INSTANCE_DESC🖌인스턴스 설명
IMAGE_ID🖌6번 항목에서 생성한 이미지 ID
FLAVOR_ID🖌인스턴스 유형 ID
AZ🖌인스턴스를 생성할 가용영역
SUBNET_ID🖌서브넷 ID
VOLUME_SIZE🖌볼륨 사이즈, 기존 인스턴스의 루트 볼륨 사이즈와 동일하게 설정
VOLUME_TYPE_ID🖌볼륨 타입 ID
KEY_NAME🖌키페어 이름
SG_NAME🖌보안그룹 이름
참고

Step 8. 신규 인스턴스의 SSH 접속 및 후속 작업 확인

  1. 신규 인스턴스 부팅 완료 후, SSH 접속을 시도해 정상 여부를 확인합니다.
    SSH 접속 확인
      # 키페어 기반 설정 시
    ssh -i ${pem-key-file} ${username}@${server-ip}
  2. 복구 대상 인스턴스에 추가 볼륨이 있었다면, 동일하게 연결합니다.
  3. 마지막으로 복구 과정에서 생성한 임시 리소스와 불필요한 기존 인스턴스는 삭제합니다.