2010-05-24 3 views
1

내가 리눅스에서 나는 두 가지 중 하나를 알 필요가 파티션의 여유 공간 맵의 블록 맵을 알고 Linux의 파티션에있는 일부 파일 시스템의 일반 파일에는 사용자 공간에서이 파일이 드라이브에 차지하는 물리적 블록 집합을 알 수있는 방법이 있습니까? 또는 최소한 파일 시스템의 클러스터 세트?리눅스는 어떻게하면 주어진 파일 및/또는

2) 주어진 파일 시스템의 전체 여유 공간에 대해 동일한 정보를 얻을 수있는 방법이 있습니까?

두 가지 경우 모두 나는이 정보를 추출 할 수있는 방법이 있다면 아마 완전히 안전하지 않을 것입니다. (내가 그들을 볼 시간 사이에 이러한 블록 집합에 어떤 일이 일어날 수 있습니다.) 나는 또한 모든 파일 시스템에 대해 많이 알아야 할 구현을 정말로 원하지 않는다.

답변

1

파일 시스템 독립적 인 방법으로는 불가능합니다. 파일 시스템은 반드시 블록 장치 (간단한 예 : NFS) 위에 구축되는 것은 아닙니다.

ext2, ext3ext4를 들어 당신은 e2fsprogs 배포판에 포함되어있는 ext2fslib 라이브러리를 사용할 수 있습니다.

+0

정규 파일로 저장되는 디스크 이미지를 다루고 있으며, losetup이하는 일종의 가상 블록 장치가 있습니다. 위의 데이터는 루프 된 디스크 이미지의 파일/파티션에서 수집됩니다.따라서 백업 파일 이미지가 NFS를 통해 저장되는 경우에도 항상 블록 장치가 있습니다. 하지만 어쨌든 구체적인 파일 시스템의 세부 사항을 모른 채로하는 것은 불가능하다는 점을 알고 있습니다. –

3

적어도 첫 번째 질문에 대해서는 파일 시스템 독립적 인 방법으로 가능합니다. my answer to a serverfault question에서 복사 :

하는 간단한 방법 것은합니다 (debugfs 답변에 같은 파티션에서 읽을 필요없이) 블록 목록을 얻을하면 FIBMAP IOCTL을 사용하는 것입니다. 나는 그렇게 할 명령을 모른다. 그러나 그것을 쓰는 것은 매우 간단하다. 빠른 Google 검색을 통해 정확히 an example of FIBMAP use을 얻었습니다. 한 가지 장점은 ext3뿐만 아니라 bmap 작업을 지원하는 모든 파일 시스템에서 작동한다는 것입니다.

새로운 (더 효율적인) 대체 방법은 ioctl 인 FIEMAP이며 extents에 대한 자세한 정보를 반환 할 수도 있습니다 (ext4에 유용함).

불행히도, 나는 여유 공간에 대해 비슷한 것을 모릅니다. 나는 FITRIM에 대해서만 안다. 이것은 기본 블럭 장치가 파일 시스템의 여유 공간에 해당하는 블럭을 버리라고 알려준다.

+0

답변 해 주셔서 감사합니다. 나는 이것을 오래 전에 물었고, 결국 FIB/FIEMAP에 대해 알았지 만, 여전히 지원되는 모든 파일 시스템 형식을 파싱하여 라이브러리 공간을 계산해야만했습니다. ( –

+0

견적에 링크 된 FIBMAP 예제가 가장 가능성이 있습니다. 이 페이지에서 언급 한 유용한 도구 - 모든 파일에 대한 할당 블록 목록을 덤프합니다. – duskwuff

1

filefrag 명령 줄 도구 파일 할당을 살펴 봅시다. 이전 답변에서 언급 한 FIEMAP/FIBMAP ioctls를 사용합니다. 앞서 언급했듯이 이것은 파일 시스템에 달려있다. ext2/3/4가 ioctls를 지원하는지 여부는 확실하지 않습니다.

보고 된 물리적 값이 디스크의 시작 또는 블록 장치 (파티션 또는 논리 볼륨)의 시작을 나타내는 지 여부는 확실하지 않습니다. 나는 그것이 후자 일 것 같은 느낌이 들었다. 동일한 디스크에 있지만 다른 파티션에있는 여러 파일에 대해 호출하면 알 수 있습니다.

dumpe2fs 명령은 빈 블록을보고합니다. 다시 ext2/3/4 파일 시스템에만 적용됩니다. 블록 번호는 파티션과 관련이있는 것 같습니다.

관련 문제