드라이브의 16진수 표현(xxd /dev/sd**)을 조사하여 BtrFS 드라이브에서 일부 파일 내용을 수동으로 복구하려고 합니다.
내가 생각하는 유일한 방법은 파일 트리 어딘가에서 file_extent_item을 찾는 것입니다. 그런 다음 해당 항목에 저장된 범위 데이터의 시작 논리 주소를 찾고 마지막으로 해당 오프셋으로 이동하여 바이트를 추출합니다. 내가 겪고 있는 문제는 이와 같은 오프셋이 디스크의 오프셋과 정확하게 일치하지 않는다는 것입니다.
메타데이터 블록 헤더 내에 저장된 논리 주소를 추출한 다음 이를 메타데이터 블록을 찾은 디스크의 주소와 비교하는 스크립트를 만들었습니다. 다음은 몇 가지 결과입니다.
Phy. address: 150 0000h
Log. address: 150 0000h (match up)
Phy. address: 250 0000h
Log. address: 1D0 0000h (-80 0000h)
Phy. address: 824F C000h
Log. address: 41CF C000h (-4080 0000h)
이러한 차이가 어떻게 발생하는지, 그리고 file_extent_items에 지정된 논리 주소로 데이터 범위를 찾을 수 있도록 이를 추적하는 방법을 알고 싶습니다. 이 수수께끼에 대한 답을 아는 사람이 있나요(또는 파일 내용이 있는 경우 다른 방법으로 파일 내용을 찾는 방법 :P)?
추신: 콘텐츠별로 파일을 찾을 수 없으므로 유일한 방법은 btrfs_***_items를 통해 파일을 찾는 것입니다.