하드 디스크에 있는 파일/디렉토리의 물리적 위치 보기

하드 디스크에 있는 파일/디렉토리의 물리적 위치 보기

Sysinternals DiskView와 동일한(또는 일부) 기능을 제공하는 Linux 프로그램이 있습니까? 특히 하드 디스크에 있는 파일의 물리적 위치를 볼 수 있습니까?

디스크뷰 URL:http://technet.microsoft.com/en-gb/sysinternals/bb896650

답변1

Linux의 ext4 또는 btrfs와 같은 일부 파일 시스템의 경우 filefrag를 사용하여 파일 시스템이 있는 블록 장치에 있는 파일에 대한 데이터 세그먼트의 오프셋을 가져올 수 있습니다.

$ seq 1000 > a
$ filefrag -v a
Filesystem type is: ef53
File size of a is 3893 (1 block of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..       0:   82784147..  82784147:      1:             eof
a: 1 extent found
$ sudo dd bs=4k skip=82784147 count=1 if=/dev/storage/home 2>&- | head
1
2
3
4
5
6
7
8
9
10

여기서 블록 장치는 LVM 볼륨입니다. 해당 볼륨은 디스크, 파티션, RAID 어레이, 파일, RAM, 네트워크 블록 장치에 물리적 볼륨을 가질 수 있습니다. 실제 디스크나 디스크 세트로 돌아가는 것은 어려울 수 있습니다.

제 경우에는 하나의 GPT 파티션 위에 하나의 선형 확장으로 논리 볼륨을 추가한 것이므로 상대적으로 쉽습니다.

$ sudo dmsetup table /dev/storage/home
0 1953120256 linear 8:98 384

/dev/sdg2따라서 /dev/storage/home은 장치 8:98 내의 384개 섹터입니다. 이는 저에게 해당됩니다 .

$ cat /sys/block/sdg/sdg2/start
489060352

따라서 sdg2는 /dev/sdg(이 시스템의 7번째 디스크) 내의 489060352 섹터입니다.

따라서 파일이 있는 단일 디스크 내에서 오프셋을 얻을 수 있습니다.

$ sudo dd if=/dev/sdg skip="$((489060352+384+82784147*8))" count=1 2> /dev/null | head
1
2
3
4
5
6
7
8
9
10

답변2

나는 이것이 오래된 게시물이라는 것을 알고 있지만 단순한 논리적 -> 물리적 주소 매핑이 없는 btrfs 파일 시스템에 동일한 기능이 필요했습니다. btrfs에서 이를 수행하는 우아한 방법은 다음 위치에 있는 btrfs_map_physical.c를 컴파일하는 것입니다.출처는 여기.

모든 파일 시스템에서 작동하도록 제가 만든 보다 일반적인 메커니즘 ddblktrace.

하나의 터미널에서 이것을 실행하는 동안:

sudo blktrace -d /dev/sda -o - | blkparse -i - -F Q,"%d Queue(Q) %T.%t %S %n %C\n" | grep --line-buffered "Queue(Q)" | awk -W interactive ' {printf "%s %13s %s 0x%08x 0x%04x %s\n", $2, $3, $1, $4, $5, $6; fflush() }

이것을 다른 곳에서 실행하세요:

dd if=/mnt/myfs/test.txt bs=4096 iflag=direct count=1 | head -4

샘플 출력:

Queue(Q)   0.000000000 R 0x00044800 0x0008 dd
  • Queue(Q)는 내가 분석하고 있는 blktrace 이벤트입니다.
  • 0.000000000은 상대 타임스탬프입니다.
  • R은 연산(읽기)입니다.
  • 0x00044800은 16진수 블록 주소입니다. 십진수를 원하면 printf를 변경하십시오.
  • 0x0008은 읽은 블록 수입니다.
  • dd는 요청을 발행한 앱의 이름입니다.

이 샘플은 블록 크기가 4K인 파일 시스템에 있습니다.

관련 정보