디스크의 MBR에 이 정보가 포함되어 있으므로 fdisk와 같은 명령을 호출하면 커널 수준 코드가 실행되어 MBR의 특정 부분에서 해당 정보를 읽게 됩니까? 그렇다면 어떤 부분인가요? 무슨 오프셋?
MBR에 없으면 이러한 유형의 명령은 어떻게 찾습니까? 파티션의 시작 주소를 계산해야 하고 이를 위해 섹터 크기가 필요하다는 점을 고려하면 파티션의 시작 부분부터 읽을 수는 없겠죠?
fdisk
이 정보를 찾기 위해 비슷한 명령을 실행하려면 어떻게 해야 합니까 ? 그 사람들이 그걸 어디서 읽었나요?
답변1
장치의 섹터 크기는 MBR에 저장되지 않습니다.
fdisk
use the BLKBSZGET
및와 같은 사용자 공간 명령BLKSSZGET
ioctl
s는 디스크에서 섹터 크기를 검색합니다. 이는 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
에 관한 정보위키피디아그리고리눅스 매뉴얼 페이지.