메뉴 건너뛰기

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 DNS 엔지니어링을 위한 dig 명령어 심층 가이드 미르다테 2026.04.29 11
82 Rocky Linux 고정 라우팅(Static Route) 설정 가이드 미르다테 2026.04.29 13
81 nc 명령어 사용방법 및 다양한 예제 초정밀 실무 가이드 미르다테 2026.04.29 17
80 nc 명령어 사용법(실무 매뉴얼) 미르다테 2026.04.29 15
» ddrescue 실무 매뉴얼 file 미르다테 2026.04.15 31
78 Redis 적용한 라이믹스 Rhymix 시놀로지에 설치해보기 미르다테 2025.09.19 93
77 Rocky Linux 특정 패키지 업데이트를 비활성화하는 방법 미르다테 2025.07.07 154
76 사용자 계정의 sudo명령어 사용 시 비밀번호 없이 사용하게 하는 설정(tee 명령어) 미르다테 2025.06.27 233
75 Rocky Linux 및 NetworkManager를 사용한 정적 경로 설정 미르다테 2025.04.03 222
74 Ubuntu 22.04 LTS 패키지 업데이트 시 오류 해결 방법 미르다테 2025.02.19 297
73 우분투 리눅스(Ubuntu Linux)에서 Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details. 오류 해결 방법 미르다테 2025.02.09 405
72 연속적으로 명령 실행시키기 (;과 &와 &&의 차이) 미르다테 2025.02.03 170
71 내 공인IP 확인하기(스크립트) 미르다테 2025.02.02 171
70 리눅스 네트워크 설정(Debian 계열, Ubuntu) 미르다테 2025.01.16 212
69 우분투(Ubuntu) 리눅스 apt 패키지 설치 이력 확인 미르다테 2025.01.14 442
68 Rocky Linux 9 고정 라우팅 경로 설정 방법 미르다테 2025.01.10 271
67 Rocky Linux 9에 Webmin 설치하는 방법 미르다테 2025.01.07 240
66 라이믹스(Rhymix) 애드온 '링크 프리뷰' 설치정보 미르다테 2025.01.06 264
65 Rocky Linux 9에 FFmpeg를 설치하는 방법 미르다테 2025.01.06 240
64 Ubuntu 24.04에 Webmin을 설치하는 방법 미르다테 2024.12.31 244
위로