fdisk -l과 같은 명령을 사용하여 섹터 크기를 찾는 방법은 무엇입니까?

fdisk -l과 같은 명령을 사용하여 섹터 크기를 찾는 방법은 무엇입니까?

디스크의 MBR에 이 정보가 포함되어 있으므로 fdisk와 같은 명령을 호출하면 커널 수준 코드가 실행되어 MBR의 특정 부분에서 해당 정보를 읽게 됩니까? 그렇다면 어떤 부분인가요? 무슨 오프셋?

MBR에 없으면 이러한 유형의 명령은 어떻게 찾습니까? 파티션의 시작 주소를 계산해야 하고 이를 위해 섹터 크기가 필요하다는 점을 고려하면 파티션의 시작 부분부터 읽을 수는 없겠죠?

fdisk이 정보를 찾기 위해 비슷한 명령을 실행하려면 어떻게 해야 합니까 ? 그 사람들이 그걸 어디서 읽었나요?

답변1

장치의 섹터 크기는 MBR에 저장되지 않습니다.

fdiskuse the BLKBSZGET및와 같은 사용자 공간 명령BLKSSZGET ioctls는 디스크에서 섹터 크기를 검색합니다. 이는 ioctl드라이버 자체에서 관련 정보를 검색하는 커널의 드라이버에 의해 처리됩니다.

(이에 대한 문서는 많지 않습니다 ioctl. 확인해야 합니다.커널 소스 코드.)

드라이브를 직접 쿼리하는 다른 도구(예: )를 사용하여 관련 정보를 볼 수 있습니다 hdparm. 작은 SSD에 대해 hdparm -I말해 보세요 .

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                   512 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
[...]

4K 섹터가 있는 대형 회전 디스크에서 내가 얻는 것은 다음과 같습니다.

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 3.5 inch
Nominal Media Rotation Rate: 5400
[...]

답변2

몇 가지 질문이 있으며 "fdisk는 디스크의 섹터 크기를 어디서 찾나요?"에 대한 답을 찾으려고 노력하고 있습니다. 내가 찾은 가장 좋은 점은 ioctl.

ioctl에 관한 정보위키피디아그리고리눅스 매뉴얼 페이지.

fdisk 소스 코드 링크

관련 정보