/dev/sda의 블록 123456789를 차지하는 파일은 무엇입니까?

/dev/sda의 블록 123456789를 차지하는 파일은 무엇입니까?

블록 장치에서 어떤 파일이 특정 블록을 차지하고 있는지 알고 싶습니다.

이 절차에서는 최소한 LVM에서 ext4 암호화를 지원해야 하지만, 다른 스토리지 시스템에서 이 작업을 수행하는 방법도 설명하면 좋을 것입니다.

그래서 나는 다음과 같은 것을 찾고 있습니다 :

# whichfile /dev/sda 123456789
/var/log/syslog

가능한:

# whichfile -v /dev/sda 123456789
Debug: Block 123456789 is in partition /dev/sda6
Debug: /dev/sda6 is part of LVM /dev/kubuntu-vg/root
Debug: /dev/kubuntu-vg/root is LUKS encrypted
Debug: Decrypted device is: /dev/mapper/kubuntu--vg-root
Debug: Block 123456789 on /dev/sda is block 98765432 on /dev/mapper/kubuntu--vg-root
Debug: File system is: ext4
Debug: Block 98765432 contains inode 2345678
Debug: Inode 2345678 is var/log/syslog
Debug: Mount point is: /
/var/log/syslog

편집하다:

@Mark Plotnick은 암호화되지 않은 블록 장치에서 inode까지 부분적인 솔루션을 제공합니다. 이는 올바른 방향으로 나아가는 단계입니다.

또 다른 부분 솔루션: inode -> 파일 이름(ext4):

sudo debugfs -R 'ncheck 23456789' /dev/unencrypted_ext4_fs

더 일반적입니다(느리지만 아마도 모든 inode 기반 파일 시스템에만 적용 가능함):

sudo find /mountpoint-for-device -xdev -inum 23456789

답변1

일반적으로 파일 시스템의 각 데이터 블록과 연관된 메타데이터가 없으므로 원하는 것을 얻으려면 일반적으로 특정 블록이 포함된 파티션을 사용하는 전체 파일 시스템을 탐색하고 각 파일 블록을 분석해야 합니다. 좋은 파일 블록을 찾으세요.

또한 블록, 논리 블록, 물리적 블록, 섹터...(512b, 1k, 4k)의 의미를 정의하고 다음과 같은 특수 사례를 처리해야 합니다.

  • 블록에는 여러 파일(ufs와 같은 조각을 사용하는 파일 시스템)의 일부가 포함되어 있습니다.
  • 블록에는 로그가 포함되어 있으므로 하나 이상의 파일의 일부가 포함될 수 있습니다.
  • 블록은 여러 파일에 의해 공유됩니다(중복 제거 파일 시스템).
  • 블록은 다양한 파일 시스템(스냅샷/복제 파일 시스템)에 속하는 다양한 버전의 파일에서 공유됩니다.
  • ...

그럼에도 불구하고 다양한 파일 시스템 구현에 대한 알고리즘을 사용하고 내부 구조를 분석하는 데 시간을 투자해야 합니다.

관련 정보