백업 복사본에서 부분적으로 읽을 수 없는 파일을 복구하는 절차/방법

백업 복사본에서 부분적으로 읽을 수 없는 파일을 복구하는 절차/방법

무결성 검증 파일 시스템(btrfs)에 부분적으로 손상된 파일이 있습니다.

$ pv -c \{30939216-15e2-4563-b77e-2ab8687ec333\}.vdi >/dev/null
pv: {30939216-15e2-4563-b77e-2ab8687ec333}.vdi: read failed: Input/output error
3.41GiB 0:00:00 [5.25GiB/s] [=====================================================================>                                                                                                 ] 42%

이 파일의 전체 백업이 있지만 액세스 속도가 매우 느립니다.

$ pv ~/mnt/borg/able-2022-10-05T12:00:21+04:00/arch/home/intelfx/VirtualBox\ VMs/Windows\ 10/Snapshots/\{30939216-15e2-4563-b77e-2ab8687ec333\}.vdi >/dev/null
1.3MiB 0:00:30 [430KiB/s] [>                                                                                                                                                                      ]  0% ETA 51:55:23
^C

Btrfs는 파일의 어느 부분이 손상되었는지 "알고 있습니다". 손상된 범위를 읽으려고 하면 I/O 오류가 반환됩니다.


가능한 한 적은 네트워크 I/O를 수행하여 백업 복사본에서 파일을 복구하는 가장 쉬운 방법은 무엇입니까? 덮어쓰는 데이터의 양을 최소화하는 파일 복원에 대한 보너스 포인트입니다.

ddrescue 댄스를 춰볼까도 생각했지만, 허약한 느낌이 들었습니다.

  1. ddrescue broken_file temp_file map_file(저장 map_file, 폐기 temp_file)
  2. ddrescue --retrim backup_file broken_file map_file(재사용 map_file)

어쩌면 더 쉬운 방법이나 이 목적을 위해 특별히 만들어진 도구가 누락된 것일까요?

답변1

나는 이것을 위해 ddrescue를 사용할 것입니다 :

ddrescue damaged_file temp temp.map
ddrescue working_file temp temp.map --retrim
mv temp working_file

이는 특별한 파일 시스템 관련 도구나 루트 액세스 없이도 작동합니다.

관련 정보