메뉴 건너뛰기

SayClub.org

리눅스(Linux)

ddrescue 실무 매뉴얼

미르다테 2026.04.15 15:38 조회 수 : 31

작성 기준: 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 디스크 복구 사례를 기반으로 작성되었습니다.

번호 제목 글쓴이 날짜 조회 수
83 우분투(Ubuntu) 서버 / Nginx, PHP, MariaDB 설치하고 설정하기 미르다테 2024.12.30 187
82 워드프레스 미디어 업로드 용량 제한 오류 해결 미르다테 2024.12.30 174
81 Nginx Reverse Proxy 사용시 IP 주소 전달 문제 해결하기 미르다테 2024.12.30 182
80 우분투(Ubuntu) 서버에 삼바(SAMBA) 설치하기 미르다테 2024.12.30 231
79 만자로(Manjaro) 리눅스 설치 후 초기 세팅 미르다테 2024.12.30 132
78 만자로(Manjaro) 리눅스 Pacman 사용법 미르다테 2024.12.30 196
77 Nginx Proxy Manager SSL 자동 갱신하기 미르다테 2024.12.30 189
76 우분투(Ubuntu) 서버 한글 폰트 설치하기 미르다테 2024.12.30 241
75 우분투(Ubuntu) 서버 지역시간설정(tzdata) 및 로케일(locale) 설정하기 미르다테 2024.12.30 153
74 우분투(ubuntu) 서버 유저명, 홈경로, 그룹명 변경 방법 미르다테 2024.12.30 144
73 CentOS 리눅스 YUM 사용법 미르다테 2024.12.30 246
72 CentOS 서비스 자동시작 설정 및 해제 미르다테 2024.12.30 198
71 CentOS 7에서 Docker 및 Docker Compose 설치하기 미르다테 2024.12.30 230
70 칼리 리눅스(Kali Linux)에 크롬(Chrome) 설치하기 미르다테 2024.12.30 200
69 우분투(Ubuntu)에서 일괄 업데이트하기 (불필요한 패키지 자동 삭제) 미르다테 2024.12.30 138
68 우분투(Ubuntu) 서버 보안 자동 업데이트 방법 미르다테 2024.12.30 221
67 CPU Governor 종류 미르다테 2024.12.30 232
66 그누보드5 게시판의 첨부파일 용량 제한과 관련된 PHP 설정 미르다테 2024.12.30 210
65 리눅스 로그파일 utmp, wtmp, btmp, last log, sulog 미르다테 2024.12.30 233
64 Virtualbox Centos 7 게스트확장설치 미르다테 2024.12.30 134
위로