lsblk는 섹터 크기를 어떻게 얻습니까?

lsblk는 섹터 크기를 어떻게 얻습니까?

내 디스크는 sda입니다. 크기 파일이 있습니다 /sys/dev/block/8:0/size. 단위는 섹터이다. 실행하면 strace lsblk파일을 읽는 것을 볼 수 있습니다.

그러나 lsblk는 나중에 총 디스크 크기를 바이트 단위로 표시하기 위해 섹터 크기를 어떻게 얻습니까? 왜냐면 난할 수 없다lsblk에서 파일 읽기 hw_sector_size또는 를 참조하세요 physical_block_size.

답변1

그렇지 않은 이유는 필요하지 않기 때문입니다. /sys/block/<device>/size사용되는 섹터 크기는 장치의 실제 물리적 섹터 크기에 관계없이 항상 512입니다. 이에 대한 문서를 찾을 수 없으므로 참조하겠습니다.이 답변그들 중 일부가 있습니다커널 코드 링크댓글로 지적해

Linux는 장치의 실제 블록 크기에 관계없이 항상 섹터를 512바이트 길이로 처리합니다.

루핑 장치에 대한 빠른 테스트에서도 이것이 사실임을 보여줍니다.

$ cat /sys/block/loop0/size 
204800
$ cat /sys/block/loop0/queue/physical_block_size 
512

$ cat /sys/block/loop1/size 
204800
$ cat /sys/block/loop1/queue/physical_block_size 
4096

100MiB 장치입니다.

$ lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0                                           7:0    0   100M  0 loop  
loop1                                           7:1    0   100M  0 loop 

lsblk( 물리적 섹터 크기도 사용된 결과에 포함하도록 요청하면 실제로 물리적 크기가 필요할 때 파일을 읽는 -o+PHY-SEC것을 볼 수 있습니다 .)queue/physical_block_size

관련 정보