작성 기준: GNU ddrescue (패키지명: gddrescue) — Proxmox / Linux 서버 환경 실무 적용 기준
작성일: 2026-04-15 | 환경: Proxmox VE, Rocky Linux, Ubuntu/Debian 계열
1. ddrescue란?
ddrescue는 GNU 프로젝트의 데이터 복구 전용 복사 도구입니다.
일반 cp, dd 명령어는 읽기 오류(I/O Error) 발생 시 복사 자체가 중단되지만, ddrescue는 오류 블록을 건너뛰고 계속 진행합니다.
| 구분 | dd / cp |
ddrescue |
|---|---|---|
| I/O 오류 발생 시 | 즉시 중단 | 오류 블록을 건너뛰고 계속 진행 |
| 오류 블록 재시도 | 없음 | 별도 재시도 가능 (-r 옵션) |
| 진행 상태 저장 | 없음 | 로그 파일로 이어받기 가능 |
| 복구 전략 | 단순 순차 복사 | 읽히는 블록 먼저 확보 후 손상 블록 재시도 |
💡 핵심 철학: "읽을 수 있는 데이터를 최대한 먼저 확보한다."
2. 설치
Debian / Ubuntu / Proxmox VE
# Proxmox VE 기준 apt-get update && apt-get install -y gddrescue
RHEL / Rocky Linux / CentOS
dnf install -y ddrescue # 또는 EPEL 활성화 후 dnf install -y epel-release && dnf install -y ddrescue
설치 확인
ddrescue --version
3. 기본 문법
ddrescue [옵션] <소스> <대상> <로그파일>
| 인자 | 설명 | 예시 |
|---|---|---|
<소스> |
복구할 원본 (장치 또는 파일) | /dev/sda/mnt/pve/ssd/images/102/vm-102-disk-0.qcow2 |
<대상> |
복사될 위치 (장치 또는 파일) | /dev/nvme0n1/mnt/pve/nvme/images/102/vm-102-disk-0.qcow2 |
<로그파일> |
진행 상태 저장 파일 | /root/ddrescue-102.log |
⚠️ 로그파일은 필수입니다. 작업 중단 후 재시작 시 이어받기에 사용됩니다. 반드시 소스 디스크와 다른 스토리지에 저장하십시오.
4. 주요 옵션
| 옵션 | 설명 |
|---|---|
-f |
대상 파일이 이미 존재해도 강제 덮어쓰기 |
-n |
오류 블록 재시도 없이 1차 순방향 복사만 수행 (빠른 1차 복구) |
-r <N> |
오류 블록을 N회 재시도 (-r3 = 3회) |
-d |
Direct I/O 모드 — OS 캐시 우회, 물리 장치 복구 시 권장 |
-v |
상세 출력 (verbose) |
--sparse |
대상에 sparse file로 기록 (빈 블록 공간 절약) |
-b <N> |
섹터 크기 지정 (기본 512, NVMe는 4096 권장) |
-i <위치> |
소스의 특정 오프셋부터 시작 |
-s <크기> |
복사할 크기 제한 |
5. 권장 복구 절차 — 2단계 전략
① 1단계: 빠른 복사 (-n — 오류 스킵, 순방향)
ddrescue -f -n <소스> <대상> <로그파일>
- 읽히는 블록을 최대한 빠르게 수집합니다.
- 오류 블록은 건너뛰고 로그에만 기록합니다.
② 2단계: 오류 블록 재시도 (-r3 — 손상 블록 재도전)
ddrescue -f -r3 <소스> <대상> <로그파일>
- 1단계에서 실패한 블록을 로그 기반으로 3회 재시도합니다.
- 로그파일 경로가 동일해야 이어서 처리됩니다.
6. 실제 사용 사례 — Proxmox VM 디스크 복구
배경 상황
Samsung 870 EVO SSD(/dev/sda)에 I/O 오류 및 UNC(Uncorrectable) 에러가 발생하였습니다.
해당 SSD에 저장된 Proxmox VM 102번(vm-102-disk-0.qcow2)을 NVMe 스토리지로 이관하려 했으나, qm disk move가 내부적으로 qemu-img convert를 호출하는 과정에서 I/O 오류로 실패하였습니다.
🔴 실패한 명령어:
qm disk move 102 sata0 nvme --delete
→ qemu-img convert 도중 I/O error로 중단
원인: qm disk move는 소스 qcow2를 직접 읽기 때문에, 소스에 I/O 오류가 있으면 실패합니다.
해결 절차
Step 1. VM 정지
qm shutdown 102 # 정상 종료 시도 # 응답 없으면: qm stop 102 # 강제 정지
Step 2. ddrescue 설치
apt-get install -y gddrescue
Step 3. 대상 경로 생성
mkdir -p /mnt/pve/nvme/images/102
Step 4. 1차 복구 (빠른 복사)
ddrescue -f -n \ /mnt/pve/ssd/images/102/vm-102-disk-0.qcow2 \ /mnt/pve/nvme/images/102/vm-102-disk-0.qcow2 \ /root/ddrescue-102.log
Step 5. 2차 복구 (오류 블록 재시도)
ddrescue -f -r3 \ /mnt/pve/ssd/images/102/vm-102-disk-0.qcow2 \ /mnt/pve/nvme/images/102/vm-102-disk-0.qcow2 \ /root/ddrescue-102.log
Step 6. 복사 결과 확인
# 파일 크기 확인 ls -lh /mnt/pve/nvme/images/102/vm-102-disk-0.qcow2 # qcow2 이미지 무결성 확인 qemu-img info /mnt/pve/nvme/images/102/vm-102-disk-0.qcow2 qemu-img check /mnt/pve/nvme/images/102/vm-102-disk-0.qcow2
Step 7. Proxmox VM 디스크 설정 변경
# VM 설정 파일 직접 편집 nano /etc/pve/qemu-server/102.conf # 또는 Proxmox Web UI: Hardware → Hard Disk 경로 수정
Step 8. VM 기동 및 검증
qm start 102
✅ 결과: SSD I/O 오류 상황에서도 VM 데이터 대부분을 복구하였습니다.
qm disk move로 불가능했던 이관을 ddrescue로 우회하여 성공하였습니다.
7. 물리 디스크(파티션) 복구 예시
파티션 단위 이미지 백업
# 1차 복사 ddrescue -f -n /dev/sda1 /mnt/pve/nvme/sda1.img /mnt/pve/nvme/sda1_ddrescue.log # 2차 재시도 ddrescue -f -r3 /dev/sda1 /mnt/pve/nvme/sda1.img /mnt/pve/nvme/sda1_ddrescue.log
디스크 전체 이미지화 (Direct I/O)
ddrescue -f -n -d /dev/sda /mnt/backup/sda_full.img /root/sda_rescue.log ddrescue -f -r3 -d /dev/sda /mnt/backup/sda_full.img /root/sda_rescue.log
💡 -d 옵션은 OS 캐시를 우회하므로 물리 장치 복구 시 권장합니다. 캐시 오염 없이 실제 디스크 상태를 읽습니다.
8. 로그 파일 읽는 법
cat /root/ddrescue-102.log
출력 예시
# Rescue Logfile. Created by GNU ddrescue version 1.27 # Start time: 2026-04-15 14:35:02 # Current time: 2026-04-15 14:52:17 # pos size status 0x000000000 0x3B9A00000 + ← 정상 복구 블록 0x3B9A00000 0x0000CA000 - ← 오류 블록 (2차에서 재시도)
상태 기호 의미
| 기호 | 의미 |
|---|---|
| + | 정상 복구 완료 |
| - | 읽기 오류 (재시도 대상) |
| / | 트리밍 중 |
| * | 재시도 중 |
9. 주의사항 및 실무 원칙
| 순서 | 반드시 지켜야 할 사항 |
|---|---|
| 1 | 작업 전 반드시 VM/서비스를 정지하십시오. 운영 중 복사 시 데이터 불일치가 발생할 수 있습니다. |
| 2 | 원본 디스크에 추가 쓰기 작업을 하지 마십시오. 오류가 심한 디스크에 계속 접근하면 복구 가능한 블록이 추가로 손상될 수 있습니다. |
| 3 | 로그 파일 경로를 소스 디스크와 반드시 분리하십시오. 소스가 /dev/sda라면 로그는 반드시 NVMe 등 별도 스토리지에 저장하십시오. |
| 4 | 대상 경로의 여유 공간을 사전 확인하십시오.df -h |
| 5 | 복구 후 반드시 무결성 검증을 수행하십시오. qcow2: qemu-img check / 파일시스템: fsck.ext4 -f <대상> |
ddrescue로 해결하기 어려운 상황
| 상황 | 권장 대안 |
|---|---|
| 파일시스템 메타데이터(inode, superblock) 손상 | fsck, testdisk, photorec 병행 |
| 암호화된 디스크 | 복호화 키 필요 — ddrescue는 암호화 인식 불가 |
| RAID 구성 디스크 | mdadm으로 어레이 재조립 후 ddrescue 적용 |
10. 빠른 참조 (Quick Reference)
# 설치 apt-get install -y gddrescue # 파일 복구 (1차 — 빠른 복사) ddrescue -f -n <소스파일> <대상파일> <로그파일> # 파일 복구 (2차 — 오류 블록 재시도) ddrescue -f -r3 <소스파일> <대상파일> <로그파일> # 물리 디스크 복구 (Direct I/O) ddrescue -f -n -d <소스장치> <대상이미지> <로그파일> ddrescue -f -r3 -d <소스장치> <대상이미지> <로그파일> # 복구 이미지 검증 qemu-img check <대상.qcow2> fsck.ext4 -f <대상이미지>
11. 관련 도구 비교
| 도구 | 용도 | 특징 |
|---|---|---|
ddrescue |
I/O 오류 디스크에서 데이터 복구 복사 | 오류 스킵 + 재시도 + 로그 이어받기 |
dd |
정상 디스크 복사/이미징 | 오류 시 중단, 복구 기능 없음 |
rsync |
파일 단위 동기화 | 오류 파일 스킵 가능하나 블록 단위 복구 불가 |
testdisk |
파티션 테이블/MBR 복구 | 구조 복구, 데이터 복사 아님 |
photorec |
파일 카빙 복구 | 메타데이터 없는 파일 복원 |
qemu-img convert |
VM 디스크 포맷 변환 | I/O 오류 디스크에서는 실패 가능 |
본 매뉴얼은 2026년 4월 15일 실제 Proxmox VM 디스크 복구 사례를 기반으로 작성되었습니다.