무결성 검증 파일 시스템(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 댄스를 춰볼까도 생각했지만, 허약한 느낌이 들었습니다.
ddrescue broken_file temp_file map_file
(저장map_file
, 폐기temp_file
)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
이는 특별한 파일 시스템 관련 도구나 루트 액세스 없이도 작동합니다.