디스크에서 파일이 실제로 위치한 위치 (블록 번호)를 어떻게 알 수 있습니까? 거의 일정하고 회전 속도가 일정하기

이것은 모호한 질문입니다. Linux 상자에서 일부 디스크의 성능 테스트를 수행하려고합니다. 동일한 디스크에서 동일한 테스트를 실행하여 일관성이없는 결과가 나타납니다. 디스크의 어느 부분에 액세스하는지에 따라 디스크의 성능이 다르다는 것을 알고 있습니다. 특히 디스크 외부에 대한 읽기 및 쓰기는 데이터 밀도가 거의 일정하고 회전 속도가 일정하기 때문에 디스크 내부에 대한 읽기 및 쓰기보다 처리량이 훨씬 높습니다.

불일치가 처리량의 이러한 기하학 유발 분산으로 인한 것일 수 있는지 확인하고 싶습니다. 기존 도구를 사용하여 디스크에서 파일이있는 위치를 찾을 수 있습니까?

그렇지 않다면 파일 시스템을 우회 (및 파괴)하여 장치 파일 자체를 직접 찾고 읽고 쓸 수있는 것을 쓸 수 있다고 생각하지만 피하지 않기를 바랍니다. 현재 3.0 커널에서 ext4를 사용하고 있습니다 (중요한 경우 Linux Linux).하지만 다른 파일 시스템의 기술에도 관심이 있습니다.



답변

debugfs이것을 위해 사용할 수 있습니다 :

debugfs -R "stat ~/myfile" /dev/hda1

하드 / 파티션 드라이브를 적절히 변경하고 드라이브가 마운트 해제되었는지 확인하십시오. 사용 된 모든 블록이있는 목록이 나타납니다.

BLOCKS:
(0):1643532
TOTAL: 1

답변

FIBMAP ioctl을 여기 에 예시 된대로 사용하거나 hdparm을 사용하여 사용할 수 있습니다 .

/ $ sudo /sbin/hdparm --fibmap /etc/X11/xorg.conf

/etc/X11/xorg.conf:
 filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    1579088    1579095          8

답변

스레드는 ext4 파일 배치 알고리즘에 대한 통찰력을 제공 할 수 있습니다.

debugfsbmap원하는 데이터를 제공하는 것 기능을. 파일에 연속적인 블록을 제공하고 물리적 블록 번호를 얻을 수 있어야합니다.


답변

질문은 다소 오래되었지만 Google에서 이것을 찾는 사람들에게 유용 할 수있는 또 다른 대답이 있습니다 filefrag(Debian에서는 package 안에 있습니다 e2fsprogs).

# filefrag -eX /usr/bin/aptitude
Filesystem type is: ef53
File size of /usr/bin/aptitude is 4261400 (1041 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..     1fa:    15bd805..   15bd9ff:    1fb:
   1:      1fb..     3f2:    15c6608..   15c67ff:    1f8:    15bda00:
   2:      3f3..     410:    15c8680..   15c869d:     1e:    15c6800: last,eof
/usr/bin/aptitude: 3 extents found

여기에 설명 된 다른 도구에서 지원하지 않는 다른 파일 시스템 (UDF에 사용)에서도 작동한다는 장점이 있습니다.

출력에 표시되는 오프셋은 두 번째 줄에 쓰여진 블록 크기의 배수 (4096)입니다. 파일에 구멍이있을 수 있으므로 (파일 시스템에서 지원하는 경우) 논리적 오프셋은 연속적이지 않을 수 있습니다.